diff options
-rw-r--r-- | xdeadzone.1 | 53 | ||||
-rw-r--r-- | xdeadzone.c | 24 | ||||
-rw-r--r-- | xdeadzone.rst | 51 |
3 files changed, 61 insertions, 67 deletions
diff --git a/xdeadzone.1 b/xdeadzone.1 index 74505d4..115b9d9 100644 --- a/xdeadzone.1 +++ b/xdeadzone.1 @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "XDEADZONE" 1 "2024-02-03" "0.1" "Urchlay's Misc Stuff" +.TH "XDEADZONE" 1 "2024-02-04" "0.1" "Urchlay's Misc Stuff" .SH NAME xdeadzone \- keep the mouse pointer out of the dead zone, on mismatched multihead displays. .\" RST source for xdeadzone(1) man page. Convert with: @@ -36,7 +36,7 @@ xdeadzone \- keep the mouse pointer out of the dead zone, on mismatched multihea . .SH SYNOPSIS .sp -xdeadzone <[\fB\-i\fP \fB\-b\fP | \fB\-w\fP ]> <\fB\-n*> [\fP\-nw** | \fB\-ne\fP | \fB\-sw\fP | \fB\-se\fP | \fB\-abs\fP] \fIgeometry\fP +xdeadzone [\fB\-b\fP | \fB\-w\fP ] [\fB\-n*] [\fP\-nw** | \fB\-ne\fP | \fB\-sw\fP | \fB\-se\fP ] \fIgeometry\fP .sp xdeadzone \fB\-\-help\fP | \fB\-\-version\fP .SH DESCRIPTION @@ -50,8 +50,9 @@ resolution. .sp It could also be useful for covering annoying parts of the screen, e.g. advertisements in ad\-driven software like the Opera browser, or -Adobe Reader. Use \fB\-abs\fP (absolute positioning) mode for this, -and either \fB\-b\fP or \fB\-w\fP to make the window visible. +Adobe Reader. Use absolute positioning (no \fB\-nw\fP, \fB\-ne\fP, \fB\-sw\fP, +\fB\-se\fP) for this, and either \fB\-b\fP or \fB\-w\fP to make the window +visible. .sp By default, \fBxdeadzone\fP doesn\(aqt display a visible window. It stays on top of other windows, and is present on every virtual desktop. @@ -72,9 +73,23 @@ mouse from the wrong part of the screen. .SH OPTIONS .sp Options can appear in any order on the command line. +.SS Required argument +.INDENT 0.0 +.TP +.B \fBgeometry\fP +This is a standard X11 geometry specification. Its format is +<\fIwidth\fP>x<\fIheight\fP> for \fB\-nw\fP, \fB\-ne\fP, \fB\-sw\fP, \fB\-se\fP modes. For +absolute positioning, +it\(aqs <\fIwidth\fP>x<\fIheight\fP>[\fI+\-\fP]<\fIxpos\fP>[\fI+\-\fP]<\fIypos\fP>. +Negative xpos and ypos will be +treated as offsets from the right/bottom of the display. +.sp +Examples: \fB200x100\fP, \fB64x64\-0\-0\fP, \fB50x60+100+100\fP\&. +.UNINDENT .SS Modes .sp -One (and only one) mode option is required. +One (and only one) mode option is allowed. If none is given, +absolute positioning is used. .INDENT 0.0 .TP .B \fB\-nw\fP @@ -88,31 +103,14 @@ Place window at southwest (bottom left) corner of display. .TP .B \fB\-se\fP Place window at southeast (bottom right) corner of display. -.TP -.B \fB\-abs\fP -Place window at the coordinates given by \fBgeometry\fP\&. -.UNINDENT -.SS Required argument -.INDENT 0.0 -.TP -.B \fBgeometry\fP -This is a standard X11 geometry specification. Its format is -<\fIwidth\fP>x<\fIheight\fP> for all modes other than \fB\-abs\fP\&. For \fB\-abs\fP, -it\(aqs <\fIwidth\fP>x<\fIheight\fP>[\fI+\-\fP]<\fIxpos\fP>[\fI+\-\fP]<\fIypos\fP>. -Negative xpos and ypos will be -treated as offsets from the right/bottom of the display. -.sp -Examples: \fB200x100\fP, \fB64x64\-0\-0\fP, \fB50x60+100+100\fP\&. .UNINDENT .SS Appearance options .sp -These are optional, and control how \fBxdeadzone\fP\(aqs window will -look and behave. +These are optional, and control how \fBxdeadzone\fP\(aqs window will look +and behave. By default, the window is invisible (\fIInputOnly\fP in Xlib +terms). .INDENT 0.0 .TP -.B \fB\-i\fP -Make window invisible. This is the default. -.TP .B \fB\-b\fP Make window visible, display as a black rectangle. .TP @@ -122,7 +120,10 @@ Make window visible, display as a white rectangle. .B \fB\-n\fP Create window as a normal window, with titlebar and without appearing on all desktops. Implies \fB\-w\fP, but can be followed -by \fB\-b\fP for a black rectangle. Cannot be combined with \fB\-i\fP\&. +by \fB\-b\fP for a black rectangle. +In this mode, the window will have a titlebar (but no close button), +will be movable and resizable, and will not appear on all virtual +desktops. However, it will still be "always on top". .UNINDENT .SS Informational options .INDENT 0.0 diff --git a/xdeadzone.c b/xdeadzone.c index 2b38b5e..70d57cd 100644 --- a/xdeadzone.c +++ b/xdeadzone.c @@ -47,8 +47,8 @@ void usage(const int ret) { banner(); printf( "Usage:\n %s " - "<-b | -w | -i> <-n> [-nw | -ne | -sw | -se | -abs] [geometry]\n\n" - " <geometry> is WxH for all modes but -abs, or\n WxH[+-]xpos[+-]ypos for -abs\n", + "[-b | -w ] [ -n ] [ -nw | -ne | -sw | -se ] [geometry]\n\n" + " <geometry> is WxH with -nw/-ne/-sw/-se, or\n WxH[+-]xpos[+-]ypos\n", exe_name); exit(ret); } @@ -59,8 +59,8 @@ void errmsg(const char *msg) { } void check_mode(int mode) { - if(mode != M_UNSET) - errmsg("multiple modes given, only one of -abs -ne -nw -se -sw is allowed"); + if(mode != M_ABS) + errmsg("multiple modes given, only one of -ne -nw -se -sw is allowed"); } int streq(const char *s1, const char *s2) { @@ -84,7 +84,7 @@ int main(int argc, char **argv) { XSetWindowAttributes setattr; XSizeHints hints; - int x = -1, y = -1, gflags = -1, visible = 0, black = 0, mode = M_UNSET, normal_window = 0; + int x = -1, y = -1, gflags = -1, visible = 0, black = 0, mode = M_ABS, normal_window = 0; unsigned int width, height; int new_x, new_y; @@ -105,14 +105,9 @@ int main(int argc, char **argv) { } else if(streq(a, "-w")) { visible = 1; black = 0; - } else if(streq(a, "-i")) { - visible = 0; } else if(streq(a, "-n")) { visible = 1; normal_window = 1; - } else if(streq(a, "-abs")) { - check_mode(mode); - mode = M_ABS; } else if(streq(a, "-ne")) { check_mode(mode); mode = M_NE; @@ -142,12 +137,12 @@ int main(int argc, char **argv) { DBG(printf("XParseGeometry got %d %d %d %d\n", x, y, width, height)); if(mode != M_ABS && (gflags & (XValue | YValue))) - errmsg("bad geometry: X and Y position not allowed without -abs"); + errmsg("bad geometry: X and Y position not allowed with -ne -nw -se -sw"); switch(mode) { case M_ABS: if(!(gflags & (XValue | YValue))) - errmsg("bad geometry: -abs requires X and Y position"); + errmsg("bad geometry: requires X and Y position or -ne -nw -se -sw"); break; case M_NW: x = 0; y = 0; break; @@ -158,15 +153,12 @@ int main(int argc, char **argv) { case M_SE: x = -width; y = -height; break; default: - errmsg("no mode given, one of -abs -ne -nw -se -sw is required"); + errmsg("invalid mode (internal logic error, this should never happen)"); } if(width == 0 || height == 0) errmsg("bad geometry: width and height must be non-zero"); - if(normal_window && !visible) - errmsg("cannot combine -i (invisible) with -n (normal window)"); - if(!(d = XOpenDisplay(NULL))) errmsg("can't open X display"); diff --git a/xdeadzone.rst b/xdeadzone.rst index 5b77573..58114ac 100644 --- a/xdeadzone.rst +++ b/xdeadzone.rst @@ -20,7 +20,7 @@ keep the mouse pointer out of the dead zone, on mismatched multihead displays. SYNOPSIS ======== -xdeadzone <[**-i** **-b** | **-w** ]> <**-n*> [**-nw** | **-ne** | **-sw** | **-se** | **-abs**] *geometry* +xdeadzone [**-b** | **-w** ] [**-n*] [**-nw** | **-ne** | **-sw** | **-se** ] *geometry* xdeadzone **--help** | **--version** @@ -36,8 +36,9 @@ resolution. It could also be useful for covering annoying parts of the screen, e.g. advertisements in ad-driven software like the Opera browser, or -Adobe Reader. Use **-abs** (absolute positioning) mode for this, -and either **-b** or **-w** to make the window visible. +Adobe Reader. Use absolute positioning (no **-nw**, **-ne**, **-sw**, +**-se**) for this, and either **-b** or **-w** to make the window +visible. By default, **xdeadzone** doesn't display a visible window. It stays on top of other windows, and is present on every virtual desktop. @@ -61,10 +62,24 @@ OPTIONS Options can appear in any order on the command line. +Required argument +----------------- + +**geometry** + This is a standard X11 geometry specification. Its format is + <*width*>x<*height*> for **-nw**, **-ne**, **-sw**, **-se** modes. For + absolute positioning, + it's <*width*>x<*height*>[*+-*]<*xpos*>[*+-*]<*ypos*>. + Negative xpos and ypos will be + treated as offsets from the right/bottom of the display. + + Examples: **200x100**, **64x64-0-0**, **50x60+100+100**. + Modes ----- -One (and only one) mode option is required. +One (and only one) mode option is allowed. If none is given, +absolute positioning is used. **-nw** Place window at northwest (top left) corner of display. @@ -78,29 +93,12 @@ One (and only one) mode option is required. **-se** Place window at southeast (bottom right) corner of display. -**-abs** - Place window at the coordinates given by **geometry**. - -Required argument ------------------ - -**geometry** - This is a standard X11 geometry specification. Its format is - <*width*>x<*height*> for all modes other than **-abs**. For **-abs**, - it's <*width*>x<*height*>[*+-*]<*xpos*>[*+-*]<*ypos*>. - Negative xpos and ypos will be - treated as offsets from the right/bottom of the display. - - Examples: **200x100**, **64x64-0-0**, **50x60+100+100**. - Appearance options ------------------ -These are optional, and control how **xdeadzone**'s window will -look and behave. - -**-i** - Make window invisible. This is the default. +These are optional, and control how **xdeadzone**'s window will look +and behave. By default, the window is invisible (*InputOnly* in Xlib +terms). **-b** Make window visible, display as a black rectangle. @@ -111,7 +109,10 @@ look and behave. **-n** Create window as a normal window, with titlebar and without appearing on all desktops. Implies **-w**, but can be followed - by **-b** for a black rectangle. Cannot be combined with **-i**. + by **-b** for a black rectangle. + In this mode, the window will have a titlebar (but no close button), + will be movable and resizable, and will not appear on all virtual + desktops. However, it will still be "always on top". Informational options --------------------- |