'\" t .\" Title: fvwm3commands .\" Author: [see the "AUTHOR(S)" section] .\" Generator: Asciidoctor 2.0.26 .\" Date: 2026-01-14 .\" Manual: \ \& .\" Source: \ \& .\" Language: English .\" .TH "FVWM3COMMANDS" "1" "2026-01-14" "\ \&" "\ \&" .ie \n(.g .ds Aq \(aq .el .ds Aq ' .ss \n[.ss] 0 .nh .ad l .de URL \fI\\$2\fP <\\$1>\\$3 .. .als MTO URL .if \n[.g] \{\ . mso www.tmac . am URL . ad l . . . am MTO . ad l . . . LINKSTYLE blue R < > .\} .SH "NAME" fvwm3commands \- fvwm built\-in commands .SH "LIST OF FVWM COMMANDS" .sp The command descriptions below are grouped together in the following sections. The sections are hopefully sorted in order of usefulness to the newcomer. .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ . sp -1 . IP \(bu 2.3 .\} \fBMenu commands\fP .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ . sp -1 . IP \(bu 2.3 .\} \fBMiscellaneous commands\fP .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ . sp -1 . IP \(bu 2.3 .\} \fBCommands affecting window movement and placement\fP .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ . sp -1 . IP \(bu 2.3 .\} \fBCommands for focus and mouse movement\fP .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ . sp -1 . IP \(bu 2.3 .\} \fBCommands controlling window state\fP .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ . sp -1 . IP \(bu 2.3 .\} \fBCommands for mouse and key bindings\fP .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ . sp -1 . IP \(bu 2.3 .\} \fBThe Style command (controlling window styles)\fP .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ . sp -1 . IP \(bu 2.3 .\} \fBOther commands controlling window styles\fP .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ . sp -1 . IP \(bu 2.3 .\} \fBCommands controlling the virtual desktop\fP .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ . sp -1 . IP \(bu 2.3 .\} \fBCommands for user functions and shell commands\fP .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ . sp -1 . IP \(bu 2.3 .\} \fBConditional commands\fP .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ . sp -1 . IP \(bu 2.3 .\} \fBModule commands\fP .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ . sp -1 . IP \(bu 2.3 .\} \fBQuit, restart and session management commands\fP .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ . sp -1 . IP \(bu 2.3 .\} \fBColorsets\fP .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ . sp -1 . IP \(bu 2.3 .\} \fBColor gradients\fP .RE .SS "Miscellaneous Commands" .sp \fBBugOpts\fP [\fIoption\fP [\fIbool\fP]], .\|.\|. .RS 4 This command controls several workarounds for bugs in third party programs. The individual options are separated by commas. The optional argument \fIbool\fP is a boolean argument and controls if the bug workaround is enabled or not. It can either be "True" or "False" to turn the option on or off, or "toggle" to switch is back and forth. If \fIbool\fP is omitted, the default setting is restored. .sp \fIDebugRandR\fP activates monitor layout debug messages. .sp \fIFlickeringMoveWorkaround\fP disables ConfigureNotify events that are usually sent to an application while it is moved. If some windows flicker annoyingly while being moved, this option may help you. Note that if this problem occurs it is not an fvwm bug, it is a problem of the application. .sp \fIMixedVisualWorkaround\fP makes fvwm install the root colormap before it does some operations using the root window visuals. This is only useful when the \fB\-visual\fP option is used to start fvwm and then only with some configurations of some servers (e.g. Exceed 6.0 with an 8 bit PseudoColor root and fvwm using a 24 bit TrueColor visual). .sp The \fIModalityIsEvil\fP option controls whether Motif applications have the ability to have modal dialogs (dialogs that force you to close them first before you can do anything else). The default is to not allow applications to have modal dialogs. Use this option with care. Once this option is turned on, you have to restart fvwm to turn it off. .sp \fIRaiseOverNativeWindows\fP makes fvwm try to raise the windows it manages over native windows of the X server\(cqs host system. This is needed for some X servers running under Windows, Windows NT or Mac OS X. Fvwm tries to detect if it is running under such an X server and initializes the flag accordingly. .sp \fIRaiseOverUnmanaged\fP makes fvwm try to raise the windows it manages over override_redirect windows. This is used to cope with ill\-mannered applications that use long\-lived windows of this sort, contrary to ICCCM conventions. It is useful with the \fIUnmanaged\fP style option too. .sp \fIFlickeringQtDialogsWorkaround\fP suppresses flickering of the focused window in some modules when using KDE or QT applications with application modal dialog windows. By default this option is turned on. This option may be visually disturbing for other applications using windows not managed by fvwm. Since these applications are rare it is most likely safe to leave this option at its default. .sp \fIQtDragnDropWorkaround\fP suppresses the forwarding of unknown ClientEvent messages to windows \(em usually this is harmless, but Qt has problems handling unrecognised ClientEvent messages. Enabling this option might therefore help for Qt applications using DragnDrop. This option is off by default. .sp \fIEWMHIconicStateWorkaround\fP is needed by EWMH compliant pagers or taskbars which represent windows which are on a different desktops as iconified. These pagers and taskbars use a version of the EWMH specification before version 1.2 (the current KDE 2 & 3 versions). These pagers and taskbars use the IconicState WM_STATE state to determine if an application is iconified. This state, according to the ICCCM, does not imply that a window is iconified (in the usual sense). Turning on this option forces fvwm to establish an equivalence between the IconicState WM_STATE state and the iconified window. This violates ICCCM compliance but should not cause big problems. By default this option is off. .sp With the \fIDisplayNewWindowNames\fP enabled, fvwm prints the name, icon name (if available), resource and class of new windows to the console. This can help in finding the correct strings to use in the \fBStyle\fP command. .sp When the \fIExplainWindowPlacement\fP option is enabled, fvwm prints a message to the console whenever a new window is placed or \fBPlaceAgain\fP, is used. The message explains on which desk, page, screen and position it was placed and why. This option can be used to figure out why a specific window does not appear where you think it should. .sp The \fIDebugCRMotionMethod\fP option enables some debugging code in the ConfigureRequest handling routines of fvwm. It is not helpful for the user, but if you report a bug to the fvwm team we may ask you to enable this option. .sp The \fITransliterateUtf8\fP option enables transliteration during conversions from utf\-8 strings. By default fvwm will not transliterate during conversion, but will fall back to alternate strings provided by the clients if conversion from utf\-8 fails due to characters which have no direct correspondence in the target charecter set. Some clients however neglect to set non utf\-8 properties correctly in which case this option may help. .RE .sp \fBBusyCursor\fP [\fIOption\fP \fIbool\fP], .\|.\|. .RS 4 This command controls the cursor during the execution of certain commands. \fIOption\fP can be \fIDynamicMenu\fP, \fIModuleSynchronous\fP, \fIRead\fP, \fIWait\fP or \fI*\fP. An option must be followed by a boolean argument \fIbool\fP. You can use commas to separate individual options. If you set an option to "True", then when the corresponding command is run, fvwm displays the cursor of the \fIWAIT\fP context of the \fBCursorStyle\fP command. "False" forces to not display the cursor. The default is: .sp .if n .RS 4 .nf .fam C BusyCursor DynamicMenu False, ModuleSynchronous False, \(rs Read False, Wait False .fam .fi .if n .RE .sp The \fI*\fP option refers to all available options. .sp The \fIRead\fP option controls the \fBPipeRead\fP command. .sp The \fIDynamicMenu\fP option affects the \fIDynamicPopupAction\fP and \fIMissingSubmenuFunction\fP options of the \fBAddToMenu\fP command. If this option is set to "False", then the busy cursor is not displayed during a dynamic menu command even if this command is a \fBRead\fP or \fBPipeRead\fP command and the \fIRead\fP option is set to "True". .sp The \fIModuleSynchronous\fP option affects the \fBModuleSynchronous\fP command. If this option is set to "False", then the busy cursor is not displayed while fvwm waits for a module started by \fBModuleSynchronous\fP to complete its startup. .sp The \fIWait\fP option affects only the root cursor. During a wait pause the root cursor is replaced by the busy cursor and fvwm is still fully functional (you can escape from the pause, see the \fBEscapeFunc\fP command). If you want to use this option and if you do not use the default root cursor, you must set your root cursor with the \fBCursorStyle\fP command. .RE .sp \fBClickTime\fP [\fIdelay\fP] .RS 4 Specifies the maximum delay in milliseconds between a button press and a button release for the \fBFunction\fP command to consider the action a mouse click. The default delay is 150 milliseconds. Omitting the delay value resets the \fBClickTime\fP to the default. .sp ClickTime also specifies the delay between two clicks to be interpreted as a double\-click. .RE .sp \fBColormapFocus\fP FollowsMouse | FollowsFocus .RS 4 By default, fvwm installs the colormap of the window that the cursor is in. If you use .sp .if n .RS 4 .nf .fam C ColormapFocus FollowsFocus .fam .fi .if n .RE .sp then the installed colormap is the one for the window that currently has the keyboard focus. .RE .sp \fBCursorStyle\fP \fIcontext\fP [\fInum\fP | \fIname\fP | None | Tiny | \fIfile\fP [\fIx\fP \fIy\fP] [\fIfg\fP \fIbg\fP]] .RS 4 Defines a new cursor for the specified context. Note that this command can not control the shapes an applications uses, for example, to indicate that it is busy. The various contexts are: .sp \fIPOSITION\fP (top_left_corner) .RS 4 used when initially placing windows .RE .sp \fITITLE\fP (top_left_arrow) .RS 4 used in a window title\-bar .RE .sp \fIDEFAULT\fP (top_left_arrow) .RS 4 used in windows that do not set their cursor .RE .sp \fISYS\fP (hand2) .RS 4 used in one of the title\-bar buttons .RE .sp \fIMOVE\fP (fleur) .RS 4 used when moving or resizing windows .RE .sp \fIRESIZE\fP (sizing) .RS 4 used when moving or resizing windows .RE .sp \fIWAIT\fP (watch) .RS 4 used during certain fvwm commands (see \fBBusyCursor\fP for details) .RE .sp \fIMENU\fP (top_left_arrow) .RS 4 used in menus .RE .sp \fISELECT\fP (crosshair) .RS 4 used when the user is required to select a window .RE .sp \fIDESTROY\fP (pirate) .RS 4 used for \fBDestroy\fP, \fBClose\fP, and \fBDelete\fP commands .RE .sp \fITOP\fP (top_side) .RS 4 used in the top side\-bar of a window .RE .sp \fIRIGHT\fP (right_side) .RS 4 used in the right side\-bar of a window .RE .sp \fIBOTTOM\fP (bottom_side) .RS 4 used in the bottom side\-bar of a window .RE .sp \fILEFT\fP (left_side) .RS 4 used in the left side\-bar of a window .RE .sp \fITOP_LEFT\fP (top_left_corner) .RS 4 used in the top left corner of a window .RE .sp \fITOP_RIGHT\fP (top_right_corner) .RS 4 used in the top right corner of a window .RE .sp \fIBOTTOM_LEFT\fP (bottom_left_corner) .RS 4 used in the bottom left corner of a window .RE .sp \fIBOTTOM_RIGHT\fP (bottom_right_corner) .RS 4 used in the bottom right corner of a window .RE .sp \fITOP_EDGE\fP (top_side) .RS 4 used at the top edge of the screen .RE .sp \fIRIGHT_EDGE\fP (right_side) .RS 4 used at the right edge of the screen .RE .sp \fIBOTTOM_EDGE\fP (bottom_side) .RS 4 used at the bottom edge of the screen .RE .sp \fILEFT_EDGE\fP (left_side) .RS 4 used at the left edge of the screen .RE .sp \fIROOT\fP (left_ptr) .RS 4 used as the root cursor .RE .RE .sp The defaults are shown in parentheses above. If you ever want to restore the default cursor for a specific context you can omit the second argument. .sp The second argument is either the numeric value of the cursor as defined in the include file \fIX11/cursorfont.h\fP or its name (without the XC_ prefix). Alternatively, the xpm file name may be specified. The name can also be \fINone\fP (no cursor) or \fITiny\fP (a single pixel as the cursor). .sp .if n .RS 4 .nf .fam C # make the kill cursor be XC_gumby (both forms work): CursorStyle DESTROY 56 CursorStyle DESTROY gumby .fam .fi .if n .RE .sp Alternatively, the cursor can be loaded from an (XPM, PNG or SVG) image \fIfile\fP. If fvwm is compiled with Xcursor support, full ARGB is used, and (possibly animated) cursor files made with the \fBxcursorgen\fP program can be loaded. Otherwise the cursor is converted to monochrome. .sp The optional \fIx\fP and \fIy\fP arguments (following a \fIfile\fP argument) specifies the hot\-spot coordinate with 0 0 as the top left corner of the image. Coordinates within the image boundary are valid and overrides any hot\-spot defined in the (XPM/Xcursor) image file. An invalid or undefined hot\-spot is placed in the center of the image. .sp .if n .RS 4 .nf .fam C CursorStyle ROOT cursor_image.png 0 0 .fam .fi .if n .RE .sp The optional \fIfg\fP and \fIbg\fP arguments specify the foreground and background colors for the cursor, defaulting to black and white (reverse video compared to the actual bitmap). These colors are only used with monochrome cursors. Otherwise they are silently ignored. .sp .if n .RS 4 .nf .fam C CursorStyle ROOT nice_arrow.xpm yellow black .fam .fi .if n .RE .sp \fBDefaultFont\fP [\fIfontname\fP] .RS 4 \fBDefaultFont\fP sets the default font to font \fIfontname\fP. The default font is used by fvwm whenever no other font has been specified. To reset the default font to the built\-in default, omit the argument. The default font is used for menus, window titles, icon titles as well as the geometry feedback windows during a move or resize operation. To override the default font in a specific context, use the \fBStyle\fP * \fIFont\fP, \fBStyle\fP * \fIIconFont\fP, or \fBMenuStyle\fP commands. .RE .sp \fBDefaultIcon\fP \fIfilename\fP .RS 4 Sets the default icon which is used if a window has neither an client\-supplied icon nor an icon supplied via the \fIIcon\fP option of the \fBStyle\fP command. .RE .sp \fBDefaultLayers\fP \fIbottom\fP \fIput\fP \fItop\fP .RS 4 Changes the layers that are used for the \fIStaysOnBottom\fP, \fIStaysPut\fP, \fIStaysOnTop\fP \fBStyle\fP options. Initially, the layers 2, 4 and 6 are used. .RE .sp \fBDeschedule\fP [\fIcommand_id\fP] .RS 4 Removes all commands that were scheduled with the id \fIcommand_id\fP with the \fBSchedule\fP command from the list of commands to be executed unless they were already executed. If the \fIcommand_id\fP is omitted, the value of the variable $[schedule.last] is used as the id. .RE .sp \fBEmulate\fP Fvwm | Mwm | Win .RS 4 This command is a catch all for how miscellaneous things are done by fvwm. Right now this command affects where the move/resize feedback window appears and how window placement is aborted. To have more Mwm\- or Win\-like behavior you can call \fBEmulate\fP with \fIMwm\fP or \fIWin\fP as its argument. With Mwm resize and move feedback windows are in the center of the screen, instead of the upper left corner. This also affects how manual placement is aborted. See the \fIManualPlacement\fP description. .RE .sp \fBEscapeFunc\fP .RS 4 By default the key sequence Ctrl\-Alt\-Escape allows for escaping from a \fBWait\fP pause and from a locked \fBModuleSynchronous\fP command. The \fBEscapeFunc\fP command used with the \fBKey\fP command allows for configuring this key sequence. An example: .sp .if n .RS 4 .nf .fam C Key Escape A MC \- Key Escape A\& S EscapeFunc .fam .fi .if n .RE .sp replaces the Ctrl\-Alt\-Escape key sequence with Shift\-Escape for aborting a \fBWait\fP pause and \fBModuleSynchronous\fP command. \fBEscapeFunc\fP used outside the \fBKey\fP command does nothing. .RE .sp \fBFakeClick\fP [\fIcommand\fP \fIvalue\fP] .\|.\|. .RS 4 This command is mainly intended for debugging fvwm and no guarantees are made that it works for you. \fIFakeClick\fP can simulate mouse button press and release events and pass them to fvwm or the applications. The parameters are a list of commands which consist of pairs of \fIcommand\fP tokens and integer \fIvalues\fP, The \fIpress\fP and \fIrelease\fP commands are followed by the appropriate mouse button number and generate a button press or release event on the window below the pointer. The \fIwait\fP commands pauses fvwm for the given number of milliseconds. The \fImodifiers\fP command simulates pressing or releasing modifier keys. The values 1 to 5 are mapped to Mod1 to Mod5 while 6, 7 and 8 are mapped to Shift, Lock and Control. The modifier is set for any further button events. To release a modifier key, use the corresponding negative number. The \fIdepth\fP command determines to which window the button events are sent. With a depth of 1, all events go to the root window, regardless of the pointer\(cqs position. With 2, the event is passed to the top level window under the pointer which is usually the frame window. With 3, events go to the client window. Higher numbers go to successive sub windows. Zero (0) goes to the smallest window that contains the pointer. Note that events propagate upward. .sp .if n .RS 4 .nf .fam C FakeClick depth 2 press 1 wait 250 release 1 .fam .fi .if n .RE .sp This simulates a click with button 1 in the parent window (depth 2) with a delay of 250 milliseconds between the press and the release. Note: all command names can be abbreviated with their first letter. .RE .sp \fBFakeKeypress\fP [\fIcommand\fP \fIvalue\fP] .\|.\|. .RS 4 This command is mainly intended for debugging fvwm and no guarantees are made that it works for you. \fBFakeKeypress\fP can simulate key press and release events and pass them to fvwm or applications. The parameters are a list of commands which consist of pairs of command tokens and values. The \fIpress\fP and \fIrelease\fP commands are followed by a key name. The key name is a standard X11 key name as defined in \fI/usr/include/X11/keysymdef.h\fP, (without the \fIXK_\fP prefix), or the keysym database \fI/usr/X11R6/lib/X11/XKeysymDB\fP. The \fIwait\fP, \fImodifiers\fP and \fIdepth\fP commands are the same as those used by \fBFakeClick\fP. .sp Save all GVim sessions with: "Esc:w\(rsn" .sp .if n .RS 4 .nf .fam C All (gvim) FakeKeypress press Escape \(rs press colon \(rs press w \(rs press Return .fam .fi .if n .RE .sp Save & exit all GVim sessions with: "Esc:wq\(rsn" .sp .if n .RS 4 .nf .fam C All (gvim) FakeKeypress press Escape \(rs press colon \(rs press w \(rs press q \(rs press Return .fam .fi .if n .RE .sp Send A to a specific window: .sp .if n .RS 4 .nf .fam C WindowId 0x3800002 FakeKeypress press A .fam .fi .if n .RE .sp Note: all command names can be abbreviated with their first letter. .RE .sp \fBImagePath\fP \fIpath\fP .RS 4 Specifies a colon separated list of directories in which to search for images (both monochrome and pixmap). To find an image given by a relative pathname, fvwm looks into each directory listed in turn, and uses the first file found. .sp If a directory is given in the form "/some/dir;.ext", this means all images in this directory have the extension ".ext" that should be forced. The original image name (that may contain another extension or no extension at all) is not probed, instead ".ext" is added or replaces the original extension. This is useful, for example, if a user has some image directories with ".xpm" images and other image directories with the same names, but ".png" images. .sp The \fIpath\fP may contain environment variables such as \fI$HOME\fP (or \fI${HOME}\fP). Further, a \*(Aq+\*(Aq in the \fIpath\fP is expanded to the previous value of the path, allowing appending or prepending to the path easily. .sp For example: .sp .if n .RS 4 .nf .fam C ImagePath $HOME/icons:+:/usr/include/X11/bitmaps .fam .fi .if n .RE .RE .sp \fBLocalePath\fP \fIpath\fP .RS 4 Specifies a colon separated list of "locale path" in which to search for string translations. A locale path is constituted by a directory path and a text domain separated by a semicolon (\*(Aq;\*(Aq). As an example the default locale path is: .sp .if n .RS 4 .nf .fam C /install_prefix/share/locale;fvwm .fam .fi .if n .RE .sp where install_prefix is the fvwm installation directory. With such a locale path translations are searched for in .sp .if n .RS 4 .nf .fam C /install_prefix/share/locale/lang/LC_MESSAGES/fvwm.mo .fam .fi .if n .RE .sp where \fIlang\fP depends on the locale. If no directory is given the default directory path is assumed. If no text domain is given, \fBfvwm\fP is assumed. Without argument the default locale path is restored. .sp As for the \fBImagePath\fP command, \fIpath\fP may contain environment variables and a \*(Aq+\*(Aq to append or prepend the locale path easily. .sp For example, the fvwm\-themes package uses .sp .if n .RS 4 .nf .fam C LocalePath ";fvwm\-themes:+" .fam .fi .if n .RE .sp to add locale catalogs. .sp The default fvwm catalog contains a few strings used by the fvwm executable itself (Desk and Geometry) and strings used in some default configuration files and \fBFvwmForm\fP configuration. You can take a look at the po/ subdirectory of the fvwm source to get the list of the strings with a possible translation in various languages. At present, very few languages are supported. .sp The main use of locale catalogs is via the "$[gt.string]" parameter: .sp .if n .RS 4 .nf .fam C DestroyMenu MenuFvwmWindowOps AddToMenu\& MenuFvwmWindowOps "$[gt.Window Ops]" Title + "$[gt.&Move]"\& Move + "$[gt.&Resize]"\& Resize + "$[gt.R&aise]"\& Raise + "$[gt.&Lower]"\& Lower + "$[gt.(De)&Iconify]"\& Iconify + "$[gt.(Un)&Stick]"\& Stick + "$[gt.(Un)Ma&ximize]"\& Maximize + "" Nop + "$[gt.&Close]"\& Close + "$[gt.&Destroy]"\& Destroy .fam .fi .if n .RE .sp gives a menu in the locale languages if translations are available. .sp Note that the \fBFvwmScript\fP module has a set of special instructions for string translation. It is out of the scope of this discussion to explain how to build locale catalogs. Please refer to the GNU gettext documentation. .RE .sp \fBPrintInfo\fP \fIsubject\fP [\fIverbose\fP] .RS 4 Print information on \fIsubject\fP to debug log file, which defaults to \fI$HOME/.fvwm/fvwm3\-output.log\fP . Environment variables \fI$FVWM_USERDIR\fP and \fI$FVWM3_LOGFILE\fP can alter this default. For this logfile to be written, either fvwm3 has to be started with \fB\-v\fP option or \fBSIGUSR2\fP signal can be used to toggle opening/closing debug log file. .sp An optional integer argument to debug log file, which defaults to \fI$HOME/.fvwm/fvwm3\-output.log\fP . Environment variables \fI$FVWM_USERDIR\fP and \fI$FVWM3_LOGFILE\fP can alter this default. For this logfile to be written, either fvwm3 has to be started with \fB\-v\fP option or \fBSIGUSR2\fP signal can be used to toggle opening/closing debug log file. .sp An optional integer argument \fIverbose\fP defines the level of information which is given. The current valid subjects are: .sp \fIColors\fP which prints information about the colors used by fvwm. This useful on screens which can only display 256 (or less) colors at once. If \fIverbose\fP is one or greater the palette used by fvwm is printed. If you have a limited color palette, and you run out of colors, this command might be helpful. .sp \fIImageCache\fP which prints information about the images loaded by fvwm. If \fIverbose\fP is one or greater all images in the cache will be listed together with their respective reuse. .sp \fILocale\fP which prints information on your locale and the fonts that fvwm used. \fIverbose\fP can be 1 or 2. .sp \fInls\fP which prints information on the locale catalogs that fvwm used .sp \fIbindings\fP which prints information on all the bindings fvwm has: key and mouse bindings. \fIverbose\fP has no effect with this option. .sp \fIinfostore\fP which prints information on all entries in the infostore, listing the key and its value. \fIverbose\fP has no effect with this option. .RE .sp \fBSchedule\fP [\fIPeriodic\fP] \fIdelay_ms\fP [\fIcommand_id\fP] \fIcommand\fP .RS 4 The \fIcommand\fP is executed after about \fIdelay_ms\fP milliseconds. This may be useful in some tricky setups. The \fIcommand\fP is executed in the same context window as the \fBSchedule\fP command. An optional integer argument \fIcommand_id\fP may be given in decimal, hexadecimal or octal format. This id can be used with the \fBDeschedule\fP command to remove the scheduled command before it is executed. If no id is given, fvwm uses negative id numbers, starting with \-1 and decreasing by one with each use of the \fBSchedule\fP command. Note that the \fBSchedule\fP command and its arguments undergo the usual command line expansion, and, when \fIcommand\fP is finally executed, it is expanded again. It may therefore be necessary to quote the parts of the command that must not be expanded twice. .sp Note: A window\(cqs id as it is returned with $[w.id] can be used as the \fIcommand_id\fP. Example: .sp .if n .RS 4 .nf .fam C Current Schedule 1000 $[w.id] WindowShade .fam .fi .if n .RE .sp The \fBSchedule\fP command also supports the optional keyword \fIPeriodic\fP which indicates that the \fIcommand\fP should be executed every \fIdelay_ms\fP. Example: .sp .if n .RS 4 .nf .fam C Schedule Periodic 10000 PipeRead \*(Aq[ \-N "$MAIL" ] && echo \(rs Echo You have mail\*(Aq .fam .fi .if n .RE .sp Use the \fBDeschedule\fP command to stop periodic commands. .RE .sp \fBState\fP \fIstate\fP [\fIbool\fP] .RS 4 Sets, clears or toggles one of the 32 user defined states which are associated with each window. The \fIstate\fP is a number ranging from 0 to 31. The states have no meaning in fvwm, but they can be checked in conditional commands like \fBNext\fP with the \fIState\fP condition. The optional argument \fIbool\fP is a boolean argument. "True" sets the given state, while "False" clears it. Using "toggle" switches to the opposite state. If the \fIbool\fP argument is not given, the state is toggled. .RE .sp \fBWindowList\fP [(\fIconditions\fP)] [\fIposition\fP] [\fIoptions\fP] [\fIdouble\-click\-action\fP] .RS 4 Generates a pop\-up menu (and pops it up) in which the title and geometry of each of the windows currently on the desktop are shown. .sp The format of the geometry part is: \fIdesk\fP(\fIlayer\fP): \fIx\-geometry\fP \fIsticky\fP, where \fIdesk\fP and \fIlayer\fP are the corresponding numbers and \fIsticky\fP is empty or a capital S. The geometry of iconified windows is shown in parentheses. Selecting an item from the window list pop\-up menu causes the interpreted function "WindowListFunc" to be run with the window id of that window passed in as $0. The default "WindowListFunc" looks like this: .sp .if n .RS 4 .nf .fam C AddToFunc WindowListFunc + I Iconify off + I FlipFocus + I Raise + I WarpToWindow 5p 5p .fam .fi .if n .RE .sp You can destroy the built\-in "WindowListFunc" and create your own if these defaults do not suit you. .sp The window list menu uses the "WindowList" menu style if it is defined (see \fBMenuStyle\fP command). Otherwise the default menu style is used. To switch back to the default menu style, issue the command .sp .if n .RS 4 .nf .fam C DestroyMenuStyle WindowList .fam .fi .if n .RE .sp Example: .sp .if n .RS 4 .nf .fam C MenuStyle WindowList SelectOnRelease Meta_L .fam .fi .if n .RE .sp The \fIconditions\fP can be used to exclude certain windows from the window list. Please refer to the \fBCurrent\fP command for details. Only windows that match the given conditions are displayed in the window list. The \fIoptions\fP below work vice versa: windows that would otherwise not be included in the window list can be selected with them. The \fIconditions\fP always override the \fIoptions\fP. .sp The \fIposition\fP arguments are the same as for \fBMenu\fP. The command \fIdouble\-click\-action\fP is invoked if the user double\-clicks (or hits the key rapidly twice if the menu is bound to a key) when bringing the window list. The \fIdouble\-click\-action\fP must be quoted if it consists of more than one word. .sp The \fIdouble\-click\-action\fP is useful to define a default window if you have bound the window list to a key (or button) like this: .sp .if n .RS 4 .nf .fam C # Here we call an existing function, but # it may be different.\& See the default # WindowListFunc definition earlier in this # man page. AddToFunc SwitchToWindow + I WindowListFunc Key Tab A M WindowList "Prev SwitchToWindow" .fam .fi .if n .RE .sp Hitting Alt\-Tab once it brings up the window list, if you hit it twice the focus is flipped between the current and the last focused window. With the proper \fISelectOnRelease\fP menu style (see example above) a window is selected as soon as you release the Alt key. .sp The \fIoptions\fP passed to WindowList are separated by commas and can be \fIGeometry\fP / \fINoGeometry\fP / \fINoGeometryWithInfo\fP, \fINoDeskNum,\fP \fINoLayer,\fP \fINoNumInDeskTitle\fP, \fINoCurrentDeskTitle\fP, \fIMaxLabelWidth width\fP, \fITitleForAllDesks\fP, \fIFunction funcname\fP, \fIDesk desknum\fP, \fICurrentDesk\fP, \fINoIcons\fP / \fIIcons\fP / \fIOnlyIcons\fP, \fINoNormal\fP / \fINormal\fP / \fIOnlyNormal\fP, \fINoSticky\fP / \fISticky\fP / \fIOnlySticky\fP, \fINoStickyAcrossPages\fP / \fIStickyAcrossPages\fP / \fIOnlyStickyAcrossPages\fP, \fINoStickyAcrossDesks\fP / \fIStickyAcrossDesks\fP / \fIOnlyStickyAcrossDesks\fP, \fINoOnTop\fP / \fIOnTop\fP / \fIOnlyOnTop\fP, \fINoOnBottom\fP / \fIOnBottom\fP / \fIOnlyOnBottom\fP, \fILayer m [n]\fP, \fIUseSkipList\fP / \fIOnlySkipList\fP, \fINoDeskSort\fP, \fIReverseOrder\fP, \fICurrentAtEnd\fP, \fIIconifiedAtEnd\fP, \fIUseIconName\fP, \fIAlphabetic\fP / \fINotAlphabetic\fP, \fISortByResource\fP, \fISortByClass\fP, \fINoHotkeys\fP, \fISelectOnRelease\fP ,\fIShowPage\fP, \fIShowPageX\fP, \fIShowPageY\fP, \fIShowScreen\fP. .sp (Note \- normal means not iconic, sticky, or on top) .sp With the \fISortByResource\fP option windows are alphabetically sorted first by resource class, then by resource name and then by window name (or icon name if \fIUseIconName\fP is specified). \fIReverseOrder\fP also works in the expected manner. .sp With the \fISortByClass\fP option windows are sorted just like with \fISortByResource\fP, but the resource name is not taken into account, only the resource class. .sp The \fISelectOnRelease\fP option works exactly like the \fBMenuStyle\fP option with the same name, but overrides the option given in a menu style. By default, this option is set to the left .sp key. To switch it off, use \fISelectOnRelease\fP without a key name. .sp If you pass in a function via \fBFunction\fP funcname, it is called within a window context of the selected window: .sp .if n .RS 4 .nf .fam C AddToFunc IFunc I Iconify toggle WindowList Function IFunc, NoSticky, CurrentDesk, NoIcons .fam .fi .if n .RE .sp If you use the \fILayer\fP \fIm\fP [\fIn\fP] option, only windows in layers between m and n are displayed. n defaults to m. With the \fIReverseOrder\fP option the order of the windows in the list is reversed. .sp With the \fICurrentAtEnd\fP option the currently focused window (if any) is shown at the bottom of the list. This is mostly intended for simulating the Alt\-Tab behavior in another GUI. .sp \fIIconifiedAtEnd\fP makes iconified windows be moved to the end of the list. This is also from another GUI. .sp The \fINoGeometry\fP option causes fvwm to not display the geometries as well as the separators which indicate the different desktops. \fINoGeometryWithInfo\fP removes the geometries, but keep the desktop information and indicates iconic windows. \fINoDeskNum\fP causes fvwm to not display the desktop number in the geometry or before the window title with the \fINoGeometryWithInfo\fP option. \fINoNumInDeskTitle\fP is only useful if a desktop name is defined with the \fBDesktopName\fP command. It causes fvwm to not display the desktop number before the desktop name. By default, the WindowList menu have a title which indicates the current desk or the selected desktop if the \fIDesk\fP condition is used. The \fINoCurrentDeskTitle\fP option removes this title. \fITitleForAllDesks\fP causes fvwm to add a menu title with the desk name and/or number before each group of windows on the same desk. With \fINoLayer\fP, the layer of the window is not displayed. The options \fIShowPage\fP, \fIShowPageX\fP and \fIShowPageY\fP enable displaying the page of the window rounded multiples of the display size. With \fIShowScreen\fP, the window\(cqs screen name is displayed. .sp The \fIMaxLabelWidth\fP option takes the number of characters to print as its argument. No more than that many characters of the window name are visible. .sp If you wanted to use the \fBWindowList\fP as an icon manager, you could invoke the following: .sp .if n .RS 4 .nf .fam C WindowList OnlyIcons, Sticky, OnTop, Geometry .fam .fi .if n .RE .sp (Note \- the \fIOnly\fP options essentially wipe out all other ones.\|.\|. but the \fIOnlyListSkip\fP option which just causes \fBWindowList\fP to only consider the windows with \fIWindowListSkip\fP style.) .RE .sp \fBXSync\fP .RS 4 When \fBXSync\fP is called, the X function with the same name is used to send all pending X requests to the server. This command is intended for debugging only. .RE .sp \fBXSynchronize\fP [bool] .RS 4 The \fBXSynchronize\fP command controls whether X requests are sent to the X server immediately or not. Normally, requests are sent in larger batches to save unnecessary communication. To send requests immediately, use "True" as the argument, to disable this use "False" or to toggle between both methods use "Toggle" or omit the \fBbool\fP argument. Fvwm defaults to synchronized requests when started with the \fB\-\-debug\fP option. This command is intended for debugging only. .RE .sp \fB+\fP .RS 4 Used to continue adding to the last specified decor, function or menu. See the discussion for \fBAddToDecor\fP, \fBAddToFunc\fP, and \fBAddToMenu\fP. .RE .SS "Window Movement and Placement" .sp \fBAnimatedMove\fP \fIx\fP \fIy\fP [Warp] .RS 4 Move a window in an animated fashion. Similar to \fBMove\fP command. The options are the same, except they are required, since it doesn\(cqt make sense to have a user move the window interactively and animatedly. If the optional argument \fIWarp\fP is specified the pointer is warped with the window. .RE .sp \fBGeometryWindow\fP Hide | Show | Colorset \fIn\fP | Position \fIx\fP \fIy\fP | Screen \fIS\fP .RS 4 Configures the position or size window that is usually shown when a window is moved or resized interactively. This can be used to hide, show, change the colorset, change the location, or change the screen of the geometry window. Multiple options can be set at once separated by spaces. Details of each option are described below. .sp .if n .RS 4 .nf .fam C GeometryWindow Hide [Never | Move | Resize] .fam .fi .if n .RE .sp Hides or switches off the geometry window. If the optional parameters \fIMove\fP or \fIResize\fP are given, it will only hide the geometry window during the respective operation. The parameter \fINever\fP will switch the geometry back on again (equivalent to \fIShow\fP). .sp .if n .RS 4 .nf .fam C GeometryWindow Show [Never | Move | Resize] .fam .fi .if n .RE .sp Shows or switches on the geometry window (equivalent to \fIHide Never\fP). If the optional parameters \fIMove\fP or \fIResize\fP are given, it will only show the geometry window during the respective operation. The parameter \fINever\fP will switch the geometry window off (equivalent to \fIHide\fP). .sp .if n .RS 4 .nf .fam C GeometryWindow Colorset _cset_ .fam .fi .if n .RE .sp Sets colorset of the gometry window to \fIcset\fP. Use the literal option \fIdefault\fP for \fIcset\fP to use the default colorset. .sp .if n .RS 4 .nf .fam C GeometryWindow Position [+|\-]_x_[p] [+|\-]_y_[p] .fam .fi .if n .RE .sp Configures the position the geometry window appears. \fIx\fP and \fIy\fP are the relative coordinates as a percentage of the screen size. If a leading \*(Aq\-\*(Aq is provided the coordinates are computed from the left/bottom of the screen respectively. If the coordinates are appended with a \*(Aqp\*(Aq, they are interpreted as the number of pixels from the respective screen edge. If no position arguments are given, the geometry window\(cqs position will return to its default state of the upper left corner or the center if emulating MWM. .sp .if n .RS 4 .nf .fam C GeometryWindow Screen _RANDRNAME_ .fam .fi .if n .RE .sp Configure which screen the geometry window is shown on. By default the geometry window is shown on the current screen. If a valid \fIRANDRNAME\fP is provided, the geometry window will always be shown on that screen. Use \fIcurrent\fP as the \fIRANDRNAME\fP to return the default. .sp Examples: .sp .if n .RS 4 .nf .fam C # Position the geometry window in the center of the screen GeometryWindow Position 50 50 # Position the geometry window next to the RightPanel GeometryWindow Position \-120p 0 # Use colorset 2 for the geometry window GeometryWindow Colorset 2 # Only show the geometry window on the primary monitor GeometryWindow Screen $[monitor.primary] # Hide the geometry window GeometryWindow Hide .fam .fi .if n .RE .RE .sp \fBLayer\fP [\fIarg1\fP \fIarg2\fP] | [default] .RS 4 Puts the current window in a new layer. If \fIarg1\fP is non zero then the next layer is the current layer number plus \fIarg1\fP. If \fIarg1\fP is zero then the new layer is \fIarg2\fP. .sp As a special case, \fIdefault\fP puts the window in its default layer, i.e. the layer it was initially in. The same happens if no or invalid arguments are specified. .RE .sp \fBLower\fP .RS 4 Allows the user to lower a window. Note that this lowers a window only in its layer. To bring a window to the absolute bottom, use .sp .if n .RS 4 .nf .fam C AddToFunc lower\-to\-bottom + I Layer 0 0 + I Lower .fam .fi .if n .RE .RE .sp \fBMove\fP [\fIoptions\fP] .RS 4 Allows the user to move a window. If called from somewhere in a window or its border, then that window is moved. If called from the root window, then the user is allowed to select the target window. Move can be called with various options to either start an interactive move, specify the position to move, or a direction. .sp \fBMove\fP without options starts an interactive move. The window may snap to other windows and screen boundaries, configurable with the \fBSnapAttraction\fP style. Moving a window to the edge of the screen can be used to drag the window to other pages. (See \fBEdgeScroll\fP, and the \fIEdgeMoveDelay\fP style for more information.) .sp Holding down \fIAlt\fP disables snapping and allows one to switch pages without any delay. Interactive movement can be aborted with the \fIEscape\fP key or any mouse button not set to place the window. By default mouse button 2 is set to cancel the move operation. To change this you may use the \fBMouse\fP command with special context \*(AqP\*(Aq for Placement. .sp The window condition \fIPlacedByButton\fP can be used to check if a specific button was pressed to place the window (see \fBCurrent\fP command). .sp If the single argument \fIpointer\fP is given, the top left corner of the window is moved to the pointer position before starting an interactive move; this is mainly intended for internal use by modules like \fBFvwmPager\fP. .sp .if n .RS 4 .nf .fam C Move pointer .fam .fi .if n .RE .sp To move a window in a given direction until it hits another window, icon, or screen boundary use: .sp .if n .RS 4 .nf .fam C Move shuffle [options] _direction_(s) .fam .fi .if n .RE .sp The \fIdirection\fP can be \fINorth\fP/\fIN\fP/\fIUp\fP/\fIU\fP, \fIEast\fP/\fIE\fP/\fIRight\fP/\fIR\fP, \fISouth\fP/\fIS\fP/\fIDown\fP/\fID\fP, or \fIWest\fP/\fIW\fP/\fILeft\fP/\fIL\fP. The window will move in the given direction until it hits another window or the \fBEwmhBaseStruts\fP/screen boundary. When a window is at the \fBEwmhBaseStruts\fP/screen boundary, it will move to the next monitor in the given direction, if it exists. If a window is outside of the current working area (partly off screen), it will move to the edge of the working area. Windows will honor the EWMH working area and stop at the \fBEwmhBaseStruts\fP unless the literal option \fIewmhiwa\fP is given. If multiple \fIdirection\fP(s) are given, the window will move the directions in the order of the sequence stated. .sp The literal option \fIWarp\fP will warp the mouse pointer to the window. The literal option \fIall_windows\fP will consider all windows on the same monitor instead of just the windows in the path the window is moving. This allows moving to the boundary of a window it is next too. The literal option \fIboth_sides\fP will consider both the close side and the far side of the window (by default only the close side is considered). .sp If the literal option \fIsnap\fP followed by a snap \fItype\fP of \fIwindows\fP, \fIicons\fP, or \fIsame\fP is given, then the window will only stop if it hits another window, icon, or the same type. If the literal option \fIlayers\fP followed by two integers specifying a \fImin\fP layer and \fImax\fP layer is given, then only windows on the layers between \fImin\fP and \fImax\fP layers will stop the window. For example: .sp .if n .RS 4 .nf .fam C # Shuffle the window Right. Move shuffle Right # Shuffle Up, only consider windows on Layer 3. Move shuffle layers 3 3 Up # Shuffle Left then Up Move shuffle Left Up # Shuffle Up then Left (may not be same position as above) Move shuffle Up Left .fam .fi .if n .RE .sp Move can be used to moved a window to a specified position: .sp .if n .RS 4 .nf .fam C Move [screen _S_] [desk _N_] [w | m | v]_x_[p | w] \(rs [w | m | v]_y_[p | w] [Warp] [ewmhiwa] .fam .fi .if n .RE .sp This will move the window to the \fIx\fP and \fIy\fP position (see below). By default, the EWMH working area of each monitor is honoured (the working area for each monitor is set via \fBEwmhBaseStruts\fP and honors any strut hints provided by windows on the monitor). This means that if a window is placed outside the working area, the position of the window will be adjusted to fit inside the working area of the screen the center of the window is on. If the trailing option \fIewmhiwa\fP is given, then the window position will ignore the working area and its position will not be adjusted (this option is needed to move windows off the screen and to have full control of where it is placed). If the option \fIWarp\fP is given then the pointer is warped to the window. .sp If the literal option \fIscreen\fP followed by a RandR screen name \fIS\fP is specified, the coordinates are interpreted as relative to the given screen. The width and height of the screen are used for the calculations instead of the display dimensions. The \fIscreen\fP is interpreted as in the \fBMoveToScreen\fP command. .sp If the literal option \fIdesk\fP followed by a desk number \fIN\fP is specified, place the window on the specified desk after it has been moved. This can serve two purposes, first you can move a window\(cqs position and desk in a single command. Second when a window is moved between monitors, its desk is updated to be the same as the new monitor. This option can override that behavior by specifying which desk the window should end up on. .sp The positional arguments \fIx\fP and \fIy\fP can specify an absolute or relative position from either the left/top (positive values) or right/bottom (negative values) of the global screen (the bounding box that contains all monitors) or specified \fIscreen\fP. By default, the numeric value given is interpreted as a percentage of the screen\(cqs width/height, but a trailing \*(Aq\fIp\fP\*(Aq changes the interpretation to mean pixels, while a trailing \*(Aq\fIw\fP\*(Aq means percent of the window width/height. To move the window relative to its current position, add the \*(Aq\fIw\fP\*(Aq (for "window") prefix before the \fIx\fP and/or \fIy\fP value. To move the window to a position relative to the current location of the pointer, add the \*(Aq\fIm\fP\*(Aq (for "mouse") prefix. To move the window relative to the virtual screen coordinates, add the \*(Aq\fIv\fP\*(Aq (for "virtual screen") prefix. This is mostly for internal use with FvwmPager, but can be used to give exact coordinates on the virtual screen and is best used with the \*(Aq\fIp\fP\*(Aq suffix. To leave either coordinate unchanged, "\fIkeep\fP" can be specified in place of \fIx\fP or \fIy\fP. .sp For advanced uses, the arguments \fIx\fP and \fIy\fP can be used multiple times, but without the prefix \*(Aq\fIm\fP\*(Aq or \*(Aq\fIw\fP\*(Aq. (See complex examples below). .sp Simple Examples: .sp .if n .RS 4 .nf .fam C # Interactive move Mouse 1 T A Move # Move window to top left is at (10%,10%) Mouse 2 T A Move 10 10 # Move top left to (10pixels,10pixels) Mouse 3 T A Move 10p 10p .fam .fi .if n .RE .sp More complex examples (these can be bound as actions to keystrokes, etc.; only the command is shown, though): .sp .if n .RS 4 .nf .fam C # Move window so bottom right is at bottom # right of screen Move \-0 \-0 # Move window so top left corner is 10 pixels # off the top left screen edge Move +\-10 +\-10 # Move window 5% to the right, and to the # middle vertically Move w+5 50 # Move window up 10 pixels, and so left edge # is at x=40 pixels Move 40p w\-10p # Move window to the mouse pointer location Move m+0 m+0 # Move window to center of screen (50% of screen # position minus 50% of widow size). Move 50\-50w 50\-50w .fam .fi .if n .RE .sp See also the \fBAnimatedMove\fP command. .RE .sp \fBMoveToDesk\fP [prev | \fIarg1\fP [\fIarg2\fP] [\fImin\fP \fImax\fP]] .RS 4 Moves the selected window to another desktop. The arguments are the same as for the \fBGotoDesk\fP command. Without any arguments, the window is moved to the current desk. .RE .sp \fBMoveThreshold\fP [\fIpixels\fP] .RS 4 When the user presses a mouse button upon an object fvwm waits to see if the action is a click or a drag. If the mouse moves by more than \fIpixels\fP pixels it is assumed to be a drag. .sp Previous versions of fvwm hardwired \fIpixels\fP to 3, which is now the default value. If \fIpixels\fP is negative or omitted the default value (which might be increased when 16000x9000 pixel displays become affordable) is restored. .RE .sp \fBMoveToPage\fP [\fIoptions\fP] [\fIx\fP[p | w] \fIy\fP[p | w]] | [prev] .RS 4 Moves the selected window to another page (\fIx\fP,\fIy\fP). The upper left page is (0,0), the upper right is (M,0), where M is one less than the current number of horizontal pages specified in the \fBDesktopSize\fP command. Similarly the lower left page is (0,N), and the lower right page is (M,N). Negative page numbers refer to pages from the rightmost/lowest page. If \fIx\fP and \fIy\fP are not given, the window is moved to the current page (a window that has the focus but is off\-screen can be retrieved with this). Moving windows to a page relative to the current page can be achieved by adding a trailing \*(Aq\fIp\fP\*(Aq after any or both numerical arguments. To move the window relative to its current location, add a trailing \*(Aq\fIw\fP\*(Aq. To move a window to the previous page use \fIprev\fP as the single argument. .sp Windows are usually not moved beyond desk boundaries. .sp Possible \fIoptions\fP are \fIwrapx\fP and \fIwrapy\fP to wrap around the x or y coordinate when the window is moved beyond the border of the desktop. For example, with \fIwrapx\fP, when the window moves past the right edge of the desktop, it reappears on the left edge. The options \fInodesklimitx\fP and \fInodesklimity\fP allow moving windows beyond the desk boundaries in x and y direction (disabling the \fIwrapx\fP and \fIwrapy\fP options). .sp Examples: .sp .if n .RS 4 .nf .fam C # Move window to page (2,3) MoveToPage 2 3 # Move window to lowest and rightmost page MoveToPage \-1 \-1 # Move window to last page visited MoveToPage prev # Move window two pages to the right and one # page up, wrap at desk boundaries MoveToPage wrapx wrapy +2p \-1p .fam .fi .if n .RE .RE .sp \fBMoveToScreen\fP [\fIscreen\fP] .RS 4 Moves the selected window to another screen. The \fIscreen\fP argument must be a valid RandR name. .RE .sp \fBOpaqueMoveSize\fP [\fIpercentage\fP] .RS 4 Tells fvwm the maximum size window with which opaque window movement should be used. The percentage is percent of the total screen area (may be greater than 100). With .sp .if n .RS 4 .nf .fam C OpaqueMoveSize 0 .fam .fi .if n .RE .sp all windows are moved using the traditional rubber\-band outline. With .sp .if n .RS 4 .nf .fam C OpaqueMoveSize unlimited .fam .fi .if n .RE .sp or if a negative percentage is given all windows are moved as solid windows. The default is .sp .if n .RS 4 .nf .fam C OpaqueMoveSize 5 .fam .fi .if n .RE .sp which allows small windows to be moved in an opaque manner but large windows are moved as rubber\-bands. If \fIpercentage\fP is omitted or invalid the default value is set. To resize windows in an opaque manner you can use the \fIResizeOpaque\fP style. See the \fBStyle\fP command. .RE .sp \fBPlaceAgain\fP [Anim] [Icon] .RS 4 Causes the current window\(cqs position to be re\-computed using the initial window placement logic. The window is moved to where it would have been if it were a new window that had just appeared. Most useful with \fISmart\fP or \fIClever\fP (\fIReallySmart\fP) placement. With the optional argument \fIAnim\fP an animated move is used to place the window in its new position. With the additional option \fIIcon\fP, the icon is placed again instead. .RE .sp \fBRaise\fP .RS 4 Allows the user to raise a window. Note that this raises a window only in its layer. To bring a window to the absolute top, use .sp .if n .RS 4 .nf .fam C AddToFunc raise\-to\-top + I Layer 0 ontop + I Raise .fam .fi .if n .RE .sp where ontop is the highest layer used in your setup. .RE .sp \fBRaiseLower\fP .RS 4 Alternately raises and lowers a window. The window is raised if it is obscured by any window (except for its own transients when \fIRaiseTransient\fP style is used; see the \fBStyle\fP command) otherwise it is lowered. .RE .sp \fBResize\fP [[frame] [direction \fIdir\fP] [warptoborder \fIautomatic\fP] [fixeddirection] \fIwidth\fP[p | c | wa | da] \fIheight\fP[p | c]] .RS 4 Allows for resizing a window. If called from somewhere in a window or its border, then that window is resized. If called from the root window then the user is allowed to select the target window. .sp \fBResize\fP without options starts an interactive resize. .sp If the \fIEdgeResizeDelay\fP style is set or the \fIAlt\fP key is held down, the window can be resized across the edge of the screen. .sp The operation can be aborted with the \fIEscape\fP key or by pressing any mouse button (except button 1 which confirms it). .sp If the optional arguments \fIwidth\fP and \fIheight\fP are provided, then the window is resized so that its dimensions are \fIwidth\fP by \fIheight\fP. The units of \fIwidth\fP and \fIheight\fP are percent\-of\-screen, unless a letter \*(Aq\fIp\fP\*(Aq is appended to one or both coordinates, in which case the location is specified in pixels. With a \*(Aq\fIc\fP\*(Aq suffix the unit defined by the client application (hence the c) is used. With the suffix \*(Aq\fIwa\fP\*(Aq the value is a percentage of the width or height size of the EWMH working area, and with the suffix \*(Aq\fIda\fP\*(Aq it is a percentage of the width or height of the EWMH dynamic working area. So you can say .sp .if n .RS 4 .nf .fam C Resize 80c 24c .fam .fi .if n .RE .sp to make a terminal window just big enough for 80x24 characters. .sp If the \fIwidth\fP or \fIheight\fP is prefixed with the letter \*(Aq\fIw\fP\*(Aq the size is not taken as an absolute value but added to the current size of the window. Example: .sp .if n .RS 4 .nf .fam C # Enlarge window by one line Resize keep w+1c .fam .fi .if n .RE .sp Both, \fIwidth\fP and \fIheight\fP can be negative. In this case the new size is the screen size minus the given value. If either value is "\fIkeep\fP", the corresponding dimension of the window is left untouched. The new size is the size of the client window, thus .sp .if n .RS 4 .nf .fam C Resize 100 100 .fam .fi .if n .RE .sp may make the window bigger than the screen. To base the new size on the size of the whole fvwm window, add the \fIframe\fP option after the command. The options \fIfixeddirection\fP, \fIdirection\fP and \fIwarptoborder\fP are only used in interactive move operations. With \fIfixeddirection\fP the same border is moved even if the pointer moves past the opposite border. The \fIdirection\fP option must be followed by a direction name such as "NorthWest", "South" or "East" (you get the idea). Resizing is started immediately, even if the pointer is not on a border. If the special option \fIautomatic\fP is given as a direction argument, then the direction to resize is calculated based on the position of the pointer in the window. If the pointer is in the middle of the window, then no direction is calculated. The \fIwarptoborder\fP option can be used to warp the pointer to the direction indicated. As with the \fIautomatic\fP option for \fIdirection\fP, the border to warp to is calculated based on the pointer\(cqs proximity to a given border. Also, if resizing is started by clicking on the window border, the pointer is warped to the outer edge of the border. .sp .if n .RS 4 .nf .fam C AddToFunc ResizeSE I Resize Direction SE Mouse 3 A M ResizeSE .fam .fi .if n .RE .RE .sp \fBResize\fP [bottomright | br \fIx\fP \fIy\fP] .RS 4 An alternate syntax is used if the keyword \fIbottomright\fP or in short \fIbr\fP follows the command name. In this case, the arguments \fIx\fP and \fIy\fP specify the desired position of the bottom right corner of the window. They are interpreted exactly like the \fIx\fP and \fIy\fP arguments of the \fBMove\fP command. Actually, any of the options accepted by the \fBMove\fP command can be used. .RE .sp \fBResizeMaximize\fP [\fIresize\-arguments\fP] .RS 4 Combines the effects of \fBResize\fP and \fBMaximize\fP in a single command. When used on a maximized window, the window is resized and is still in the maximized state afterwards. When used on an unmaximized window, the window is resized and put into the maximized state afterwards. This is useful if the user wants to resize the window temporarily and then return to the original geometry. The \fIresize\-arguments\fP are the same as for the \fBResize\fP command. .RE .sp \fBResizeMove\fP \fIresize\-arguments\fP \fImove\-arguments\fP .RS 4 This command does the same as the \fBResize\fP and \fBMove\fP commands, but in a single call which is less visually disturbing. The \fIresize\-arguments\fP are exactly the same arguments as for the \fBResize\fP command and the \fImove\-arguments\fP are exactly the same arguments as for the \fBMove\fP command except the \fIpointer\fP option which is not supported by the \fBResizeMove\fP command. .sp Examples: .sp .if n .RS 4 .nf .fam C # Move window to top left corner and cover # most of the screen ResizeMove \-10p \-20p 0 0 # Grow the focused window towards the top of screen Current Resize keep w+$[w.y]p keep 0 .fam .fi .if n .RE .sp Note: Fvwm may not be able to parse the command properly if the option \fIbottomright\fP of the \fBResize\fP command is used. .RE .sp \fBResizeMoveMaximize\fP \fIresize\-arguments\fP \fImove\-arguments\fP .RS 4 Combines the effects of \fBResizeMove\fP and \fBMaximize\fP in a single command. When used on a maximized window, the window is resized and moved and is still in the maximized state afterwards. When used on an unmaximized window, the window is resized and put into the maximized state afterwards. This is useful if the user wants to resize the window temporarily and then return to the original geometry. The \fIresize\-arguments\fP and \fImove\-arguments\fP are the same as for the \fBResizeMove\fP command. .RE .sp \fBRestackTransients\fP .RS 4 This command regroups the transients of a window close to it in the stacking order as if the window had just been lowered and then raised. The position of the window itself is not altered. Only windows that use either the \fIRaiseTransient\fP or \fILowerTransient\fP style are affected at all. When \fBRestackTransients\fP is used on a transient window with the \fIStackTransientParent\fP style set, it is redirected to the parent window. .RE .sp \fBSetAnimation\fP \fImilliseconds\-delay\fP [\fIfractions\-to\-move\-list\fP] .RS 4 Sets the time between frames and the list of fractional offsets to customize the animated moves of the \fBAnimatedMove\fP command and the animation of menus (if the menu style is set to animated; see \fBMenuStyle\fP command). If the \fIfractions\-to\-move\-list\fP is omitted, only the time between frames is altered. The \fIfractions\-to\-move\-list\fP specifies how far the window should be offset at each successive frame as a fraction of the difference between the starting location and the ending location. e.g.: .sp .if n .RS 4 .nf .fam C SetAnimation 10 \-.01 0 .01 .03 .08 .18 .3 \(rs \&.45 .6 .75 .85 .90 .94 .97 .99 1.0 .fam .fi .if n .RE .sp Sets the delay between frames to 10 milliseconds, and sets the positions of the 16 frames of the animation motion. Negative values are allowed, and in particular can be used to make the motion appear more cartoonish, by briefly moving slightly in the opposite direction of the main motion. The above settings are the default. .RE .sp \fBXorPixmap\fP [\fIpixmap\fP] .RS 4 Selects the pixmap with which bits are xor\(cqed when doing rubber\-band window moving or resizing. This has a better chance of making the rubber\-band visible if \fBXorValue\fP does not give good results. An example pixmap \fIresize.rainbow.xpm\fP is provided with the icon distribution. To turn the \fIXorPixmap\fP off again use the \fBXorValue\fP command or omit the \fIpixmap\fP argument. .RE .sp \fBXorValue\fP [\fInumber\fP] .RS 4 Changes the value with which bits are xor\(cqed when doing rubber\-band window moving or resizing. Valid values range from zero to the maximum value of an unsigned long integer on your system. Setting this value is a trial\-and\-error process. The default value 0 tries to find a value that gives a good contrast to black and white. The default value is used if the given \fInumber\fP is omitted or invalid. .RE .SS "Focus & Mouse Movement" .sp \fBCursorBarrier\fP [destroy] [options] [\fIleft\fP \fItop\fP \fIright\fP \fIbottom\fP] .RS 4 A cursor barrier is a box that the cursor cannot be moved outside of (unless warped with \fICursorMove\fP or \fIWarpToWindow\fP). The \fIleft\fP, \fItop\fP, \fIright\fP, and \fIbottom\fP values give the percent distance the box is placed from each of the corresponding edges of the desktop. If the values end with a \fIp\fP, they are interpreted as pixel amounts instead. If the option \fIcoords\fP is given, the values are interpreted as the left/top and right/bottom coordinates of the box\(cqs corners. If the option \fIscreen RandRname\fP is given, the positions are computed relative to the specified monitor. Use \fIscreen c\fP to place the barrier on the current monitor. .sp Multiple barriers can be created by calling \fICursorBarrier\fP multiple times. This allows creating multiple regions to confine the cursor to (such as each monitor in a multi\-monitor setup), then use \fICursorMove\fP or \fIWarpToWindow\fP to move the cursor between the barriers. If the command \fIdestroy\fP is included, all barriers are destroyed allowing free movement of the mouse again. If \fIdestroy\fP is followed by an integer \fIN\fP, only that barrier is destroyed (barriers are numbered in the order they are created starting at 0). If the integer is negative, this counts backwards, such as "\-1" is the most recent created barrier, "\-2" is the second most recent, and so on. When a barrier is destroyed, this renumbers all barriers after it. In practice this is best used with \fIdestroy \-1\fP to destroy the most recent barrier without affecting any previously created barriers. .sp By default the key binding ctrl+shift+D will destroy all cursor barriers by calling \fICursorBarrier destroy\fP. .sp Here are some examples: .sp .if n .RS 4 .nf .fam C # A barrier 15% from left/right and 10% from top/bottom. CursorBarrier 15 10 15 10 # A barrier to confine the mouse to the current monitor. CursorBarrier screen c # A barrier to confine the mouse to a selected window Pick CursorBarrier coords $[w.x]p $[w.y]p \(rs $[math.+.$[w.x],$[w.width]]p $[math.+.$[w.y],$[w.height]]p # Destroy all barriers CursorBarrier destroy .fam .fi .if n .RE .sp Note that if the CURSOR_BARRIER limit is hit, \fIall\fP defined CursorBarriers are undefined. In pratice, this is unlikely to happen though. If it does, a message is printed to fvwm3\(cqs debug logs. .sp \fICursorBarrier\fP only works if fvwm is complied with the XFixes extension. .RE .sp \fBCursorMove\fP [screen \fIRANDRNAME\fP] \fIhorizontal\fP[p] \fIvertical\fP[p] .RS 4 Without the \fIscreen\fP option, \fICusorMove\fP moves the mouse cursor a \fIhorizontal\fP distance and \fIvertical\fP distance from its current position. The values are expressed as either a percent of the virtual desktop size, or a pixel distance by appending a \*(Aq\fIp\fP\*(Aq to the value. Either or both entries may be negative. For example, .sp .if n .RS 4 .nf .fam C # Move down and right by one full page. CursorMove 100 100 # Move down two full pages. CursorMove 0 200 # Move half page right and quarter page up. CursorMove 50 \-25 # Move left 100 pixels and down 50 pixels. CursorMove \-100p 50p .fam .fi .if n .RE .sp If the option \fIscreen\fP followed by a valid RandR monitor name is included, \fICursorMove\fP will move the cursor to the absolute position (starting at the top left corner) given by the arguments, as either percent values of the monitor\(cqs size, or an absolute location with the \*(Aq\fIp\fP\*(Aq suffix. For example, .sp .if n .RS 4 .nf .fam C # Move cursor to center of monitor DP\-1 CursorMove screen DP\-1 50 50 # Move cursor to the exact location (400, 200) of monitor DP\-2 CursorMove screen DP\-2 400p 200p .fam .fi .if n .RE .sp When moving to a specified \fIscreen\fP, the \fIhorizontal\fP and \fIvertical\fP values are always shifted to be inside the current page of the specified monitor. For instance \*(Aq50\*(Aq, \*(Aq150\*(Aq, and \*(Aq\-150\*(Aq will all be the center of the monitor, and will not change monitor\(cqs page. Use \fBGotoPage\fP to change the page of a specified monitor. Negative values can be used to specify distance from the right/bottom corner of the monitor. .sp \fICusorMove\fP can only move the cursor relative to its current position, or to an absolute position on a given monitor. To move the cursor relative to a window, use \fBWarpToWindow\fP. .RE .sp \fBFlipFocus\fP [NoWarp] .RS 4 Executes a \fBFocus\fP command as if the user had used the pointer to select the window. This command alters the order of the WindowList in the same way as clicking in a window to focus, i.e. the target window is removed from the \fBWindowList\fP and placed at the start. This command is recommended for use with the \fBDirection\fP command and in the function invoked from \fBWindowList\fP. .RE .sp \fBFocus\fP [NoWarp] .RS 4 Sets the keyboard focus to the selected window. If the \fINoWarp\fP argument is given, this is all it does. Otherwise it also moves the viewport or window as needed to make the selected window visible. This command does not automatically raise the window. Does not warp the pointer into the selected window (see \fBWarpToWindow\fP function). Does not de\-iconify. This command does not alter the order of the \fBWindowList\fP, it rotates the \fBWindowList\fP around so that the target window is at the start. .sp When the \fINoWarp\fP argument is given, Focus cannot transfer the keyboard focus to windows on other desks. .sp To raise and/or warp a pointer to a window together with \fBFocus\fP or \fBFlipFocus\fP, use a function, like: .sp .if n .RS 4 .nf .fam C AddToFunc SelectWindow + I Focus + I Iconify false + I Raise + I WarpToWindow 50 8p .fam .fi .if n .RE .RE .sp \fBWarpToWindow\fP [!raise | raise] \fIx\fP[p] \fIy\fP[p] .RS 4 Warps the cursor to the associated window and raises it (unless the option \fI!raise\fP is present). The parameters \fIx\fP and \fIy\fP default to percentage of window down and in from the upper left hand corner (or number of pixels down and in if \*(Aq\fIp\fP\*(Aq is appended to the numbers). If a number is negative the opposite edge is used and the direction reversed. This command works also with windows that are not managed by fvwm. In this case fvwm does not bring the window onto the screen if it is not visible. For example it is possible to warp the pointer to the center of the root window: .sp .if n .RS 4 .nf .fam C WindowId root WarpToWindow 50 50 .fam .fi .if n .RE .RE .SS "Window State" .sp \fBClose\fP .RS 4 If the window accepts the delete window protocol a message is sent to the window asking it to gracefully remove itself. If the window does not understand the delete window protocol then the window is destroyed as with the \fBDestroy\fP command. Note: if the window accepts the delete window protocol but does not close itself in response, the window is not deleted. .RE .sp \fBDelete\fP .RS 4 Sends a message to a window asking that it remove itself, frequently causing the application to exit. .RE .sp \fBDestroy\fP .RS 4 Destroys an application window, which usually causes the application to crash and burn. .RE .sp \fBIconify\fP [\fIbool\fP] .RS 4 Iconifies a window if it is not already iconified or de\-iconifies it if it is already iconified. The optional argument \fIbool\fP is a boolean argument. "\fITrue\fP" means only iconification is allowed, while "\fIFalse\fP" forces de\-iconification. Using "\fItoggle\fP" switches between iconified and de\-iconified states. .sp There are a number of \fBStyle\fP options which influence the appearance and behavior of icons (e.g. \fIStickyIcon\fP, \fINoIcon\fP). .sp For backward compatibility, the optional argument may also be a positive number instead of "True", or a negative number instead of "False". Note that this syntax is obsolete, and will be removed in the future. .RE .sp \fBMaximize\fP [\fIflags\fP] [\fIbool | forget\fP] [\fIhorizontal\fP[p]] [\fIvertical\fP[p]] .RS 4 Without its optional arguments (or if the \fIbool\fP bit has the value "\fItoggle\fP") \fBMaximize\fP causes the window to alternately switch from a full\-screen size to its normal size. To force a window into maximized (normal) state you can use a "\fITrue\fP" or "\fIFalse\fP" value for the \fIbool\fP argument. .sp With just the parameter "forget" a maximized window reverts back into normal state but keeps its current maximized size. This can be useful in conjunction with the commands \fBResizeMaximize\fP and \fBResizeMoveMaximize\fP. If the window is not maximized, nothing happens. .sp With the optional arguments \fIhorizontal\fP and \fIvertical\fP, which are expressed as percentage of a full screen, the user can control the new size of the window. An optional suffix \*(Aq\fIp\fP\*(Aq can be used to indicate pixels instead of percents of the screen size. If horizontal is greater than 0 then the horizontal dimension of the window is set to \fIhorizontal\fP*screen_width/100. If the value is smaller than 0 the size is subtracted from the screen width, i.e. \-25 is the same as 75. If \fIhorizontal\fP is "\fIgrow\fP", it is maximized to current available space until finding any obstacle. The vertical resizing is similar. If both horizontal and vertical values are "grow", it expands vertically first, then horizontally to find space. Instead of the horizontal "grow" argument, "\fIgrowleft\fP" or "\fIgrowright\fP" can be used respectively "\fIgrowup\fP" and "\fIgrowdown\fP". .sp The optional \fIflags\fP argument is a space separated list containing the following key words: \fIfullscreen\fP, \fIewmhiwa\fP, \fIgrowonwindowlayer\fP, \fIgrowonlayers\fP, \fIkeepgrowing\fP, \fIall_windows\fP, \fIboth_sides\fP, and \fIscreen\fP. \fIfullscreen\fP causes the window to become fullscreened if the appropriate EWMH hint is set. \fIewmhiwa\fP causes fvwm to ignore the EWMH working area. \fIgrowonwindowlayer\fP causes the various grow methods to ignore windows with a layer other than the current layer of the window which is maximized. The \fIgrowonlayers\fP option must have two integer arguments. The first one is the minimum layer and the second one the maximum layer to use. Windows that are outside of this range of layers are ignored by the grow methods. A negative value as the first or second argument means to assume no minimum or maximum layer. The \fIall_windows\fP option will consider all windows on the same monitor in the direction the window is growing. This can be used to grow a window to the edge of a window it is next to. The option \fIboth_sides\fP will consider both sides of other windows when growing (by default only the close side is considered). This can be used to grow a window to the boundaries of a window it is currently inside of. \fIkeepgrowing\fP will allow the window to keep growing beyond any window boundary it is currently touching until it grows into the next closest window boundary. \fIscreen\fP must have an argument which specifies the screen on which to operate. .sp Here are some examples. The following adds a title\-bar button to switch a window to the full vertical size of the screen: .sp .if n .RS 4 .nf .fam C Mouse 0 4 A Maximize 0 100 .fam .fi .if n .RE .sp The following causes windows to be stretched to the full width: .sp .if n .RS 4 .nf .fam C Mouse 0 4 A Maximize 100 0 .fam .fi .if n .RE .sp This makes a window that is half the screen size in each direction: .sp .if n .RS 4 .nf .fam C Mouse 0 4 A Maximize 50 50 .fam .fi .if n .RE .sp To expand a window horizontally until any other window is found: .sp .if n .RS 4 .nf .fam C Mouse 0 4 A Maximize 0 grow .fam .fi .if n .RE .sp To expand a window until any other window on the same or a higher layer is hit. .sp .if n .RS 4 .nf .fam C Mouse 0 4 A Maximize growonlayers $[w.layer] \-1 grow grow .fam .fi .if n .RE .sp To expand a window but leave the lower 60 pixels of the screen unoccupied: .sp .if n .RS 4 .nf .fam C Mouse 0 4 A Maximize 100 \-60p .fam .fi .if n .RE .sp Values larger than 100 can be used with caution. .RE .sp \fBRefresh\fP .RS 4 Causes all windows on the screen to redraw themselves. All pending updates of all windows\*(Aq styles and looks are applied immediately. E.g. if \fBStyle\fP or \fBTitleStyle\fP commands were issued inside a fvwm function. .RE .sp \fBRefreshWindow\fP .RS 4 Causes the chosen window to redraw itself. All pending updates of the window\(cqs style and look are applied immediately. E.g. if \fBStyle\fP or \fBTitleStyle\fP commands were issued inside a fvwm function. .RE .sp \fBStick\fP [\fIbool\fP] .RS 4 If the \fIbool\fP argument is empty or "\fItoggle\fP", the \fBStick\fP command makes a window sticky if it is not already sticky, or non\-sticky if it is already sticky. To make a window sticky regardless of its current state the \fIbool\fP argument must be "True". To make it non\-sticky use "False". .RE .sp \fBStickAcrossPages\fP [\fIbool\fP] .RS 4 Works like \fBStick\fP but only sticks a window across pages, not across desks. .RE .sp \fBStickAcrossDesks\fP [\fIbool\fP] .RS 4 Works like \fBStick\fP but only sticks a window across desks, not across pages. .RE .sp \fBWindowShade\fP [bool] | [[ShadeAgain] \fIdirection\fP] .RS 4 Toggles the window shade feature for titled windows. Windows in the shaded state only display a title\-bar. If \fIbool\fP is not given or "\fItoggle\fP", the window shade state is toggled. If \fIbool\fP is "True", the window is forced to the shaded state. If \fIbool\fP is "False", then the window is forced to the non\-shaded state. To force shading in a certain direction, the \fIdirection\fP argument can be used. Any of the strings "\fINorth\fP", "\fISouth\fP", "\fIWest\fP", "\fIEast\fP", "\fINorthWest\fP", "\fINorthEast\fP", "\fISouthWest\fP", "\fISouthEast\fP" or "\fILast\fP" can be given. The direction can be abbreviated with the usual one or two letters "\fIN\fP", "\fINW\fP", etc. Using a direction on a window that was already shaded unshades the window. To shade it in a different direction, use the \fIShadeAgain\fP option. The direction \fILast\fP shades the window in the direction it last was shaded. If the window has never been shaded before it is shaded as if no direction had been given. Windows without titles can be shaded too. Please refer also to the options \fIWindowShadeSteps\fP, \fIWindowShadeShrinks\fP, \fIWindowShadeScrolls\fP, \fIWindowShadeLazy\fP, \fIWindowShadeAlwaysLazy\fP and \fIWindowShadeBusy\fP options of the \fBStyle\fP command. Examples: .sp .if n .RS 4 .nf .fam C Style * WindowShadeShrinks, WindowShadeSteps 20, \(rs WindowShadeLazy Mouse 1 \- S WindowShade North Mouse 1 [ S WindowShade West Mouse 1 ] S WindowShade E Mouse 1 _ S WindowShade S .fam .fi .if n .RE .sp Note: When a window that has been shaded with a \fIdirection\fP argument changes the direction of the window title (see \fITitleAtTop\fP \fBStyle\fP option), the shading direction does not change. This may look very strange. Windows that were shaded without a \fIdirection\fP argument stay shaded in the direction of the title bar. .sp For backward compatibility, the optional argument may also be 1 to signify "on", and 2 to signify "off". Note that this syntax is obsolete, and will be removed in the future. .RE .SS "Mouse & Key Bindings" .sp \fBIgnoreModifiers\fP [\fIModifiers\fP] .RS 4 Tells fvwm which modifiers to ignore when matching Mouse or Key bindings. \fBIgnoreModifiers\fP affects the \fIClickToFocus\fP style too. This command belongs into your \fIconfig\fP. If you issue it when your fvwm session is already up and running the results are unpredictable. The should appear before any applications or modules are started in your \fIconfig\fP file (e.g. with the \fBExec\fP command). .sp \fIModifiers\fP has the same syntax as in the \fBMouse\fP or \fBKey\fP bindings, with the addition of \*(AqL\*(Aq meaning the caps lock key. The default is "L". \fIModifiers\fP can be omitted, meaning no modifiers are ignored. This command comes in handy if the num\-lock and scroll\-lock keys interfere with your shortcuts. With XFree86 \*(Aq2\*(Aq usually is the num\-lock modifier and \*(Aq5\*(Aq refers to the scroll\-lock key. To turn all these pesky modifiers off you can use this command: .sp .if n .RS 4 .nf .fam C IgnoreModifiers L25 .fam .fi .if n .RE .sp If the \fIModifiers\fP argument is the string "\fIdefault\fP", fvwm reverts back to the default value "L". .sp \fBImportant\fP This command creates a lot of extra network traffic, depending on your CPU, network connection, the number of \fBKey\fP or \fBMouse\fP commands in your configuration file and the number of modifiers you want to ignore. If you do not have a lightning fast machine or very few bindings you should not ignore more than two modifiers. I.e. do not ignore .sp if you have no problem with it. In the \fIFAQ\fP you can find a better solution of this problem. .RE .sp \fBEdgeCommand\fP [screen \fIRANDRNAME\fP] [\fIdirection\fP [\fIFunction\fP]] .RS 4 Binds a specified fvwm command \fIFunction\fP to an edge of the screen. Direction may be one of "\fINorth\fP", "\fITop\fP", "\fIWest\fP", "\fILeft\fP", "\fISouth\fP", "\fIBottom\fP", "\fIRight\fP" and "\fIEast\fP". If \fIFunction\fP is omitted the binding for this edge is removed. If EdgeCommand is called without any arguments all edge bindings are removed. If the literal option \fIscreen\fP followed by a RandR screen name \fIRANDRNAME\fP is given, the command is set only for the given monitor. .sp \fIFunction\fP is executed when the mouse pointer enters the invisible pan frames that surround the visible screen. The binding works only if \fBEdgeThickness\fP is set to a value greater than 0. If a function is bound to an edge, scrolling specified by \fBEdgeScroll\fP is disabled for this edge. It is possible to bind a function only to some edges and use the other edges for scrolling. This command is intended to raise or lower certain windows when the mouse pointer enters an edge. \fBFvwmAuto\fP can be used get a delay when raising or lowering windows. The following example raises \fBFvwmButtons\fP if the mouse pointer enters the top edge of the screen. .sp .if n .RS 4 .nf .fam C # Disable EdgeScrolling but make it possible # to move windows over the screen edge EdgeResistance \-1 Style * EdgeMoveDelay 250 Style * EdgeMoveResistance 20 # Set thickness of the edge of the screen to 1 EdgeThickness 1 # Give focus to FvwmButtons if the mouse # hits top edge EdgeCommand Top Next (FvwmButtons) Focus # Make sure the Next command matches the window Style FvwmButtons CirculateHit Module FvwmButtons Module FvwmAuto 100 "Silent AutoRaiseFunction" \(rs "Silent AutoLowerFunction" # If any window except FvwmButtons has # focus when calling this function # FvwmButtons are lowered DestroyFunc AutoLowerFunction AddToFunc AutoLowerFunction + I Current (!FvwmButtons) All (FvwmButtons) Lower # If FvwmButtons has focus when calling this function raise it DestroyFunc AutoRaiseFunction AddToFunc AutoRaiseFunction + I Current (FvwmButtons) Raise .fam .fi .if n .RE .sp Normally, the invisible pan frames are only on the screen edges that border virtual pages. If a screen edge has a command bound to it, the pan frame is always created on that edge. .RE .sp \fBEdgeLeaveCommand\fP [screen \fIRANDRNAME\fP] [\fIdirection\fP [\fIFunction\fP]] .RS 4 Binds a specified fvwm command \fIFunction\fP to an edge of the screen. Direction may be one of "\fINorth\fP", "\fITop\fP", "\fIWest\fP", "\fILeft\fP", "\fISouth\fP", "\fIBottom\fP", "\fIRight\fP" and "\fIEast\fP". If \fIFunction\fP is omitted the binding for this edge is removed. If EdgeLeaveCommand is called without any arguments all edge bindings are removed. If the literal option \fIscreen\fP followed by a RandR screen name \fIRANDRNAME\fP is given, the command is set only for the given monitor. .sp \fIFunction\fP is executed when the mouse pointer leaves the invisible pan frames that surround the visible screen. The binding works only if \fBEdgeThickness\fP is set to a value greater than 0. If a function is bound to an edge, scrolling specified by \fBEdgeScroll\fP is disabled for this edge. It is possible to bind a function only to some edges and use the other edges for scrolling. This command is intended to raise or lower certain windows when the mouse pointer leaves an edge. \fBFvwmAuto\fP can be used get a delay when raising or lowering windows. See example for \fBEdgeCommand\fP .sp Normally, the invisible pan frames are only on the screen edges that border virtual pages. If a screen edge has a command bound to it, the pan frame is always created on that edge. .RE .sp \fBKey\fP [(\fIwindow\fP)] \fIKeyname\fP \fIContext\fP \fIModifiers\fP \fIFunction\fP .RS 4 Binds a keyboard key to a specified fvwm command, or removes the binding if \fIFunction\fP is \*(Aq\-\*(Aq. The syntax is the same as for a \fBMouse\fP binding except that the mouse button number is replaced with a \fIKeyname\fP. Normally, the key binding is activated when the key is pressed. \fIKeyname\fP is a standard X11 key name as defined in \fI/usr/include/X11/keysymdef.h\fP, (without the \fIXK_\fP prefix), or the keysym database \fI/usr/X11R6/lib/X11/XKeysymDB\fP. Only key names that are generated with no modifier keys or with just the .sp key held are guaranteed to work. The \fIContext\fP and \fIModifiers\fP fields are defined as in the \fBMouse\fP binding. However, when you press a key the context window is the window that has the keyboard focus. That is not necessarily the same as the window the pointer is over (with \fISloppyFocus\fP or \fIClickToFocus\fP). Note that key bindings with the \*(Aq\fIR\fP\*(Aq (root window) context do not work properly with \fISloppyFocus\fP and \fIClickToFocus\fP. If you encounter problems, use the \fBPointerKey\fP command instead. If you want to bind keys to a window with \fISloppyFocus\fP or \fIClickToFocus\fP that are supposed to work when the pointer is not over the window, fvwm assumes the pointer is over the client window (i.e. you have to use the \*(AqW\*(Aq context). .sp The special context \*(Aq\fIM\fP\*(Aq for menus can be used to (re)define the menu controls. It be used alone or together with \*(AqT\*(Aq, \*(AqS\*(Aq, \*(AqI\*(Aq, \*(Aq[\*(Aq, \*(Aq]\*(Aq, \*(Aq\-\*(Aq and \*(Aq_\*(Aq. See the \fBMenu Bindings\fP section for details. .sp The following example binds the built\-in window list to pop up when .sp is hit, no matter where the mouse pointer is: .sp .if n .RS 4 .nf .fam C Key F11 A SCM WindowList .fam .fi .if n .RE .sp Binding a key to a title\-bar button causes that button to appear. Please refer to the \fBMouse\fP command for details. .RE .sp \fBMouse\fP [(\fIwindow\fP)] \fIButton\fP \fIContext\fP \fIModifiers\fP \fIFunction\fP .RS 4 Defines a mouse binding, or removes the binding if \fIFunction\fP is \*(Aq\-\*(Aq. \fIButton\fP is the mouse button number. If \fIButton\fP is zero then any button performs the specified function. Note that only mouse buttons 1 to 5 are fully supported by X11. Any number above this works only partially. Complex functions can not be used with these buttons and neither any operation that requires dragging the pointer with the button held. This is due to limitations of X11. By default, the highest allowed button number is 9. .sp \fIContext\fP describes where the binding applies. Valid contexts are \*(Aq\fIR\fP\*(Aq for the root window, \*(Aq\fIW\fP\*(Aq for an application window, \*(Aq\fID\fP\*(Aq for a desktop application (as kdesktop or Nautilus desktop), \*(Aq\fIT\fP\*(Aq for a window title\-bar, \*(Aq\fIS\fP\*(Aq for a window side, top, or bottom bar, \*(Aq\fI[\fP\*(Aq, \*(Aq\fI]\fP\*(Aq, \*(Aq\fI\-\fP\*(Aq and \*(Aq\fI_\fP\*(Aq for the left, right, top or bottom side only, \*(Aq\fIF\fP\*(Aq for a window frame (the corners), \*(Aq<\*(Aq, \*(Aq^\*(Aq, \*(Aq>\*(Aq and \*(Aq\fIv\fP\*(Aq for the top left, top right, bottom right or bottom left corner, \*(Aq\fII\fP\*(Aq for an icon window, or \*(Aq\fI0\fP\*(Aq through \*(Aq\fI9\fP\*(Aq for title\-bar buttons, or any combination of these letters. \*(Aq\fIA\fP\*(Aq is for any context. For instance, a context of "FST" applies when the mouse is anywhere in a window\(cqs border except the title\-bar buttons. Only \*(AqS\*(Aq and \*(AqW\*(Aq are valid for an undecorated window. .sp The special context \*(Aq\fIM\fP\*(Aq for menus can be used to (re)define the menu controls. It can be used alone or together with \*(AqT\*(Aq, \*(AqS\*(Aq, \*(AqI\*(Aq, \*(Aq[\*(Aq, \*(Aq]\*(Aq, \*(Aq\-\*(Aq and \*(Aq_\*(Aq. See the \fBMenu Bindings\fP section for details. .sp The special context \*(Aq\fIP\fP\*(Aq controls what buttons that can be used to place a window. When using this context no modifiers are allowed (\fIModifiers\fP must be N), no \fIwindow\fP is allowed, and the \fIFunction\fP must be one of \fIPlaceWindow\fP, \fIPlaceWindowDrag\fP, \fIPlaceWindowInteractive\fP, \fICancelPlacement\fP, \fICancelPlacementDrag\fP, \fICancelPlacementInteractive\fP or \fI\-\fP. .sp \fIPlaceWindow\fP makes \fIButton\fP usable for window placement, both for interactive and drag move. \fICancelPlacement\fP does the inverse. That is makes \fIButton\fP to cancel move for both interactive and drag move. It may however not override how new windows are resized after being placed. This is controlled by the \fBEmulate\fP command. Also a window being dragged can always be placed by releasing the button hold while dragging, regardless of if it is set to \fIPlaceWindow\fP or not. .sp \fIPlaceWindowDrag\fP and \fIPlaceWindowInteractive\fP/\fICancelPlacementDrag\fP and \fICancelPlacementInteractive\fP work as \fIPlaceWindow\fP/\fICancelPlacement\fP with the exception that they only affect either windows dragged / placed interactively. .sp \fI\-\fP is equivalent to \fICancelPlacement\fP. .sp The following example makes all buttons but button 3 usable for interactive placement and makes drag moves started by other buttons than one cancel if button 1 is pressed before finishing the move: .sp .if n .RS 4 .nf .fam C Mouse 0 P N PlaceWindow Mouse 3 P N CancelPlacement Mouse 1 P N CancelPlacementDrag .fam .fi .if n .RE .sp By default, the binding applies to all windows. You can specify that a binding only applies to specific windows by specifying the window name in brackets. The window name is a wildcard pattern specifying the class, resource or name of the window you want the binding to apply to. .sp The following example shows how the same key\-binding can be used to perform different functions depending on the window that is focused: .sp .if n .RS 4 .nf .fam C Key (rxvt)\& V A C Echo ctrl\-V\-in\-RXVT Key (*term) V A C Echo ctrl\-V\-in\-Term Key (*vim)\& V A C \-\- Key\& V A C Echo ctrl\-V\-elsewhere .fam .fi .if n .RE .sp A \*(Aq\fI\-\-\fP\*(Aq action indicates that the event should be propagated to the specified window to handle. This is only a valid action for window\-specific bindings. .sp This example shows how to display the WindowList when Button 3 is pressed on an rxvt window: .sp .if n .RS 4 .nf .fam C Mouse (rxvt) 3 A A WindowList .fam .fi .if n .RE .sp Note that Fvwm actually intercepts all events for a window\-specific binding and (if the focused window doesn\(cqt match any of the bindings) sends a synthetic copy of the event to the window. This should be transparent to most applications, however (for security reasons) some programs ignore these synthetic events by default \- xterm is one of them. To enable handling of these events, add the following line to your \fI~/.Xdefaults\fP file: .sp .if n .RS 4 .nf .fam C XTerm*allowSendEvents:\& true .fam .fi .if n .RE .sp \fIModifiers\fP is any combination of \*(Aq\fIN\fP\*(Aq for no modifiers, \*(Aq\fIC\fP\*(Aq for control, \*(Aq\fIS\fP\*(Aq for shift, \*(Aq\fIM\fP\*(Aq for Meta, \*(Aq\fIL\fP\*(Aq for Caps\-Lock or \*(Aq\fIA\fP\*(Aq for any modifier. For example, a modifier of "SM" applies when both the .sp and .sp keys are down. X11 modifiers mod1 through mod5 are represented as the digits \*(Aq1\*(Aq through \*(Aq5\*(Aq. The modifier \*(AqL\*(Aq is ignored by default. To turn it on, use the \fBIgnoreModifiers\fP command. .sp \fIFunction\fP is one of fvwm\(cqs commands. .sp The title\-bar buttons are numbered with odd numbered buttons on the left side of the title\-bar and even numbers on the right. Smaller\-numbered buttons are displayed toward the outside of the window while larger\-numbered buttons appear toward the middle of the window (0 is short for 10). In summary, the buttons are numbered: .sp .if n .RS 4 .nf .fam C 1 3 5 7 9\& 0 8 6 4 2 .fam .fi .if n .RE .sp The highest odd numbered button which has an action bound to it determines the number of buttons drawn on the left side of the title bar. The highest even number determines the number of right side buttons which are drawn. Actions can be bound to either mouse buttons or keyboard keys. .RE .sp \fBPointerKey\fP [(\fIwindow\fP)] \fIKeyname\fP \fIContext\fP \fIModifiers\fP \fIFunction\fP .RS 4 This command works exactly like the \fBKey\fP command. The only difference is that the binding operates on the window under the pointer. Normal key bindings operate on the focused window instead. The \fBPointerKey\fP command can for example be used to bind keys to the root window if you are using \fISloppyFocus\fP or \fIClickToFocus\fP. However, some applications (xterm is one example) are unable to handle this key anymore, even if the pointer is over the xterm window. It is recommended to use the \fBPointerKey\fP command only for key combinations that are not needed in any application window. .sp Example: .sp .if n .RS 4 .nf .fam C Style * SloppyFocus PointerKey f1 a m Menu MainMenu .fam .fi .if n .RE .RE .SS "Controlling the Virtual Desktop" .sp \fBDesktopName\fP \fIdesk\fP \fIname\fP .RS 4 Defines the name of the desktop number \fIdesk\fP to \fIname\fP. This name is used in the \fBWindowList\fP command and in the \fBFvwmPager\fP where it override the \fILabel\fP configuration option. Moreover, if consecutive names starting from desktop 0 are defined, then these names can be used by any EWMH compliant application (as a pager). .RE .sp \fBDesktopConfiguration\fP global | per\-monitor | shared .RS 4 This command controls the behaviour of how desktops should be managed by FVWM. By default, for all screens detected by FVWM through RandR support, the option of global means that all windows on the same desk across monitors is treated as one \(em hence, when a change of desktop/page happens, the same change occurs across all monitors. .sp With per\-monitor , each RandR monitor has a separate copy of desktops, and hence function independently of one another when switching desks/pages. .sp When \fIshared\fP is set, the desktops are shared amongst all monitors. So for example, with the following number of desktops defined with two monitors (\fI[]\fP is monitor1, and \fI<>\fP is monitor2): .sp .if n .RS 4 .nf .fam C [0]\& 1\& 2\& <3>\& 4 .fam .fi .if n .RE .sp Moving between desktops would still honor the monitor the desktop is being requested on. If \fImonitor1\fP wanted to switch to desktop 3, then that desktop is exchanged with \fImonitor2\fP such that the following showed the active desktop on both monitors: .sp .if n .RS 4 .nf .fam C <0>\& 1\& 2\& [3]\& 4 .fam .fi .if n .RE .sp This concept is similar to how spectrwm or xmonad handles desktops. .sp \fBNote:\fP these each \fBDesktopConfiguration\fP mode can be changed on\-the\-fly. .RE .sp \fBDesktopSize\fP \fIHorizontal\fPx\fIVertical\fP .RS 4 Defines the virtual desktop size in units of the physical screen size. .RE .sp \fBEdgeResistance\fP \fIdelay\fP, \fBEdgeResistance\fP \fIscrolling\fP \fImoving\fP [\fIscreen\-scrolling\fP] .RS 4 Tells how hard it should be to change the desktop viewport by moving the mouse over the edge of the screen. The parameter tells how many milliseconds the pointer must spend on the screen edge before fvwm moves the viewport. This is intended for people who use .sp .if n .RS 4 .nf .fam C EdgeScroll 100 100 .fam .fi .if n .RE .sp but find themselves accidentally flipping pages when they do not want to. If \-1 is given as the delay, scrolling is disabled completely. .sp The second form of invocation with two or three arguments is obsolete and should be replaced with the following three commands as needed: .sp .if n .RS 4 .nf .fam C EdgeResistance scrolling Style * EdgeMoveDelay scrolling Style * EdgeMoveResistance moving or Style * EdgeMoveResistance moving screen\-scrolling .fam .fi .if n .RE .sp Fvwm does this substitution automatically and prints a warning. .RE .sp \fBEdgeScroll\fP [\fIscreen RANDRNAME\fP] \fIhorizontal\fP[p] \fIvertical\fP[p] [wrap | wrapx | wrapy] .RS 4 Specifies the percentage of a page to scroll when the cursor hits the edge of a page. The optional \*(Aq\fIscreen RANDRNAME\fP\*(Aq specifies the RandR monitor which this setting should apply to, ignoring all other monitors. Without this option, it applies the value to all monitors. A trailing \*(Aq\fIp\fP\*(Aq changes the interpretation to mean pixels. If you do not want any paging or scrolling when you hit the edge of a page include .sp .if n .RS 4 .nf .fam C EdgeScroll 0 0 .fam .fi .if n .RE .sp in your \fIconfig\fP file, or possibly better, set the \fBEdgeThickness\fP to zero. See the \fBEdgeThickness\fP command. If you want whole pages, use .sp .if n .RS 4 .nf .fam C EdgeScroll 100 100 .fam .fi .if n .RE .sp Both \fIhorizontal\fP and \fIvertical\fP should be positive numbers. .sp If the \fIhorizontal\fP and \fIvertical\fP percentages are multiplied by 1000 or one of the keywords \fIwrap\fP, \fIwrapx\fP and \fIwrapy\fP is given then scrolling wraps around at the edge of the desktop. If .sp .if n .RS 4 .nf .fam C EdgeScroll 100000 100000 .fam .fi .if n .RE .sp is used fvwm scrolls by whole pages, wrapping around at the edge of the desktop. .RE .sp \fBEdgeThickness\fP [\fIscreen RANDRNAME\fP] 0 | 1 | 2 .RS 4 This is the width or height of the invisible window that fvwm creates on the edges of the screen that are used for the edge scrolling feature. .sp The optional \*(Aq\fIscreen RANDRNAME\fP\*(Aq specifies the RandR monitor which this setting should apply to, ignoring all other monitors. Without this option, it applies the value to all monitors. .sp In order to enable page scrolling via the mouse, four windows called the "pan frames" are placed at the very edge of the screen. This is how fvwm detects the mouse\(cqs presence at the window edge. Because of the way this works, they need to be at the top of the stack and eat mouse events, so if you have any kind of error along the lines of: "mouse clicks at the edge of the screen do the wrong thing" you\(cqre having trouble with the pan frames and (assuming you do not use the mouse to flip between pages) should set the EdgeThickness to 0. .sp A value of 0 completely disables mouse edge scrolling, even while dragging a window. 1 gives the smallest pan frames, which seem to work best except on some servers. .sp 2 is the default. .sp Pan frames of 1 or 2 pixels can sometimes be confusing, for example, if you drag a window over the edge of the screen, so that it straddles a pan frame, clicks on the window, near the edge of the screen are treated as clicks on the root window. .RE .sp \fBEwmhBaseStruts\fP \fIscreen RANDRNAME\fP \fIleft\fP \fIright\fP \fItop\fP \fIbottom\fP .RS 4 Where left, right, top and bottom are positive or null integers which define bands at the edge of the screen. If \fIscreen\fP is given, followed by the RANDRNAME of a given display, then the EwmhBaseStruts are defined for just RANDRNAME. \fIleft\fP defines a band on the left of your screen of width \fIleft\fP, \fIright\fP defines a band on the right of your screen of width \fIright\fP, \fItop\fP defines a band on the top of your screen of height \fItop\fP and \fIbottom\fP defines a band on the bottom of your screen of height \fIbottom\fP. The unit is the pixel and the default is 0 0 0 0. These areas define additional reserved space to the reserved space defined by some ewmh compliant applications. This is used to compute the Working Area. See the \fBExtended Window Manager Hints\fP section for a definition of the Working Area. .RE .sp \fBEwmhNumberOfDesktops\fP \fInum\fP [\fImax\fP] .RS 4 This command is useful only for an ewmh compliant pager or taskbar (as kpager or kicker taskbar) and not for fvwm modules ( \fBFvwmPager\fP or \fBFvwmIconMan\fP). It causes a compliant application to consider at least \fInum\fP desktops (desktop 0 to desktop \fInum\fP\-1). The optional argument \fImax\fP causes a compliant application to never consider more than \fImax\fP desktops. If \fImax\fP is 0 (the default) there is no limitation. The actual number of desktops is determined dynamically. It is at least \fInum\fP, but it can be d if there is a window on desktop d\-1 (or if the current desktop is desktop d\-1) and d is less or equal to \fImax\fP or \fImax\fP is null. Moreover, a compliant pager can ask to change \fInum\fP itself. This is accepted by fvwm only if this number is less than or equal to \fImax\fP or if \fImax\fP is null. Note that negative desktops are not supported by the ewmh specification. The default is 4 0. .RE .sp \fBGotoDesk\fP [screen \fIRANDRNAME\fP] [prev | \fIarg1\fP [\fIarg2\fP] [\fImin\fP \fImax\fP]] .RS 4 Switches the current viewport to another desktop (workspace, room). The current monitor is used in \fIper\-monitor\fP and \fIshared\fP \fIDesktopConfiguration\fP, unless the literal \fIscreen\fP followed by a valid RandR monitor name is included. .sp The command takes 1, 2, 3, or 4 arguments. A single argument is interpreted as a relative desk number. Two arguments are understood as a relative and an absolute desk number. Three arguments specify a relative desk and the minimum and maximum of the allowable range. Four arguments specify the relative, absolute, minimum and maximum values. If a literal \fIprev\fP is given as the single argument, the last visited desk number is used. .sp If \fIarg1\fP is non zero then the next desktop number is the current desktop number plus \fIarg1\fP. .sp If \fIarg1\fP is zero then the new desktop number is \fIarg2\fP. (If \fIarg2\fP is not present, then the command has no effect.) .sp If \fImin\fP and \fImax\fP are given, the new desktop number is no smaller than \fImin\fP and no bigger than \fImax\fP. Values out of this range are truncated (if you gave an absolute desk number) or wrapped around (if you gave a relative desk number). .sp The syntax is the same as for \fBMoveToDesk\fP, which moves a window to a different desktop. .sp The number of active desktops is determined dynamically. Only desktops which contain windows or are currently being displayed are active. Desktop numbers must be between 0 and 2147483647 (is that enough?). Negative desktop numbers are not supported by the EWMH specifications and are no longer supported in fvwm. .RE .sp \fBGotoDeskAndPage\fP screen | prev | \fIdesk\fP \fIxpage\fP \fIypage\fP .RS 4 Switches the current viewport to another desktop and page, similar to the \fBGotoDesk\fP and \fBGotoPage\fP commands. The new desk is \fIdesk\fP and the new page is (\fIxpage\fP,\fIypage\fP). .RE .sp \fBGotoPage\fP screen | prev | [\fIoptions\fP] \fIx\fP[p] \fIy\fP[p] .RS 4 Moves the desktop viewport to page (x,y). The upper left page is (0,0), the upper right is (M,0), where M is one less than the current number of horizontal pages specified in the \fBDesktopSize\fP command. The lower left page is (0,N), and the lower right page is (M,N), where N is the desktop\(cqs vertical size as specified in the \fBDesktopSize\fP command. To switch to a page relative to the current one add a trailing \*(Aq\fIp\fP\*(Aq after any or both numerical arguments. .sp Possible \fIoptions\fP are \fIwrapx\fP and \fIwrapy\fP to wrap around the x or y coordinate when the viewport is moved beyond the border of the desktop. .sp The name of the RandR screen. .sp To go to the last visited page use \fIprev\fP as the first argument. The \fBGotoPage\fP function should not be used in a pop\-up menu. .sp Examples: .sp .if n .RS 4 .nf .fam C # Go to page (2,3) GotoPage 2 3 # Go to lowest and rightmost page GotoPage \-1 \-1 # Go to last page visited GotoPage prev # Go two pages to the right and one page up GotoPage +2p \-1p .fam .fi .if n .RE .RE .sp \fBScroll\fP [screen RANDRNAME] [\fIhorizonal\fP[p] \fIvertical\fP[p] | reverse] .RS 4 Scrolls the virtual desktop\(cqs viewport by \fIhorizontal\fP pages in the x\-direction and \fIvertical\fP pages in the y\-direction or starts interactive scrolling of the viewport. Either or both entries may be negative. Both \fIhorizontal\fP and \fIvertical\fP values are expressed in percent of pages, so .sp .if n .RS 4 .nf .fam C Scroll 100 100 .fam .fi .if n .RE .sp means to scroll down and right by one full page. .sp .if n .RS 4 .nf .fam C Scroll 50 25 .fam .fi .if n .RE .sp means to scroll right half a page and down a quarter of a page. The \fBScroll\fP function should not be called from pop\-up menus. Normally, scrolling stops at the edge of the desktop. .sp If the \fIhorizontal\fP and \fIvertical\fP percentages are 100 or more and are multiplied by 1000 then scrolling wraps around at the edge of the desktop. If .sp .if n .RS 4 .nf .fam C Scroll 100000 0 .fam .fi .if n .RE .sp is executed over and over fvwm moves to the next desktop page on each execution and wraps around at the edge of the desktop, so that every page is hit in turn. .sp If the letter \*(Aq\fIp\fP\*(Aq is appended to each coordinate (\fIhorizontal\fP and/or \fIvertical\fP), then the scroll amount is measured in pixels. .sp Without arguments or if the option \fIreverse\fP is given interactive scrolling takes place. The viewport scrolls as the mouse is moved. With the \fIreverse\fP option scrolling is done in opposite direction of the mouse movement, and without it scrolling in the same direction as the mouse. .sp The binding .sp .if n .RS 4 .nf .fam C Mouse 1 A CM Scroll reverse .fam .fi .if n .RE .sp gives an effect of grabbing and dragging the viewport with button 1 if Control and Meta is pressed. .sp If \fIscreen\fP is given, followed by the RANDRNAME of a given display, then the specified screen is scrolled. This is only useful if using per\-monitor or shared \fIDesktopConfiguration\fP and wanting to scroll a monitor other than the current monitor. Interactive scrolling always scrolls the current monitor. .RE .SS "User Functions and Shell Commands" .sp \fBAddToFunc\fP [\fIname\fP [I | J | M | C | H | D \fIaction\fP]] .RS 4 Begins or adds to a function definition. Here is an example: .sp .if n .RS 4 .nf .fam C AddToFunc Move\-or\-Raise I Raise + M Move + D Lower .fam .fi .if n .RE .sp The function name is "Move\-or\-Raise", and it could be invoked from a menu or a mouse binding or key binding: .sp .if n .RS 4 .nf .fam C Mouse 1 TS A Move\-or\-Raise .fam .fi .if n .RE .sp The \fIname\fP must not contain embedded whitespace. No guarantees are made whether function names with embedded whitespace work or not. This behavior may also change in the future without further notice. The letter before the \fIaction\fP tells what kind of action triggers the command which follows it. \*(Aq\fII\fP\*(Aq stands for "Immediate", and is executed as soon as the function is invoked. \*(Aq\fIJ\fP\*(Aq is similar to "Immediate" but is delayed until a button is pressed or released or the pointer is moved, or the function completes. It is always executed before the other function actions. \*(Aq\fIM\fP\*(Aq stands for "Motion", i.e. if the user starts moving the mouse. \*(Aq\fIC\fP\*(Aq stands for "Click", i.e., if the user presses and releases the mouse button. \*(Aq\fIH\fP\*(Aq stands for "Hold", i.e. if the user presses a mouse button and holds it down for more than \fBClickTime\fP milliseconds. \*(Aq\fID\fP\*(Aq stands for "Double\-click". The action \*(Aq\fII\fP\*(Aq causes an action to be performed on the button\-press, if the function is invoked with prior knowledge of which window to act on. .sp There is a number of predefined symbols that are replaced by certain values if they appear on the command line. Please refer to the \fBCommand Expansion\fP section for details. .sp \fBWarning\fP Please read the comments on executing complex functions in the section \fBScripting and Complex Functions\fP. .sp Examples: .sp If you call .sp .if n .RS 4 .nf .fam C Key F10 R A Function MailFunction xmh "\-font fixed" .fam .fi .if n .RE .sp and "MailFunction" is .sp .if n .RS 4 .nf .fam C AddToFunc MailFunction + I Next ($0) Iconify off + I Next (AcceptsFocus, $0) Focus + I None ($0) Exec exec $0 $1 .fam .fi .if n .RE .sp Then the last line of the function becomes .sp .if n .RS 4 .nf .fam C + I None (xmh) Exec exec xmh \-font fixed .fam .fi .if n .RE .sp The expansion is performed as the function is executed, so you can use the same function with all sorts of different arguments. You could use .sp .if n .RS 4 .nf .fam C Key F11 R A Function MailFunction zmail "\-bg pink" .fam .fi .if n .RE .sp in the same \fIconfig\fP, if you wanted. An example of using "$[w.id]" is: .sp .if n .RS 4 .nf .fam C AddToFunc PrintFunction + I Raise + I Exec xdpr \-id $[w.id] .fam .fi .if n .RE .sp Note that "$$" is expanded to \*(Aq$\*(Aq. .sp Another example: bind right mouse button within the window button number 6 (this is a minimize button for the win95 theme) to iconify all windows of the same resource: .sp .if n .RS 4 .nf .fam C AddToFunc FuncIconifySameResource "I" All ($0) Iconify on Mouse 3 6 A FuncIconifySameResource $[w.resource] .fam .fi .if n .RE .RE .sp \fBBeep\fP .RS 4 As might be expected, this makes the terminal beep. .RE .sp \fBDestroyFunc\fP \fIfunction\fP .RS 4 Deletes a function, so that subsequent references to it are no longer valid. You can use this to change the contents of a function during a fvwm session. The function can be rebuilt using \fBAddToFunc\fP. .sp .if n .RS 4 .nf .fam C DestroyFunc PrintFunction .fam .fi .if n .RE .RE .sp \fBEcho\fP \fIstring\fP .RS 4 Prints a message to the debug log file, which requires logging to be enabled. See the \fB\-v\fP option or \fBPrintInfo\fP for more information on both enabling debug logging and the log file location. Potentially useful for debugging things in your \fIconfig\fP or getting the value of variables. .sp .if n .RS 4 .nf .fam C Echo Beginning style definitions... Echo Current desk $[desk.n]. .fam .fi .if n .RE .RE .sp \fBEchoFuncDefinition\fP \fIfunction\fP .RS 4 The \fBEchoFuncDefinition\fP is similar to the \fBEcho\fP command but prints the definition for the given \fIfunction\fP to the debug log file. It is useful to find out how fvwm handles quoting and for debugging functions. .RE .sp \fBExec\fP \fIcommand\fP .RS 4 Executes \fIcommand\fP. You should not use an ampersand \*(Aq&\*(Aq at the end of the command. You probably want to use an additional "exec" at the beginning of \fIcommand\fP. Without that, the shell that fvwm invokes to run your command stays until the command exits. In effect, you\(cqll have twice as many processes running as you need. Note that some shells are smart enough to avoid this, but it never hurts to include the "exec" anyway. .sp The following example binds function key .sp in the root window, with no modifiers, to the exec function. The program rxvt is started with an assortment of options. .sp .if n .RS 4 .nf .fam C Key F1 R N Exec exec rxvt \-fg yellow \-bg blue \(rs \-e /bin/tcsh .fam .fi .if n .RE .sp Note that this function doesn\(cqt wait for \fIcommand\fP to complete, so things like: .sp .if n .RS 4 .nf .fam C Exec "echo AddToMenu ... > /tmp/file" Read /tmp/file .fam .fi .if n .RE .sp do not work reliably (see the \fBPipeRead\fP command). .RE .sp \fBExecUseShell\fP [\fIshell\fP] .RS 4 Makes the \fBExec\fP command use the specified shell, or the value of the \fI$SHELL\fP environment variable if no shell is specified, instead of the default Bourne shell (\fI/bin/sh\fP). .sp .if n .RS 4 .nf .fam C ExecUseShell ExecUseShell /usr/local/bin/tcsh .fam .fi .if n .RE .RE .sp \fBFunction\fP \fIFunctionName\fP .RS 4 Used to bind a previously defined function to a key or mouse button. The following example binds mouse button 1 to a function called "Move\-or\-Raise", whose definition was provided as an example earlier in this man page. After performing this binding fvwm executes the "move\-or\-raise" function whenever button 1 is pressed in a window\(cqs title\-bar. .sp .if n .RS 4 .nf .fam C Mouse 1 T A Function Move\-or\-Raise .fam .fi .if n .RE .sp The keyword \fBFunction\fP may be omitted if \fIFunctionName\fP does not coincide with an fvwm command. .sp Warning: Please read the comments on executing complex functions in the section \fBScripting and Complex Functions\fP. .RE .sp \fBInfoStoreAdd\fP \fIkey\fP \fIvalue\fP .RS 4 Stores the \fIvalue\fP at the given \fIkey\fP. This is useful to store generic information used in the lifetime of an fvwm config file. For example storing program preferences for opening video files. .sp The purpose of this command is to store internal information to fvwm which can be used bu fvwm functions, or when opening programs of a certain type. Previous to this command the only way to do this was via \fBSetEnv\fP but this is discouraged because it places such information in the environment, which pollutes it and makes the information global to other processes started by fvwm which may then modify them which might not be what\(cqs wanted. Hence the point of \fBInfoStoreAdd\fP is to still allow for such information to be stored, but kept internal to fvwm. .sp In this way, one can build up as many key/value pairs as needed. Recalling the value of a given key happens through fvwm\(cqs usual expansion mechanism. See the \fBCommand Expansion\fP section for more details. For example: .sp .if n .RS 4 .nf .fam C InfoStoreAdd teddybearprog xteddy # Echo the value of teddybearprog Echo $[infostore.teddybearprog] .fam .fi .if n .RE .sp Removing an entry from the InfoStore is done with the \fBInfoStoreRemove\fP command. .RE .sp \fBInfoStoreRemove\fP \fIkey\fP .RS 4 Removes an entry at the given \fIkey\fP from the InfoStore. Example: .sp .if n .RS 4 .nf .fam C InfoStoreRemove teddybearprog .fam .fi .if n .RE .RE .sp \fBNop\fP .RS 4 Does nothing. This is used to insert a blank line or separator in a menu. If the menu item specification is .sp .if n .RS 4 .nf .fam C AddToMenu MyMenu " " Nop .fam .fi .if n .RE .sp then a blank line is inserted. If it looks like .sp .if n .RS 4 .nf .fam C + "" Nop .fam .fi .if n .RE .sp then a separator line is inserted. Can also be used as the double\-click action for \fBMenu\fP or \fBPopup\fP. .RE .sp \fBPipeRead\fP \fIcommand\fP [quiet] .RS 4 Causes fvwm to read commands from the output of the \fIcommand\fP. This \fIcommand\fP is executed by \fI/bin/sh\fP as if you typed it on the command line. If the command consists of more than one word it must be quoted. Useful for building up dynamic menu entries based on a directories contents, for example. If the keyword \fIQuiet\fP follows the command no message is produced if the \fIcommand\fP is not found. .sp Example: .sp .if n .RS 4 .nf .fam C AddToMenu HomeDirMenu PipeRead \*(Aqfor i in $HOME/*; \(rs do echo "+ $i Exec xterm \-e vi $i"; done\*(Aq .fam .fi .if n .RE .sp Note: The \fBPipeRead\fP changes the pointer to a watch cursor by default during execution. However, some commands, for example xwd, need to take control of the pointer themselves and do not work. To disable the watch cursor, use the command prior to \fBPipeRead\fP .sp .if n .RS 4 .nf .fam C BusyCursor Read off .fam .fi .if n .RE .sp The \fBPipeRead\fP command executes synchronously. If you want to \fBExec\fP something, but need the command to run synchronously, you might do something like: .sp .if n .RS 4 .nf .fam C PipeRead \*(Aqcommand 1>&2\*(Aq .fam .fi .if n .RE .sp The redirection causes any output from the program to go to stderr instead of being read as a sequence of commands by fvwm. \fBPipeRead\fP returns 1 if the given command could be executed or \-1 if not (see the section \fBConditional Commands\fP for the meaning of return codes). .RE .sp \fBRead\fP \fIfilename\fP [quiet] .RS 4 Causes fvwm to read commands from the file named \fIfilename\fP. If the keyword \fIQuiet\fP follows the command no message is produced if the file is not found. If the file name does not begin with a slash (\*(Aq/\*(Aq), fvwm looks in the user\(cqs data directory, then the system data directory. The user\(cqs data directory is by default \fI$HOME/.fvwm\fP. It can be overridden by exporting \fIFVWM_USERDIR\fP set to any other directory. The \fBRead\fP command returns 1 if the given file could be read or \-1 if not (see the section \fBConditional Commands\fP for the meaning of return codes). .RE .sp \fBSetEnv\fP \fIvariable\fP \fIvalue\fP .RS 4 Set an environment variable to a new value, similar to the shell\(cqs export or setenv command. The \fIvariable\fP and its \fIvalue\fP are inherited by processes started directly by fvwm. For example: .sp .if n .RS 4 .nf .fam C SetEnv height HEIGHT .fam .fi .if n .RE .RE .sp \fBSilent\fP \fIcommand\fP .RS 4 A number of commands require a window to operate on. If no window was selected when such a function is invoked the user is asked to select a window. Sometimes this behavior is unwanted, for example if the function was called by a module and the window that was selected at first does not exist anymore. You can prevent this by putting \fBSilent\fP in front of the fvwm \fIcommand\fP. If a function that needs a window is called with \fBSilent\fP without a window selected, it simply returns without doing anything. If \fBSilent\fP is used on a user defined function it affects all function and sub function calls until the original function exits. .sp Another usage of \fBSilent\fP is with binding commands \fBKey\fP, \fBPointerKey\fP and \fBMouse\fP, this disables error messages. .sp \fBSilent\fP also disables the error message for non\-existent commands. Note: This command is treated as a prefix to its \fIcommand\fP. Expansion of the command line is done as if \fBSilent\fP was not there. .sp Examples: .sp .if n .RS 4 .nf .fam C Silent Move 0 0 Silent User_defined_function # do not complain on keyboards without "Help" key Silent Key Help R A Popup HelpMenu .fam .fi .if n .RE .RE .sp \fBUnsetEnv\fP [\fIvariable\fP] .RS 4 Unset an environment variable, similar to shell\(cqs export or unsetenv command. The \fIvariable\fP then is removed from the environment array inherited by processes started directly by fvwm. .RE .sp \fBWait\fP \fIwindow\fP .RS 4 This command is intended to be used in fvwm functions only. It causes execution of a function to pause until a new window matching \fIwindow\fP appears. This can be a window\(cqs name, class, or resource string. It may contain the wildcards \*(Aq*\*(Aq and \*(Aq?\*(Aq, which are matched in the usual Unix filename manner. This is particularly useful in the "InitFunction" if you are trying to start windows on specific desktops: .sp .if n .RS 4 .nf .fam C AddToFunc InitFunction + I Exec exec xterm \-geometry 80x64+0+0 + I Wait xterm + I GotoDesk 0 2 + I Exec exec xmh \-font fixed \-geometry \(rs 507x750+0+0 + I Wait xmh + I GotoDesk 0 0 .fam .fi .if n .RE .sp The above function starts an xterm on the current desk, waits for it to map itself, then switches to desk 2 and starts an xmh. After the xmh window appears control moves to desk 0. .sp Fvwm remains partially functional during a wait, but any input from the modules is queued up and processed only after the window appears or the command is aborted. For example, windows can not be focused with \fBFvwmIconMan\fP or \fBFvwmPager\fP during a wait. .sp You can escape from a \fBWait\fP pause by pressing Ctrl\-Alt\-Escape (where Alt is the first modifier). To redefine this key sequence see the \fBEscapeFunc\fP command. .RE .sp \fBStatus\fP \fIOn | Off\fP .RS 4 Turns status either On or Off. This sends information in JSON format down a named pipe (set via FVWM_STATUS_PIPE env var) about the current desks and number of windows, etc. This is meant to provide a fast means of supplying third\-party tools information about what\(cqs happening in Fvwm. For example, the JSON could be manipulated and sent to tools such as \fIlemonbar\fP, \fIpolybar\fP, etc. .sp The format of the JSON blob looks like this: .sp .if n .RS 4 .nf .fam C { "version": 3, "current_screen": "HDMI2", "screens": { "HDMI2": { "randr_order": 0, "current_client": "n6tadam@shuttle: ~", "desktops": { "0": { "number": 0, "is_urgent": false, "is_current": true, "number_of_clients": 5 }, }, }, }, } .fam .fi .if n .RE .sp These sections repeat for all screens/groups/etc, depending on how many there are of each. .RE .SS "Conditional Commands" .sp Conditional commands are commands that are only executed if certain conditions are met. Most conditional commands work on windows, like \fBNext\fP, \fBThisWindow\fP or \fBAll\fP. There is one conditional command, \fBTest\fP, that works on global conditions unrelated to windows. The syntax of the conditions is described below. For readability, the list of conditions is located at the end of this section. .sp \fBReturn Codes\fP .RS 4 All commands in this section (unless specifically stated for the command) also have a return code that can be 1 (if the condition was met) or 0 (if the condition was not met). Some commands may return \-1 which means that an error occurred and the return code is useless. The \fBBreak\fP command returns \-2. Additionally, the return codes of commands run in a complex functions are passed to the invoking complex function. The return code is used by the \fBTestRc\fP command. Please refer to the commands\*(Aq description for examples. The return code can also be accessed through the variable \fI$[cond.rc]\fP. Non conditional commands do not modify the return code of the last conditional command. Important note: return codes are only defined inside functions created with the \fBAddToFunc\fP command and are not inherited by sub functions. To run a command without altering the return code, the \fBKeepRc\fP command can be used. .RE .sp \fBThe Ring of Windows\fP .RS 4 Fvwm stores windows in a ring internally. Think of the focused window as a cursor on the current position in the ring. The \fBNext\fP command and many other commands search forwards through the ring for a matching window, and \fBPrev\fP searches backwards. The windows in the ring are either ordered by creation time (if the \fI!FPSortWindowlistByFocus\fP, \fINeverFocus\fP or \fIMouseFocus\fP styles are used) or by the last time they had the focus. .RE .sp \fBList of Conditional Commands\fP .RS 4 .sp \fBAll\fP [\fIoptions\fP] [(\fIconditions\fP)] \fIcommand\fP .RS 4 Execute \fIcommand\fP on all windows meeting the conditions. It returns 1 if any window matches the condition and 0 otherwise. The execution starts at the top of the window ring and continues towards the bottom. The \fIoptions\fP can be any combination of \fIReverse\fP and \fIUseStack\fP. If the option \fIReverse\fP is given the execution order is reversed. The option \fIUseStack\fP makes All use the stacking order instead of the window ring when walking through windows. See the \fBConditions\fP section for a list of conditions. .sp This command implies the conditions \fICirculateHit\fP, \fICirculateHitIcon\fP and \fICirculateHitShaded\fP. They can be turned off by specifying \fI!CirculateHit\fP etc. explicitly. .RE .sp \fBAny\fP [(\fIconditions\fP)] \fIcommand\fP .RS 4 Performs \fIcommand\fP if any window which satisfies all \fIconditions\fP exists. The command is run in the context of the root window. See the \fBConditions\fP section for a list of conditions. .RE .sp \fBBreak\fP [\fIlevels\fP] .RS 4 If the break command is used in a function, function execution is terminated immediately. Further commands of the function are not processed. Normally, all nested invocations of complex functions are left. An optional integer number \fIlevels\fP may be given to break out of the given number of nested functions and continue execution of a higher level function. The \fBBreak\fP command always has the return code \-2. Example: .sp .if n .RS 4 .nf .fam C AddToFunc PickWindowRaiseAndDeiconify + I Pick + I TestRc (Error) Break + I Raise + I Iconify off .fam .fi .if n .RE .RE .sp \fBCurrent\fP [(\fIconditions\fP)] \fIcommand\fP .RS 4 Performs \fIcommand\fP on the currently focused window if it satisfies all \fIconditions\fP. See the \fBConditions\fP section for a list of conditions. .sp This command implies the conditions \fICirculateHit\fP, \fICirculateHitIcon\fP and \fICirculateHitShaded\fP. They can be turned off by specifying \fI!CirculateHit\fP etc. explicitly. .RE .sp \fBDirection\fP [FromPointer] \fIdirection\fP [(\fIconditions\fP)] \fIcommand\fP .RS 4 Performs \fIcommand\fP (typically \fBFocus\fP) on a window in the given direction which satisfies all \fIconditions\fP. Normally, the center of the currently focused window or the context window in which the command was invoked is taken as the starting point. Lacking such a window, or when the \fIFromPointer\fP option is given, the current position of the pointer is taken as the starting point. The \fIdirection\fP may be one of "North", "Northeast", "East", "Southeast", "South", "Southwest", "West", "Northwest" and "Center". Which window \fBDirection\fP selects depends on angle and distance between the center points of the windows. Closer windows are considered a better match than those farther away. The \fICenter\fP direction simply selects the window closest to the starting point. Returns \-1 if an invalid direction was given. See the \fBConditions\fP section for a list of conditions. .RE .sp \fBKeepRc\fP \fIcommand\fP .RS 4 Runs the \fIcommand\fP but does not alter the return code of the previous command. Note: \fBKeepRc\fP is treated as a prefix to its \fIcommand\fP. Expansion of the command line is done as if \fBKeepRc\fP was not there. .RE .sp \fBNext\fP [(\fIconditions\fP)] \fIcommand\fP .RS 4 Performs \fIcommand\fP (typically \fBFocus\fP) on the next window which satisfies all \fIconditions\fP. If the command is running in a window context, it starts looking for a matching window from there. Otherwise it starts at the focused window. See \fBConditions\fP section for a list of conditions. .RE .sp \fBNone\fP [(\fIconditions\fP)] \fIcommand\fP .RS 4 Performs \fIcommand\fP if no window which satisfies all \fIconditions\fP exists. The command is run in the context of the root window. Returns 1 if no window matches the conditions and 0 otherwise. See \fBConditions\fP section for a list of conditions. .sp This command implies the conditions \fICirculateHit\fP, \fICirculateHitIcon\fP and \fICirculateHitShaded\fP. They can be turned off by specifying \fI!CirculateHit\fP etc. explicitly. .RE .sp \fBNoWindow\fP \fIcommand\fP .RS 4 Performs \fIcommand\fP, but removes the window context if any. This is not really a conditional command, but a prefix that may be useful in menu items that should operate without a window even if such menu is bound to window decorations. .RE .sp \fBPick\fP [(\fIconditions\fP)] \fIcommand\fP .RS 4 \fBPick\fP works like \fBFunction\fP if invoked in the context of a window. If invoked in the root window, it first asks the user to pick a window and then executes the \fIcommand\fP in the context of that window. This avoids annoying multiple selections with complex functions. The command is executed only if the given \fIconditions\fP are met. Returns \-1 if no window was selected. See \fBConditions\fP section for a list of conditions. .sp This command implies the conditions \fICirculateHit\fP, \fICirculateHitIcon\fP and \fICirculateHitShaded\fP. They can be turned off by specifying \fI!CirculateHit\fP etc. explicitly. .RE .sp \fBPointerWindow\fP [(\fIconditions\fP)] \fIcommand\fP .RS 4 Performs \fIcommand\fP if the window under the pointer satisfies all \fIconditions\fP. Returns \-1 if there is no window under the pointer. See \fBConditions\fP section for a list of conditions. .sp This command implies the conditions \fICirculateHit\fP, \fICirculateHitIcon\fP and \fICirculateHitShaded\fP. They can be turned off by specifying \fI!CirculateHit\fP etc. explicitly. .RE .sp \fBPrev\fP [(\fIconditions\fP)] \fIcommand\fP .RS 4 Performs \fIcommand\fP (typically \fBFocus\fP) on the previous window which satisfies all \fIconditions\fP. If the command is running in a window context, it starts looking for a matching window from there. Otherwise it starts at the focused window. See \fBConditions\fP section for a list of conditions. .RE .sp \fBScanForWindow\fP [FromPointer] \fIdir1\fP \fIdir2\fP [(\fIconditions\fP)] \fIcommand\fP .RS 4 Performs \fIcommand\fP (typically \fBFocus\fP) on a window in the given direction which satisfies all \fIconditions\fP. Normally, the center of the currently focused window or the context window in which the command was invoked is taken as the starting point. Lacking such a window, or when the \fIFromPointer\fP option is given, the current position of the pointer is taken as the starting point. The direction \fIdir1\fP may be one of "North", "NorthEast", "East", "SouthEast", "South", "SouthWest", "West", and "NorthWest". Which window \fBScanForWindow\fP selects depends first on the position along the primary axis given by \fIdir1\fP. If any windows have the exact same coordinate along the primary axis, the secondary direction is used to order the windows. The direction \fIdir2\fP may be one of the same set of values as \fIdir1\fP. If \fIdir2\fP is not perfectly perpendicular to \fIdir1\fP, ScanForWindow returns a failure. When using ScanForWindow repeatedly with the same arguments, it is guaranteed that all windows matching the conditions will eventually be found. If the focus reaches a limit along the primary axis, it will wrap around to the opposite side. Returns \-1 if an invalid direction was given. See \fBConditions\fP section for a list of conditions. .RE .sp \fBTest\fP [(\fItest\-conditions\fP)] \fIcommand\fP .RS 4 Performs \fIcommand\fP if all \fItest\-conditions\fP are satisfied. The \fItest\-conditions\fP are keywords with possible arguments from the list below and are separated by commas or whitespace. They include: \fIVersion operator x.y.z\fP, \fIEnvIsSet varname\fP, \fIEnvMatch varname pattern\fP, \fIEdgeHasPointer direction\fP, \fIEdgeIsActive direction\fP, \fIStart\fP, \fIInit\fP, \fIRestart\fP, \fIExit\fP, \fIQuit\fP, \fIToRestart\fP, \fITrue\fP, \fIFalse\fP, \fIF\fP, \fIR\fP, \fIW\fP, \fIX\fP and \fII\fP. A test\-condition prefixed with "!" is negated. .sp The \fIVersion\fP \fIoperator x.y.z\fP test\-condition is fulfilled if the logical condition of the expression is true. Valid \fIoperator\fP values are: \fI>=\fP, \fI>\fP, \fI<=\fP, \fI<\fP, \fI==\fP and \fI!=\fP. .sp Example: .sp .if n .RS 4 .nf .fam C Test (Version >= 2.5.11) Echo 2.5.11 or later. .fam .fi .if n .RE .sp The \fIEnvIsSet\fP \fIvarname\fP test\-condition is true if the given environment variable is set. The \fIEnvMatch\fP \fIvarname pattern\fP test\-condition is true if \fIpattern\fP matches the given environment or infostore variable value. (See \fBInfoStoreAdd\fP). The pattern may contain special "*" and "?" chars. The "varname" is coded without the leading dollar sign ($). .sp The \fIEdgeHasPointer\fP [\fIdirection\fP] test\-condition is true if the edge in the given direction currently contains the pointer. The \fIEdgeIsActive\fP [\fIdirection\fP] test\-condition is true if the edge in the given direction currently is active. An edge is active, and can contain a pointer if either a command is bound to it or edge scroll is available in that direction. The direction may be one of * Any\fI,\fP North\fI,\fP Top\fI,\fP Up\fI,\fP West\fI,\fP Left\fI,\fP South\fI,\fP Bottom\fI, \fP Down\fI,\fP Right* and * East\fI. If no direction is specified \fPAny* is assumed. .sp The \fIStart\fP test\-condition is the same as either \fIInit\fP or \fIRestart\fP. It is only true on startup or restart prior and during \fBStartFunction\fP execution. The \fIExit\fP test\-condition is the same as either \fIQuit\fP or \fIToRestart\fP. It is only valid on shutdown during \fBExitFunction\fP function execution. .sp The \fITrue\fP and \fIFalse\fP test\-conditions are unconditionally true and false. .sp Additionally, if a test\-condition name is not recognized, the Error return code is set and the command is not executed. .sp The \fIF\fP \fIfile\fP, \fIR\fP \fIfile\fP, \fIW\fP \fIfile\fP, \fIX\fP \fIfile\fP and \fII\fP \fIfile\fP test\-conditions test for existence of the given [F]ile (possibly with [R]ead/[W]rite permissions), e[X]ecutable (in \fI$PATH\fP), or the [I]mage (in ImagePath). .sp Example: .sp .if n .RS 4 .nf .fam C AddToFunc StartFunction I Test (Init) Exec exec xterm AddToFunc VerifyVersion + I Test (Version 2.5.*) Echo 2.5.x detected + I TestRc (NoMatch) \(rs Test (!Version 2.6.*) Echo Future version + I TestRc (NoMatch) \(rs Echo 2.6.x is detected Test (F $[FVWM_USERDIR]/local\-config) Read local\-config Test (X xterm\-utf16) Exec exec xterm\-utf16 .fam .fi .if n .RE .RE .sp \fBTestRc\fP [([!]\fIreturncode\fP)] \fIcommand\fP .RS 4 Performs \fIcommand\fP if the last conditional command returned the value \fIreturncode\fP. Instead of the numeric values 0 (no match), 1 (match), \-1 (error), and \-2 (break) the symbolic names "\fINoMatch\fP", "\fIMatch\fP", "\fIError\fP" and "\fIBreak\fP" can be used. If no \fIreturncode\fP is given, the default 0 is assumed. If the return code is prefixed with \*(Aq!\*(Aq, the command is executed if \fIreturncode\fP does not match the value returned by the conditional command. The \fBTestRc\fP command can only be used inside functions. If the \fIcommand\fP is another conditional command, the previous return code is replaced by the new one. Example: .sp .if n .RS 4 .nf .fam C AddToFunc ToggleXterm + I All (my_xtermwindow) Close + I TestRc (NoMatch) Exec xterm \-T my_xtermwindow .fam .fi .if n .RE .RE .sp \fBThisWindow\fP [(\fIconditions\fP)] command .RS 4 \fBThisWindow\fP executes the specified \fIcommand\fP in the context of the current operand window. If there is no operand window (it is invoked in the root window), the command is ignored. \fBThisWindow\fP is never interactive. The command is executed only if the given \fIconditions\fP are met. It returns \-1 if used outside a window context. See \fBConditions\fP section for a list of conditions. .sp This command implies the conditions \fICirculateHit\fP, \fICirculateHitIcon\fP and \fICirculateHitShaded\fP. They can be turned off by specifying "!CirculateHit" etc. explicitly. .RE .sp \fBWindowId\fP [\fIid\fP] [(\fIconditions\fP)] | [root] \fIcommand\fP .RS 4 The \fBWindowId\fP command looks for a specific window \fIid\fP and runs the specified \fIcommand\fP on it. The second form of syntax retrieves the window id of the root window. The window indicated by \fIid\fP may belong to a window not managed by fvwm. Although most commands can not operate on such windows, there are some exceptions, for example the \fBWarpToWindow\fP command. Returns \-1 if no window with the given id exists. See \fBConditions\fP section for a list of conditions. .sp This command implies the conditions \fICirculateHit\fP, \fICirculateHitIcon\fP and \fICirculateHitShaded\fP. They can be turned off by specifying \fI!CirculateHit\fP etc. explicitly. .sp Examples: .sp .if n .RS 4 .nf .fam C WindowId 0x34567890 Raise WindowId root 1 WarpToWindow 50 50 WindowId $0 (Silly_Popup) Delete .fam .fi .if n .RE .sp In the past this command was mostly useful for functions used with the \fBWindowList\fP command, or for selective processing of \fBFvwmEvent\fP calls (as in the last example), but currently these handler functions are called within a window context, so this command is not really needed in these cases. Still it may be useful if, for example, the window id should be stored in the environment variable for a further proceeding. .RE .sp .if n .RS 4 .nf .fam C Pick SetEnv BOOKMARKED_WINDOW $[w.id] WindowId $[BOOKMARKED_WINDOW] WarpToWindow .fam .fi .if n .RE .RE .sp \fBConditions\fP .RS 4 The \fIconditions\fP that may be given as an argument to any conditional command are a list of keywords separated by commas, enclosed in parentheses. Unless stated otherwise, conditional commands accept all the conditions listed below. Note that earlier versions of fvwm required the conditions to be separated by whitespace instead of commas and enclosed in brackets instead of parentheses (this is still supported for backward compatibility). .sp In addition, the \fIconditions\fP may include one or more window names to match to. If more than one window name is given, all of them must match. The window name, icon name, class, and resource are considered when attempting to find a match. Each name may include the wildcards \*(Aq*\*(Aq and \*(Aq?\*(Aq, and may consist of two or more alternatives, separated by the character \*(Aq|\*(Aq, which acts as an OR operator. (If OR operators are used, they must not be separated by spaces from the names.) Each window name can begin with \*(Aq!\*(Aq, which prevents \fIcommand\fP if any of the window name, icon name, class or resource match. However, \*(Aq!\*(Aq must not be applied to individual names in a group separated by OR operators; it may only be applied to the beginning of the group, and then it operates on the whole group. .sp Examples: .sp .if n .RS 4 .nf .fam C Next ("Netscape|konqueror|Mozilla*") WarpToWindow 99 90 .fam .fi .if n .RE .sp This goes to the next web browser window, no matter which of the three named web browsers is being used. .sp .if n .RS 4 .nf .fam C Next ("Mozilla*", "Bookmark*") WarpToWindow 99 90 .fam .fi .if n .RE .sp This goes to Mozilla\(cqs bookmark manager window, ignoring other Mozilla windows and other browsers\*(Aq bookmark windows. .sp .if n .RS 4 .nf .fam C All ("XTerm|rxvt", !console) Iconify .fam .fi .if n .RE .sp This iconifies all the xterm and rxvt windows on the current page, except that the one named "console" (with the \-name option to xterm) is excluded. .sp .if n .RS 4 .nf .fam C Next (!"FvwmPager|FvwmForm*|FvwmButtons") Raise Next (!FvwmPager, !FvwmForm*, !FvwmButtons) Raise .fam .fi .if n .RE .sp These two commands are equivalent; either one raises the next window which is not one of the named fvwm modules. .sp Any condition can be negated by using a an exclamation mark (\*(Aq!\*(Aq) directly in front of its name. .sp \fIAcceptsFocus\fP, \fIAnyScreen\fP, \fICirculateHit\fP, \fICirculateHitIcon\fP, \fICirculateHitShaded\fP, \fIClosable\fP, \fICurrentDesk\fP, \fICurrentGlobalPage\fP, \fICurrentGlobalPageAnyDesk\fP, \fICurrentPage\fP, \fICurrentPageAnyDesk\fP, \fICurrentScreen\fP, \fIDesk\fP, \fIFixedPosition\fP, \fIFixedSize\fP, \fIFocused\fP, \fIHasBorders\fP, \fIHasHandles\fP, \fIHasPointer\fP, \fIHasTitle\fP, \fITitleAtTop\fP, \fITitleAtBottom\fP, \fITitleAtLeft\fP, \fITitleAtRight\fP, \fIIconic\fP, \fIIconifiable\fP, \fILayer [n]\fP, \fIMaximizable\fP, \fIMaximized\fP, \fIOverlapped\fP, \fIPlacedByButton n\fP, \fIPlacedByButton3\fP, \fIPlacedByFvwm\fP, \fIRaised\fP, \fIShaded\fP, \fIState n\fP, \fISticky\fP, \fIStickyAcrossDesks\fP, \fIStickyAcrossPages\fP, \fIStickyIcon\fP, \fIStickyAcrossDesksIcon\fP, \fIStickyAcrossPagesIcon\fP, \fITransient\fP, \fIVisible\fP. .sp The \fIAcceptsFocus\fP condition excludes all windows that do not want the input focus (the application has set the "Input hints" for the window to False) and do not use the \fILenience\fP option of the \fBStyle\fP command. Also, all windows using the \fINeverFocus\fP style are ignored. Note: \fI!Lenience\fP is equivalent to the deprecated option \fINoLenience\fP. .sp With the \fIAnyScreen\fP condition used together with any of the \fICurrent.\|.\|.\fP conditions, windows that do not intersect the screen containing the mouse pointer are considered for a match too. For example: .sp .if n .RS 4 .nf .fam C # Focus next window on current page, # regardless of screen Next (CurrentPage, AnyScreen) Focus .fam .fi .if n .RE .sp The \fICirculateHit\fP and \fICirculateHitIcon\fP options override the \fICirculateSkip\fP and \fICirculateSkipIcon\fP \fBStyle\fP attributes for normal or iconic windows. The \fICirculateHitShaded\fP option overrides the \fICirculateSkipShaded\fP \fBStyle.\fP All three options are turned on by default for the \fBCurrent\fP command. They can be turned off by specifying \fI!CirculateHit\fP etc. explicitly. Note: Do not confuse these conditions with the style options of the same name. Specifically, .sp .if n .RS 4 .nf .fam C Style foo CirculateSkip Next (foo, CirculateHit) ... .fam .fi .if n .RE .sp is not the same as .sp .if n .RS 4 .nf .fam C Style foo CirculateHit ... Next (foo) .fam .fi .if n .RE .sp The prior selects windows with the name foo only in the Next command. In the second example, these windows are always matched in all conditional commands. .sp The \fIClosable\fP condition matches only windows that are allowed to be closed. .sp The \fICurrentDesk\fP condition matches only windows that are on the current desk. .sp The \fICurrentGlobalPage\fP condition matches only windows that are on the current page of the current desk, regardless of which screen the window is on. This condition implicitly activates the \fICurrentDesk\fP condition. .sp The \fICurrentGlobalPageAnyDesk\fP condition matches only windows that are on the current page of any desk, regardless of RandR screen . .sp The \fICurrentPage\fP condition matches only windows that are on the current page of the current desk. This condition implicitly activates the \fICurrentDesk\fP condition. .sp The \fICurrentPageAnyDesk\fP and \fICurrentScreen\fP conditions matches only windows that are on the current page of any desk. .sp The \fIScreen [name]\fP condition matches only windows which are on the specified screen. .sp The \fIDesk [n]\fP condition matches only windows which are on the specified desk. .sp The \fIFixedPosition\fP condition excludes all windows that do not have a fixed position, either set through WM hints or the \fBStyle\fP option \fIFixedPosition\fP. Example: .sp .if n .RS 4 .nf .fam C DestroyFunc ToggleFixedGeometry AddToFunc\& ToggleFixedGeometry + I Pick (FixedPosition) \(rs WindowStyle VariablePosition, VariableSize + I TestRc (NoMatch) WindowStyle FixedPosition, FixedSize .fam .fi .if n .RE .sp The \fIFixedSize\fP condition excludes all windows that do not have a fixed size, either set through WM hints or the \fBStyle\fP option \fIFixedSize\fP. .sp The \fIFocused\fP matches on the window that currently has the keyboard focus. This is not useful for the \fBCurrent\fP command but can be used with the other conditional commands. .sp The \fIHasBorders\fP condition excludes all windows that do not have borders. .sp The \fIHasHandles\fP condition excludes all windows that do not have resize handles. .sp The \fIHasPointer\fP condition excludes all windows that do not contain the pointer. .sp The \fIHasTitle\fP condition excludes all windows that do not have a titlebar. .sp The \fITitleAtTop\fP, \fITitleAtBottom\fP, \fITitleAtLeft\fP, \fITitleAtRight\fP conditions test for the titlebar at that window location. .sp The \fIIconic\fP condition matches only iconic windows. .sp The \fIIconifiable\fP condition matches only windows that are allowed to be iconified. .sp The \fILayer [n]\fP condition matches only windows on the specified layer. The optional argument of the \fILayer\fP condition defaults to the layer of the focused window. The negation \fI!Layer\fP switches off the \fILayer\fP condition. .sp The \fIMaximizable\fP condition matches only windows that are allowed to be maximized. .sp The \fIMaximized\fP condition matches only maximized windows. .sp The \fIOverlapped\fP condition matches only windows that are overlapped by other windows on the same layer (or unmanaged windows if the option \fIRaiseOverUnmanaged\fP of the \fBBugOpts\fP command is used). Note that this condition can be slow if you have many windows or if RaiseOverUnmanaged is used and the connection to the X server is slow. .sp The \fIPlacedByButton n\fP condition is fulfilled if the last interactive motion of the window (with the \fBMove\fP command or as \fIManualPlacement\fP) was ended by pressing mouse button \fIn\fP. Example: .sp .if n .RS 4 .nf .fam C Mouse\& 1 T\& A\& Function MoveWindow DestroyFunc MoveWindow AddToFunc MoveWindow + C Move + C ThisWindow (PlacedByButton 5) WindowShade off + C TestRc (Match) Maximize on 0 100 + C ThisWindow (PlacedByButton 4) WindowShade on .fam .fi .if n .RE .sp The \fIPlacedByButton3\fP condition has the same meaning as \fIPlacedByButton\fP 3. It remains only for backward compatibility. .sp The \fIPlacedByFvwm\fP condition excludes all windows that have been placed manually or by using the user or program position hint. .sp The \fIRaised\fP conditions matches only windows that are fully visible on the current viewport and not overlapped by any other window. .sp The \fIShaded\fP conditions matches only shaded windows (see \fBWindowShade\fP command). .sp The \fIState n\fP or \fI!State n\fP conditions match only windows with the specified integer state set (or unset). See the \fBState\fP command for details. The argument may range from 0 to 31. .sp The \fISticky\fP, \fIStickyAcrossDesks\fP and \fIStickyAcrossPages\fP match only windows that are currently sticky, sticky across all desks or sticky across all pages. Please refer to the \fBStyle\fP options with the same name and the commands \fBStick\fP, \fBStickAcrossDesks\fP and \fBStickAcrossPages\fP for details. .sp The \fIStickyIcon\fP, \fIStickyAcrossDesksIcon\fP and \fIStickyAcrossPagesIcon\fP match only windows that become sticky, sticky across all desks or sticky across all pages when they are in iconified state. .sp The \fITransient\fP condition matches only windows that have the "transient" property set by the application. This it usually the case for application popup menus and dialogs. The \fBFvwmIdent\fP module can be used to find out whether a specific window is transient. .sp The \fIVisible\fP condition matches only windows that are at least partially visible on the current viewport and not completely overlapped by other windows. .RE .SS "Module Commands" .sp Fvwm maintains a database of module configuration lines in a form .sp .if n .RS 4 .nf .fam C *: .fam .fi .if n .RE .sp where \fI\fP is either a real module name or an alias. .sp This database is initially filled from config file (or from output of \fB\-cmd\fP config command), and can be later modified either by user (via \fBFvwmCommand\fP) or by modules. .sp When modules are run, they read appropriate portion of database. (The concept of this database is similar to one used in X resource database). .sp Commands for manipulating module configuration database are described below. .sp \fB*\fP \fImodule_config_line\fP .RS 4 Defines a module configuration. \fImodule_config_line\fP consists of a module name (or a module alias) and a module resource line. The new syntax allows a delimiter, a colon and optional spaces, between the module name and the rest of the line, this is recommended to avoid conflicts. .sp .if n .RS 4 .nf .fam C *FvwmPager: WindowBorderWidth 1 *FvwmButtons\-TopRight: Geometry 100x100\-0+0 *FvwmButtons\-Bottom: Geometry +0\-0 .fam .fi .if n .RE .RE .sp \fBDestroyModuleConfig\fP \fImodule_config\fP .RS 4 Deletes module configuration entries, so that new configuration lines may be entered instead. This also sometimes the only way to turn back some module settings, previously defined. This changes the way a module runs during a fvwm session without restarting. Wildcards can be used for portions of the name as well. .sp The new non\-conflicting syntax allows a delimiter, a colon and optional spaces between the module name and the rest of the line. In this case a module name (or alias) can\(cqt have wildcards. .sp .if n .RS 4 .nf .fam C DestroyModuleConfig FvwmButtons* DestroyModuleConfig FvwmForm: Fore DestroyModuleConfig FvwmIconMan: Tips* .fam .fi .if n .RE .RE .sp \fBKillModule\fP \fImodulename\fP [\fImodulealias\fP] .RS 4 Causes the module which was invoked with name \fImodulename\fP to be killed. The name may include wildcards. If \fImodulealias\fP is given, only modules started with the given alias are killed. .sp .if n .RS 4 .nf .fam C # kill all pagers KillModule FvwmPager Module FvwmEvent SoundEvent KillModule FvwmEvent SoundEvent .fam .fi .if n .RE .RE .sp \fBModule\fP \fImodulename\fP [\fImoduleparams\fP] .RS 4 Specifies a module with its optional parameters which should be spawned. Currently several modules, including \fBFvwmButtons\fP, \fBFvwmEvent\fP, \fBFvwmForm\fP, \fBFvwmPager\fP, \fBFvwmScript\fP support aliases. Aliases are useful if more than one instance of the module should be spawned. Aliases may be configured separately using \fB*\fP syntax. To start a module \fBFvwmForm\fP using an alias \fIMyForm\fP, the following syntax may be used: .sp .if n .RS 4 .nf .fam C Module FvwmForm MyForm .fam .fi .if n .RE .sp At the current time the available modules (included with fvwm) are \fBFvwmAnimate\fP (produces animation effects when a window is iconified or de\-iconified), \fBFvwmAuto\fP (an auto raise module), \fBFvwmBacker\fP (to change the background when you change desktops), \fBFvwmBanner\fP (to display a spiffy XBM, XPM, PNG or SVG), \fBFvwmButtons\fP (brings up a customizable tool bar), \fBFvwmCommandS\fP (a command server to use with shell\(cqs FvwmCommand client), \fBFvwmConsole\fP (to execute fvwm commands directly), \fBFvwmEvent\fP (trigger various actions by events), \fBFvwmForm\fP (to bring up dialogs), \fBFvwmIconMan\fP (a flexible icon manager), \fBFvwmIdent\fP (to get window info), \fBFvwmPager\fP (a mini version of the desktop), \fBFvwmPerl\fP (a Perl manipulator and preprocessor), \fBFvwmProxy\fP (to locate and control obscured windows by using small proxy windows), \fBFvwmRearrange\fP (to rearrange windows), \fBFvwmScript\fP (another powerful dialog toolkit), These modules have their own man pages. There may be other modules out on there as well. .sp Modules can be short lived transient programs or, like \fBFvwmButtons\fP , can remain for the duration of the X session. Modules are terminated by the window manager prior to restarts and quits, if possible. See the introductory section on modules. The keyword \fBModule\fP may be omitted if \fImodulename\fP is distinct from all fvwm commands. .RE .sp \fBModuleListenOnly\fP \fImodulename\fP [\fImoduleparams\fP] .RS 4 This command works like the \fBModule\fP command, but fvwm never sends any messages to the module. This may be handy to write a module as a shell script that is triggered by external events without the burden to answer packets sent by fvwm. For example, a module written as a shell script may change labels of the \fBFvwmButtons\fP module to implement a simple clock. .RE .sp \fBModulePath\fP \fIpath\fP .RS 4 Specifies a colon separated list of directories in which to search for modules. To find a module, fvwm searches each directory in turn and uses the first file found. Directory names on the list do not need trailing slashes. .sp The \fBModulePath\fP may contain environment variables such as \fI$HOME\fP (or \fI${HOME}\fP). Further, a \*(Aq+\*(Aq in the \fIpath\fP is expanded to the previous value of the \fIpath\fP, allowing easy appending or prepending to the \fIpath\fP. .sp For example: .sp .if n .RS 4 .nf .fam C ModulePath ${HOME}/lib/fvwm/modules:+ .fam .fi .if n .RE .sp The directory containing the standard modules is available via the environment variable \fI$FVWM_MODULEDIR\fP. .RE .sp \fBModuleSynchronous\fP [Expect \fIstring\fP] [Timeout \fIsecs\fP] \fImodulename\fP .RS 4 The \fBModuleSynchronous\fP command is very similar to \fBModule\fP. Fvwm stops processing any commands and user input until the module sends a string beginning with "NOP FINISHED STARTUP" back to fvwm. If the optional \fITimeout\fP is given fvwm gives up if the module sent no input back to fvwm for \fIsecs\fP seconds. If the \fIExpect\fP option is given, fvwm waits for the given \fIstring\fP instead. \fBModuleSynchronous\fP should only be used during fvwm startup to enforce the order in which modules are started. This command is intended for use with the (currently hypothetical) module that should be in place before other modules are started. .sp \fBWarning\fP: It is quite easy to hang fvwm with this command, even if a timeout is given. Be extra careful choosing the string to wait for. Although all modules in the fvwm distribution send back the "NOP FINISHED STARTUP" string once they have properly started up, this may not be the case for third party modules. Moreover, you can try to escape from a locked \fBModuleSynchronous\fP command by using the key sequence .sp (see the \fBEscapeFunc\fP). .RE .sp \fBModuleTimeout\fP \fItimeout\fP .RS 4 Specifies how many seconds fvwm waits for a module to respond. If the module does not respond within the time limit then fvwm kills it. \fItimeout\fP must be greater than zero, or it is reset to the default value of 30 seconds. .RE .sp \fBSendToModule\fP \fImodulename\fP \fIstring\fP .RS 4 Sends an arbitrary string (no quotes required) to all modules, whose alias or name matching \fImodulename\fP, which may contain wildcards. This only makes sense if the module is set up to understand and deal with these strings though. Can be used for module to module communication, or implementation of more complex commands in modules. .RE .SS "Session Management Commands" .sp \fBQuit\fP .RS 4 Exits fvwm, generally causing X to exit too. .RE .sp \fBRestart\fP [\fIwindow_manager\fP [\fIparams\fP]] .RS 4 Causes fvwm to restart itself if \fIwindow_manager\fP is left blank, or to switch to an alternate window manager (or other fvwm version) if \fIwindow_manager\fP is specified. If the window manager is not in your default search path, then you should use the full path name for \fIwindow_manager\fP. .sp This command should not have a trailing ampersand. The command can have optional parameters with simple shell\-like syntax. You can use \fI~\fP (is expanded to the user\(cqs home directory) and environmental variables \fI$VAR\fP or \fI${VAR}\fP. Here are several examples: .sp .if n .RS 4 .nf .fam C Key F1 R N Restart Key F1 R N Restart fvwm1 \-f .fvwmrc Key F1 R N Restart xterm \-n \*(Aq"X console"\*(Aq \-T \(rs"X\(rs console\(rs" \-e fvwm .fam .fi .if n .RE .sp Note, currently with multi headed displays, restart of fvwms on different screens works independently. .RE .sp \fBRestart\fP \fB\-\-pass\-args\fP \fIwindow_manager\fP .RS 4 The same as \fBRestart\fP without parameters but the name for the current window manager is replaced with the specified \fIwindow_manager\fP and original arguments are preserved. .RE .sp \fBRestart\fP \fB\-\-dont\-preserve\-state\fP [\fIother\-params\fP] .RS 4 The same as .sp .if n .RS 4 .nf .fam C Restart [other\-params] .fam .fi .if n .RE .sp but it does not save any window states over the restart. .sp Without this option, \fBRestart\fP preserves most per\-window state by writing it to a file named \fI.fs\-restart\-$HOSTDISPLAY\fP in the user\(cqs home directory. .RE .sp \fBSaveSession\fP .RS 4 Causes a session manager (if any) to save the session. This command does not work for xsm, it seems that xsm does not implement this functionality. Use Unix signals to manage xsm remotely. .RE .sp \fBSaveQuitSession\fP .RS 4 Causes a session manager (if any) to save and then shutdown the session. This command does not work for xsm, it seems that xsm does not implement this functionality. Use Unix signals to manage xsm remotely. .RE .SS "Colorsets" .sp Colorsets are a powerful method to control colors. Colorsets create appearance resources that are shared by fvwm and its modules. When a colorset is modified all parts of fvwm react to that change. A colorset includes a foreground color, background color, shadow and highlight color (often based on the background color), background face (this includes images and all kinds of gradients). There is a way to render background face and specify other color operations. .sp \fBColorset\fP \fInum\fP [\fIoptions\fP] .RS 4 Creates or modifies colorset \fInum\fP. Colorsets are identified by this number. The number can start at zero and can be a very large number. .sp Warning: The highest colorset number used determines memory consumption. Thus, if you define \*(AqColorset 100000\*(Aq, the memory for 100001 colorsets is used. Keep your colorset numbers as small as possible. .sp By convention, colorsets are numbered like this: .sp .if n .RS 4 .nf .fam C # 0 = Default colors # 1 = Inactive windows # 2 = Active windows # 3 = Inactive menu entry and menu background # 4 = Active menu entry # 5 = greyed out menu entry (only bg used) # 6 = module foreground and background # 7 = hilight colors .fam .fi .if n .RE .sp If you need to have more colors and do not want to reinvent the wheel, you may use the convention used in fvwm\-themes, it defines the meaning of the first 40 colorsets for nearly all purposes: .sp .URL "http://fvwm\-themes.sourceforge.net/doc/colorsets" "" "" .sp Each colorset has four colors, an optional pixmap and an optional shape mask. The four colors are used by modules as the foreground, background, highlight and shadow colors. When a colorset is created it defaults to a foreground of black and background of gray. The background and foreground are marked as "average" and "contrast" (see later) so that just specifying a pixmap or gradient gives sensible results. .sp \fIoptions\fP is a comma separated list containing some of the keywords: fg, Fore, Foreground, bg, Back, Background, hi, Hilite, Hilight, sh, Shade, Shadow, fgsh, Pixmap, TiledPixmap, AspectPixmap, Transparent, RootTransparent, Shape, TiledShape, AspectShape, NoShape, ?Gradient, Tint, fgTint, bgTint, Alpha, fgAlpha, Dither, NoDither, IconTint, IconAlpha, Plain. .sp \fIfg\fP, \fIFore\fP and \fIForeground\fP take a color name as an argument and set the foreground color. The special name \fIContrast\fP may be used to select a color that contrasts well with the background color. To reset the foreground color to the default value you can simply omit the color name. .sp \fIbg\fP, \fIBack\fP and \fIBackground\fP take a color name as an argument and set the background color. It also sets the highlight and shadow colors to values that give a 3d effect unless these have been explicitly set with the options below. The special name \fIAverage\fP may be used to select a color that is the average color of the pixmap. If the pixmap is tinted with the \fITint\fP option, the tint is not taken in account in the computation of the average color. You should use the \fIbgTint\fP option to get the "real" average color. The background color is reset to the default value if the color name is omitted. .sp \fIhi\fP, \fIHilite\fP and \fIHilight\fP take a color name as an argument and set the highlight color. If the highlight color is not explicitly set, the default is to calculate it from the background color. To switch back to the default behavior the color name can be omitted. .sp \fIsh\fP, \fIShade\fP and \fIShadow\fP take a color name as an argument and set the shadow color. If the shadow color is not explicitly set, the default is to calculate it from the background color. To switch back to the default behavior the color name can be omitted. .sp \fIfgsh\fP takes a color name as an argument and sets the color used by the shadowing font effect. See the \fBFont Shadow Effects\fP section of the fvwm man page. By default this color is computed from the foreground and background colors. To switch back to the default the color name can be omitted. .sp \fIPixmap\fP, \fITiledPixmap\fP and \fIAspectPixmap\fP take a file name as an argument, search the \fBImagePath\fP and use it as the background pixmap. Any transparent parts are filled with the background color. Not specifying a file name removes any existing image from the colorset. \fITiledPixmap\fP produces repeated copies of the image with no scaling, \fIPixmap\fP causes the image to be stretched to fit whatever object the colorset is applied to and \fIAspectPixmap\fP stretches to fit but retains the image aspect ratio. .sp \fITransparent\fP creates a transparent background pixmap. The pixmap is used as a window background to achieve root transparency. For this you should use the \fIParentalRelativity\fP option to the \fBStyle\fP command. A subsequent root background change may be detected or not, this depends on the program used to set the background. If you use \fBfvwm\-root\fP, \fBxsetbg\fP (xli), \fBFvwmBacker\fP with solid or colorset colors or a recent version of \fBEsetroot\fP (>= 9.2) a background change is detected. If background changes are not detected (e.g., if you use \fBxv\fP or \fBxsetroot\fP) you can force detection by using the \fB\-d\fP option of fvwm\-root: .sp .if n .RS 4 .nf .fam C xv \-root \-quit mybg.png; fvwm\-root \-d .fam .fi .if n .RE .sp Due to the way X implements transparency no guarantees can be made that the desired effect can be achieved. The application may even crash. If you experience any problems with this option, do not use it. .sp Using outline move and resize (see the \fBOpaqueMoveSize\fP command and the \fIResizeOpaque\fP \fBStyle\fP option) as well as setting the \fIWindowShadeShrinks\fP style may help. The transparency achieved with \fITransparent\fP depends on whether the colorset is applied to the foreground or the background of a window. In the second case the transparency is relative to the parent window of the window on which the colorset is defined. For example: .sp .if n .RS 4 .nf .fam C Colorset 12 VGradient 200 grey30 grey60 Colorset 17 Transparent *FvwmIconMan: Colorset 12 *FvwmIconMan: PlainColorset 17 .fam .fi .if n .RE .sp gives an IconMan with a vertical grey gradient background and the buttons use the background (by transparency). To obtain a (root) transparent IconMan: .sp .if n .RS 4 .nf .fam C Colorset 12 Transparent Colorset 17 Transparent Colorset 18 Transparent Colorset 19 Transparent *FvwmIconMan: Colorset 12 *FvwmIconMan: PlainColorset 17 *FvwmIconMan: FocusColorset 18 *FvwmIconMan: IconColorset\& 19 .fam .fi .if n .RE .sp The Colorset IconMan option defines the IconMan window background, but the PlainColorset and the FocusColorset are drawn on the foreground. So, the transparency of the IconMan buttons is achieved by drawing nothing. Now if this IconMan is swallowed in an FvwmButtons as: .sp .if n .RS 4 .nf .fam C FvwmButtons:(Colorset 10, Swallow "FvwmIconMan" \*(AqFvwmIconMan\*(Aq) .fam .fi .if n .RE .sp then, \fBFvwmIconMan\fP becomes a child of \fBFvwmButtons\fP and it is transparent relative to \fBFvwmButtons\fP. So, in this case \fBFvwmIconMan\fP uses Colorset 10 as background. If you want root transparency use the \fIRootTransparent\fP option. \fBFvwmButtons\fP \fBFvwmIconMan\fP, and \fBFvwmIdent\fP, are relatively simple. There is one main colorset option which defines the background of the window and the other colorsets (if any) are drawn on the foreground. The case of \fBFvwmProxy\fP is simpler, the two colorsets refer to the window backgrounds. \fBFvwmPager\fP is more complicated as almost everything in the pager are windows with some parental relations (the mini windows are the child and the desktops are the parents and all this is complicated by the hilighted page). So, the colorsets apply to the background of these windows. You should experiment. For \fBFvwmForm\fP and \fBFvwmScript\fP the situation is similar. There is a main window (a child of the root window) which corresponds to the main colorset and most of the widgets are windows which are children of the main window. \fITint\fP may work or not with the \fITransparent\fP option. When the colorset is drawn on the foreground \fITint\fP should work. In some cases, tinting may be very slow. Tinting may work with fvwm menu (without animation). Tinting may work better if your X server has backing store enabled (try xdpyinfo to see if this the case). There is a chance that the backing store support of your X server does not work well with the terrible hack used to Tint the ParentRelative Pixmap. So, to get tinted root transparency it is more safe to use the \fIRootTransparent\fP option. .sp \fIRootTransparent\fP [ \fIbuffer\fP ] creates a root transparent background. To make this option work, you must use an \fBEsetroot\fP compatible program, fvwm\-root with the \-\-retain\-pixmap option or \fBFvwmBacker\fP with the RetainPixmap option (and colorset or solid backgrounds). The \fIbuffer\fP keyword is useful only when the \fITint\fP option is used too. This speeds up creation of windows which use the colorset (useful for fvwm menus) at the cost of memory usage. It also speeds up opaque move and resize which can be unacceptably slow without \fIbuffer\fP. However, this option may add a lot of memory to your X server (depending on the size of the image used to set the background). In summary, using outline move and resize for modules which use such a colorset may be a good idea. .sp \fIShape\fP, \fITiledShape\fP and \fIAspectShape\fP take a file name as an argument, search the \fBImagePath\fP and use it as the shape bitmap. \fITiledShape\fP produces repeated copies of the bitmap with no scaling, \fIShape\fP causes the bitmap to be stretched to fit whatever object the colorset is applied to and \fIAspectShape\fP stretches to fit but retains the bitmap aspect ratio. If the file is a pixmap in xpm format the shape mask (all opaque pixels) of the pixmap is used. For png and svg images, the shape mask is equivalent to all not completely transparent pixels (alpha > 0). .sp \fBWarning\fP Due to the way X11 implements shapes you cannot take back making windows shaped. You may have to restart fvwm or the shaped application. .sp \fI?Gradient .\|.\|.\fP creates a pixmap and stretches it to fit the window. \fI?Gradient\fP may be one of \fIHGradient\fP, \fIVGradient\fP, \fIDGradient\fP, \fIBGradient\fP, \fISGradient\fP, \fICGradient\fP, \fIRGradient\fP or \fIYGradient\fP. The gradient types are as follows: H is horizontal; V is vertical; D is diagonal from top left to bottom right; B is a backwards diagonal from bottom left to top right; S is concentric squares; C is concentric circles; R is a radar like pattern and Y is a Yin Yang style (but without the dots). Please refer to the \fBColor Gradients\fP section for the syntax of gradients. .sp \fITint\fP takes 2 arguments, a color and a percentage between 0 and 100. It causes the image defined using \fI?Pixmap\fP or \fI?Gradient\fP to be tinted with the specified color using the percentage. If the image is transparent \fITint\fP tints only the image part. Unfortunately, a colorset background specified using the \fITransparent\fP option can give strange results. See the \fITransparent\fP option for details. With no arguments this option removes the tint. .sp \fIfgTint\fP takes 2 arguments, a color and a percentage between 0 and 100. It causes the color defined using \fIfg\fP to be tinted with the specified color using the percentage. With no arguments this option removes the tint. .sp \fIbgTint\fP takes 2 arguments, a color and a percentage between 0 and 100. It causes the color defined using \fIbg\fP to be tinted with the specified color using the percentage. If the \fIsh\fP and \fIhi\fP colors are not specified, they are recomputed from the tinted bg color. With no arguments this option removes the tint. .sp \fIAlpha\fP takes a percentage between 0 and 100 as an argument. It causes fvwm to merge the image defined using \fI?Pixmap\fP or \fI?Gradient\fP with the \fIbg\fP color using the percentage. If the percentage is 0 the image is hidden and if it is 100 the image is displayed as usual (no merge). The default is 100 and it is restored if no argument is given. .sp \fIfgAlpha\fP takes a percentage between 0 and 100 as an argument. It causes fvwm to merge the text and the colorset background using the percentage. If the percentage is 0 the text is hidden and if it is 100 the text is displayed as usual (no merge). This option has an effect only with fonts loaded by Xft, see the \fBFont Names and Font Loading\fP section. The default is 100 and it is restored if no argument is given. .sp \fIDither\fP causes fvwm to dither the image defined using \fI?Pixmap\fP or \fI?Gradient.\fP This is useful only with displays with depth less than or equal to 16 (i.e., on displays which can only display less than 65537 colors at once). The dithering effect lets you simulate having more colors available that you actually have. \fINoDither\fP causes fvwm to do not dither the images. \fIDither\fP is the default if the depth is less than or equal to 8 (a screen with 256 colors or less). In depth 15 (32768 colors) and 16 (65536 colors), the default is \fINoDither\fP, however this effect can be useful with images which contain a lot of close colors. For example a fine gradient looks more smooth. .sp \fIIconTint\fP takes 2 arguments, a color and a percentage between 0 and 100. It causes fvwm or a module to tint the "icons" which are rendered into the colorset background with the specified color using a percentage. Here "icons" means, fvwm Icons, fvwm menu icons, MiniIcons which represent applications in various modules, images loaded by modules (e.g., images specified by the \fIIcon\fP \fBFvwmButtons\fP button option) .\|.\|.etc. With no arguments this option removes the icon tint. .sp \fIIconAlpha\fP takes a percentage between 0 and 100 as an argument. It causes fvwm to merge the "icons" which are rendered into the colorset background using this percentage. The default is 100 and it is restored if no argument is given. .sp \fINote\fP: It is equivalent to use "Tint a_color rate" and "Alpha a" if a = 100 and the bg color is a_color. This equivalence does not hold for IconAlpha and IconTint as the background can be an image or a gradient (and not a uniform color background). However, in some cases you can achieve (almost) the same effect by using IconTint in the place of IconAlpha. This is preferable as, in general, IconAlpha generates more redrawing than IconTint. .sp \fINoShape\fP removes the shape mask from the colorset while \fIPlain\fP removes the background pixmap or gradient. .sp Examples .sp .if n .RS 4 .nf .fam C Colorset 3 fg tan, bg navy .fam .fi .if n .RE .sp If necessary this creates colorsets 0, 1, 2 and 3 and then changes colorset 3 to have a foreground of tan, a background of navy. .sp .if n .RS 4 .nf .fam C Colorset 3 bg "navy blue" .fam .fi .if n .RE .sp changes the background color of colorset 3 to navy blue. The foreground and pixmap are unchanged. .sp .if n .RS 4 .nf .fam C Colorset 3 AspectPixmap large_murky_dungeon.xpm .fam .fi .if n .RE .sp causes depression. .sp .if n .RS 4 .nf .fam C Colorset 3 bg Average .fam .fi .if n .RE .sp Sets the background color and the relief colors to match the background pixmap. This is the default setting but it must be used if a background color was specified and is now not required. .sp .if n .RS 4 .nf .fam C Colorset 3 YGradient 200 3 blue 1000 navy 1 blue 1000 navy .fam .fi .if n .RE .sp Adds a Yin Yang gradient background pixmap to colorset 3. If the background is set to average it is recomputed along with the foreground if that is set to contrast. .sp .if n .RS 4 .nf .fam C #!/bin/sh FvwmCommand "Colorset 7 fg navy, bg gray" while true do FvwmCommand "Colorset 7 fg gray" sleep 1 FvwmCommand "Colorset 7 fg navy" sleep 1 done .fam .fi .if n .RE .sp Makes colorset 7 blink. .sp The color names used in colorsets are saved as fvwm variables which can be substituted in any fvwm command. For example: .sp .if n .RS 4 .nf .fam C AddToFunc InitFunction + I Exec exec xterm \-fg $[fg.cs0] \-bg $[bg.cs0] .fam .fi .if n .RE .sp Where $[fg.cs0] is the foreground color of colorset zero. Please refer to the \fBCommand Expansion\fP section for more information. .RE .sp \fBCleanupColorsets\fP .RS 4 Resets a definition of all colorsets. .RE .sp \fBColor Gradients\fP .RS 4 A color gradient is a background that changes its color gradually from one hue to a different one. Color gradients can be used by various commands and modules of fvwm. There are eight types of gradients: \fBHGradient\fP is a horizontal gradient, \fBVGradient\fP is vertical, \fBDGradient\fP is diagonal from top left to bottom right, \fBBGradient\fP is backwards diagonal from bottom left to top right, \fBSGradient\fP is concentric squares, \fBCGradient\fP is concentric circles, \fBRGradient\fP is a radar like pattern and \fBYGradient\fP is a Yin Yang style (but without the dots). .sp The color gradient syntax has two forms: .sp \fB?Gradient\fP \fIcolors\fP \fIstart\-color\fP \fIend\-color\fP .sp This form specifies a linear gradient. The arguments denote the total number of \fIcolors\fP to allocate (between 2 and 1000), the initial color and the final color. .sp Example: .sp .if n .RS 4 .nf .fam C TitleStyle VGradient 20 rgb:b8/ce/bc rgb:5b/85/d0 .fam .fi .if n .RE .sp \fB?Gradient\fP \fIcolors\fP \fIsegments\fP \fIcolor\fP \fIlength\fP \fIcolor\fP [\fIlength\fP \fIcolor\fP] .\|.\|. .sp The second form specifies a nonlinear gradient. The arguments are: the total number of \fIcolors\fP to allocate (between 2 and 1000), then the number of \fIsegments\fP. For each segment, specify the starting \fIcolor\fP, a relative \fIlength\fP, then the ending color. Each subsequent segment begins with the second color of the last segment. The lengths may be any non\-negative integers. The length of one segment divided by the sum of all segments lengths is the fraction of the colors that are used for the segment. .sp Examples: .sp .if n .RS 4 .nf .fam C Colorset 0 DGradient 128 2 lightgrey 50 blue 50 white # 20% gradient from red to blue, # 30% from blue to black, # 50% from black to grey Colorset 0 DGradient 100 3 Red 20 Blue 30 Black 50 Grey # 50% from blue to green, then # 50% from yellow to red Colorset 0 HGradient 128 3 Blue 1000 Green 1 Yellow 1000 Red .fam .fi .if n .RE .sp Note: Some gradient styles may be slow and consume huge amounts of memory, so if you encounter performance problems with them you may be better off by not using them. To improve performance you can try one or all of the following: .sp Turn hilighting of the active menu item other than foreground color off: .sp .if n .RS 4 .nf .fam C MenuStyle