Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
475 lines (297 sloc) 12.6 KB

NAME

xde-pager - desktop cycling for XDE

SYNOPSIS

xde-pager [OPTIONS]

DESCRIPTIONS

Provides desktop cycling feedback for window managers that do not provide desktop cycling feedback themselves or for those that provide an inferior feedback. The desktop cycling feedback is a pager where each cell corresponds to a workspace on the current monitor (or multiple monitors). The feedback pop-up can also have a desktop selected using the mouse.

OPTIONS

xde-pager accepts the following options:

COMMAND OPTIONS

When specified, the following options alter the primary operating mode of the program:

unspecified

When no command option is specified, the default is to run the pager without replacing an existing instance. It is an error if an instance is currently running.

--replace, -r

Run the pager, but replace a running instance of xde-pager. It is not an error when no instance is currently running.

--restart, -S

Ask a running instance to restart. It is an error if there is no instance currently running. This is useful when the binary has been upgraded.

--quit, -q

Ask a running instance of xde-pager to quit. It is not an error if no instance is currently running.

--help, -h

Prints usage information and the current options settings and defaults and exits.

--version, -V

Prints the version of the program and a brief copyright statement and exits. Parse the first line with awk(1) to obtain just the version number.

--copying, -C

Prints the long copying permission statement and exits.

GENERAL OPTIONS

The following options are general options:

--display, -d DISPLAY

Specify the display to use (overriding the DISPLAY environment variable). The default is the value of the DISPLAY environment variable.

--screen, -s SCREEN

Specify the screen number to use when locating the current window and workspace. The default is either specified by the DISPLAY environment variable (when that variable specifies a screen); otherwise, all screens will be considered.

--timeout, -t TIMEOUT

When cycling the desktops with the mouse or other than a modified keystroke, or if a key is pressed that does not result in a desktop change, the feedback window will persist for TIMEOUT milliseconds. The default is 1000 (or 1 second).

--border, -B WIDTH

Places a border around the pager of WIDTH pixels. The default is 5 pixels.

--proxy, -p

Normally the pager will translate scroll wheel events received on a _WIN_DESKTOP_BUTTON_PROXY window into desktop changes. As other programs (such as a desktop) may also be doing so, this option causes the pager to consider the desktop button proxy.

--button, -b BUTTON

Specifies the button that was used to invoke the pop-up. Defaults to zero (0). This should be the button that was used to pop the pager. A window manager that invokes this command in response to a button press should release its passive grab on the button before invoking the pager so that the popped up menu can grab the button. A BUTTON of zero (0) means that the program was invoked with a key-press instead of a button.

--pointer, -P

An alternate way of specifying --button=1.

--keyboard, -K

An alternate way of specifying --button=0.

--timestamp, -T TIMESTAMP

Provides the X11 server time-stamp of the event that caused the pop-up.

--verbose, -v [LEVEL]

Print extra information on standard error while running. When LEVEL is not specified, simply increments the output verbosity; otherwise, the output verbosity is set to LEVEL.

--debug, -D [LEVEL]

Print debugging information on standard error while running. When LEVEL is not specified, simply increments the debug level; otherwise, the debug level is set to LEVEL.

SESSION MANAGEMENT OPTIONS

X session management options are not used by another user other than the X11 Session Manager. The following options are used by X session management:

-clientId CLIENTID

Specifies the X Session Management client identifier of the previously running session of xde-pager.

-restore SAVEFILE

Specifies the X Session Management file name of a file to which to save session information.

USAGE

xde-pager currently uses libwnck+ or libwnck to detect workspace changes and to provide the pager feedback, so the window manager must support some modicum of EWMH/NetWM compliance for the feedback to be effective. Eventually I might make libwnkc+ support GNOME1/WinWM, OSF/Motif and even just ICCCM compliant window managers, but, for now, some EWMH/NetWM compliance is needed.

Run xde-pager in the background or launch using the supplied XDG autostart file. The program takes the following steps:

  1. Waits for a desktop change as signalled by a change to _NET_CURRENT_DESKTOP on the root window of any screen.

  2. When the desktop changes, the program grabs the pointer and the keyboard. If there is a keyboard modifier down, it displays the feedback window and proxies key presses and releases to the root window. When all modifiers are released or when a selection is made or its pointer grab is broken, it drops the feedback window and waits for another desktop change.

    While the feedback pop-up is displayed, the mouse can be used to select a desktop. When selected the window will not drop until the mouse leaves the pop-up, a modifier is released, or a key press is made that does not result in a desktop change.

WINDOW MANAGERS

2bwm(1)

is supported and works well.

adwm(1)

is supported and works well.

aewm(1)

aewm(1) does not really support desktops and is, therefore, not supported. (Well, it does.)

aewm++(1)

aewm++(1) is barely ICCCM compliant. It does not really support desktops and is, therefore, not supported.

afterstep(1)

afterstep(1) provides both workspaces and view ports (large desktops). libwnck+ does not support these well, so when xde-pager detects that it is running under afterstep(1) it does nothing. (It has a desktop button proxy, but it does not relay scroll wheel events by default.)

awesome(1)

is supported and works well.

blackbox(1)

is supported and works well.

bspwm(1)

is supported and works well.

ctwm(1)

ctwm(1) is only GNOME/WinWM compliant and is not yet supported by libwnck+. xde-pager mitigates this to some extent; however, use etwm(1) instead.

cwm(1)

cwm(1) is supported, but it doesn't work that well because cwm(1) is not placing _NET_WM_STATE on client windows, so libwnck+ cannot locate them and will not provide contents in the pager.

dtwm(1)

dtwm(1) is only OSF/Motif compliant and does support multiple desktops; however, libwnck+ does not yet support OSF/Motif/CDE.

dwm(1)

dwm(1) is barely ICCCM compliant. It is not supported.

echinus(1)

is supported and works well.

etwm(1)

is supported and works well.

failsafewm(1)

failsafewm(1) has no desktops.

fluxbox(1)

is supported and works well.

flwm(1)

flwm(1) supports GNOME/WinWM but not EWMH/NetWM and is not currently supported by libwnck+. xde-pager mitigates this to some extent.

fvwm(1)

is supported and works well. fvwm(1) provides a desktop button proxy but it needs the --noproxy option. Viewports work better than on afterstep(1) and behaviour is predictable.

glasswm(1)

glasswm(1) provides some window control atoms of its own; however, xde-pager does not support these at this time.

goomwwm(1)

goomwwm(1) does not provide workspace cycling feedback of its own. goomwwm(1) is supported and should work well.

herbstluftwm(1)

is supported and works well.

i3(1)

i3(1) is supported; however, i3(1) does not support _NET_NUMBER_OF_DESKTOPS, so only the current desktop is shown at any given time, which makes it less effective. (This may have been fixed in current versions of i3(1)).

icewm(1)

icewm(1) provides its own pager on the panel, but does respect _NET_DESKTOP_LAYOUT in some versions. Although a desktop button proxy is provided, older versions of icewm(1) will not proxy button events sent by the pager. Use the version at https://github.com/bbidulock/icewm for best results.

jwm(1)

jwm(1) provides its own pager on the panel, but does not respect or set _NET_DESKTOP_LAYOUT, and key bindings are confused. When xde-pager detects that it is running under jwm(1) it will simply do nothing.

larswm(1)

larswm(1) is barely ICCCM compliant and is, therefore, not supported.

matwm2(1)

is supported and works well.

metacity(1)

metacity(1) provides its own competent desktop switching feedback pop-up. When xde-pager detects that it is running under metacity(1) it will simply do nothing.

mvwm(1)

is supported and works well. mvwm(1) provides a desktop button proxy but it needs the --noproxy option. View ports work better than on afterstep(1) and behaviour is predictable.

mwm(1)

mwm(1) only supports OSF/Motif and does not support multiple desktops. Is is not supported.

openbox(1)

openbox(1) provides its own meager desktop switching feedback pop-up. It does respect _NET_DESKTOP_LAYOUT but does not provide any of the contents of the desktop. When both are running it is a little confusing, so when xde-pager detects that it is running under openbox(1) it will simply do nothing.

pekwm(1)

pekwm(1) provides its own broken desktop switching feedback pop-up; however, it does not respect _NET_DESKTOP_LAYOUT and key bindings are confused. When xde-pager detects that it is running under pekwm(1) it will simply do nothing.

spectrwm(1)

spectrwm(1) is supported, but it doesn't work that well because, like cwm(1), spectrwm(1) is not placing _NET_WM_STATE on client windows, so libwnck+ cannot locate them and will not provide contents in the pager. This may have been fixed in more current versions of spectrwm(1).

twm(1)

twm(1) does not support multiple desktops and is unsupported.

uwm(1)

is supported and works well.

velox(1)

is untested.

vtwm(1)

vtwm(1) is barely ICCCM compliant and currently unsupported: use etwm(1) instead.

waimea(1)

is supported; however, waimea defaults to triple-sized large desktops in a 2x2 arrangement. With large virtual desktops libwnck+ gets confused just as with afterstep(1). fvwm(1) must be doing something right. It appears to be _NET_DESKTOP_VIEWPORT, which is supposed to be set to the viewport position of each desktop (and isn't). Use the waimea at https://github.com/bbidulock/waimea for a corrected version.

wind(1)

is supported and works well.

wm2(1)

wm2(1) is barely ICCCM compliant and currently unsupported: use its wmx(1) derivative.

wmaker(1)

is supported and works well.

wmii(1)

is supported and works well. wmii(1) was stealing the focus back from the pop-up, but this was fixed.

wmx(1)

is supported and works well.

xdwm(1)

xdwm(1) does not support EWMH/NetWM for desktops.

yeahwm(1)

yeahwm(1) does not support EWMH/NetWM and is currently unsupported. The pager will simply not do anything while this window manager is running.

ENVIRONMENT

The following environment variables are considered by the program:

SESSION_MANAGER

Specifies the list of transport connections on which to contact the session manager.

SM_SAVE_DIR

Specifies the directory in which to save session files. When unset, the directory defaults to the user's home directory.

HISTORY

I wrote this program particularly for use with adwm(1) and other tiling window managers that provide no feedback for desktop changes and do not typically run well with a panel or pager. It provides workspace change feedback without taking up valuable screen real-estate while the workspace is not changing. Also, when used with libwnck+, the pager is multiple-monitor aware and can handle per-monitor tagged workspaces.

AUTHOR

Brian Bidulock mailto:bidulock@openss7.org.

SEE ALSO

getopt_long_only(3), xde-ctools(1) xde-keys(1)

You can’t perform that action at this time.