FVWM3COMMANDS(1)

NAME
fvwm3commands - fvwm built-in commands

LIST OF FVWM COMMANDS

The command descriptions below are grouped together in the following sections. The sections are hopefully sorted in order of usefulness to the newcomer.

    • Menu commands

    • Miscellaneous commands

    • Commands affecting window movement and placement

    • Commands for focus and mouse movement

    • Commands controlling window state

    • Commands for mouse and key bindings

    • The Style command (controlling window styles)

    • Other commands controlling window styles

    • Commands controlling the virtual desktop

    • Commands for user functions and shell commands

    • Conditional commands

    • Module commands

    • Quit, restart and session management commands

    • Colorsets

    • Color gradients

  Miscellaneous Commands

BugOpts [option [bool]], ...
    This command controls several workarounds for bugs in third party programs. The individual options are separated by commas. The optional argument bool 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 bool is omitted, the default setting is restored.

    DebugRandR activates monitor layout debug messages.

    FlickeringMoveWorkaround 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.

    MixedVisualWorkaround makes fvwm install the root colormap before it does some operations using the root window visuals. This is only useful when the -visual 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).

    The ModalityIsEvil 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.

    RaiseOverNativeWindows makes fvwm try to raise the windows it manages over native windows of the X server’s 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.

    RaiseOverUnmanaged 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 Unmanaged style option too.

    FlickeringQtDialogsWorkaround 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.

    QtDragnDropWorkaround suppresses the forwarding of unknown ClientEvent messages to windows — 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.

    EWMHIconicStateWorkaround 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.

    With the DisplayNewWindowNames 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 Style command.

    When the ExplainWindowPlacement option is enabled, fvwm prints a message to the console whenever a new window is placed or PlaceAgain, 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.

    The DebugCRMotionMethod 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.

    The TransliterateUtf8 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.

BusyCursor [Option bool], ...
    This command controls the cursor during the execution of certain commands. Option can be DynamicMenu, ModuleSynchronous, Read, Wait or *. An option must be followed by a boolean argument bool. 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 WAIT context of the CursorStyle command. "False" forces to not display the cursor. The default is:

        BusyCursor DynamicMenu False, ModuleSynchronous False, \
        Read False, Wait False

    The * option refers to all available options.

    The Read option controls the PipeRead command.

    The DynamicMenu option affects the DynamicPopupAction and MissingSubmenuFunction options of the AddToMenu 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 Read or PipeRead command and the Read option is set to "True".

    The ModuleSynchronous option affects the ModuleSynchronous command. If this option is set to "False", then the busy cursor is not displayed while fvwm waits for a module started by ModuleSynchronous to complete its startup.

    The Wait 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 EscapeFunc 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 CursorStyle command.

ClickTime [delay]
    Specifies the maximum delay in milliseconds between a button press and a button release for the Function command to consider the action a mouse click. The default delay is 150 milliseconds. Omitting the delay value resets the ClickTime to the default.

    ClickTime also specifies the delay between two clicks to be interpreted as a double-click.

ColormapFocus FollowsMouse | FollowsFocus
    By default, fvwm installs the colormap of the window that the cursor is in. If you use

        ColormapFocus FollowsFocus

    then the installed colormap is the one for the window that currently has the keyboard focus.

CursorStyle context [num | name | None | Tiny | file [x y] [fg bg]]
    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:

    POSITION (top_left_corner)
        used when initially placing windows

    TITLE (top_left_arrow)
        used in a window title-bar

    DEFAULT (top_left_arrow)
        used in windows that do not set their cursor

    SYS (hand2)
        used in one of the title-bar buttons

    MOVE (fleur)
        used when moving or resizing windows

    RESIZE (sizing)
        used when moving or resizing windows

    WAIT (watch)
        used during certain fvwm commands (see BusyCursor for details)

    MENU (top_left_arrow)
        used in menus

    SELECT (crosshair)
        used when the user is required to select a window

    DESTROY (pirate)
        used for Destroy, Close, and Delete commands

    TOP (top_side)
        used in the top side-bar of a window

    RIGHT (right_side)
        used in the right side-bar of a window

    BOTTOM (bottom_side)
        used in the bottom side-bar of a window

    LEFT (left_side)
        used in the left side-bar of a window

    TOP_LEFT (top_left_corner)
        used in the top left corner of a window

    TOP_RIGHT (top_right_corner)
        used in the top right corner of a window

    BOTTOM_LEFT (bottom_left_corner)
        used in the bottom left corner of a window

    BOTTOM_RIGHT (bottom_right_corner)
        used in the bottom right corner of a window

    TOP_EDGE (top_side)
        used at the top edge of the screen

    RIGHT_EDGE (right_side)
        used at the right edge of the screen

    BOTTOM_EDGE (bottom_side)
        used at the bottom edge of the screen

    LEFT_EDGE (left_side)
        used at the left edge of the screen

    ROOT (left_ptr)
        used as the root cursor

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.

The second argument is either the numeric value of the cursor as defined in the include file X11/cursorfont.h or its name (without the XC_ prefix). Alternatively, the xpm file name may be specified. The name can also be None (no cursor) or Tiny (a single pixel as the cursor).

    # make the kill cursor be XC_gumby (both forms work):
    CursorStyle DESTROY 56
    CursorStyle DESTROY gumby

Alternatively, the cursor can be loaded from an (XPM, PNG or SVG) image file. If fvwm is compiled with Xcursor support, full ARGB is used, and (possibly animated) cursor files made with the xcursorgen program can be loaded. Otherwise the cursor is converted to monochrome.

The optional x and y arguments (following a file 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.

    CursorStyle ROOT cursor_image.png 0 0

The optional fg and bg 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.

    CursorStyle ROOT nice_arrow.xpm yellow black

DefaultFont [fontname]
    DefaultFont sets the default font to font fontname. 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 Style * Font, Style * IconFont, or MenuStyle commands.

DefaultIcon filename
    Sets the default icon which is used if a window has neither an client-supplied icon nor an icon supplied via the Icon option of the Style command.

DefaultLayers bottom put top
    Changes the layers that are used for the StaysOnBottom, StaysPut, StaysOnTop Style options. Initially, the layers 2, 4 and 6 are used.

Deschedule [command_id]
    Removes all commands that were scheduled with the id command_id with the Schedule command from the list of commands to be executed unless they were already executed. If the command_id is omitted, the value of the variable $[schedule.last] is used as the id.

Emulate Fvwm | Mwm | Win
    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 Emulate with Mwm or Win 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 ManualPlacement description.

EscapeFunc
    By default the key sequence Ctrl-Alt-Escape allows for escaping from a Wait pause and from a locked ModuleSynchronous command. The EscapeFunc command used with the Key command allows for configuring this key sequence. An example:

        Key Escape A MC -
        Key Escape A  S EscapeFunc

    replaces the Ctrl-Alt-Escape key sequence with Shift-Escape for aborting a Wait pause and ModuleSynchronous command. EscapeFunc used outside the Key command does nothing.

FakeClick [command value] ...
    This command is mainly intended for debugging fvwm and no guarantees are made that it works for you. FakeClick 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 command tokens and integer values, The press and release commands are followed by the appropriate mouse button number and generate a button press or release event on the window below the pointer. The wait commands pauses fvwm for the given number of milliseconds. The modifiers 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 depth 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’s 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.

        FakeClick depth 2 press 1 wait 250 release 1

    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.

FakeKeypress [command value] ...
    This command is mainly intended for debugging fvwm and no guarantees are made that it works for you. FakeKeypress 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 press and release commands are followed by a key name. The key name is a standard X11 key name as defined in /usr/include/X11/keysymdef.h, (without the XK_ prefix), or the keysym database /usr/X11R6/lib/X11/XKeysymDB. The wait, modifiers and depth commands are the same as those used by FakeClick.

    Save all GVim sessions with: "Esc:w\n"

        All (gvim) FakeKeypress press Escape \
                          press colon \
                          press w \
                          press Return

    Save & exit all GVim sessions with: "Esc:wq\n"

        All (gvim) FakeKeypress press Escape \
                          press colon \
                          press w \
                          press q \
                          press Return

    Send A to a specific window:

        WindowId 0x3800002 FakeKeypress press A

    Note: all command names can be abbreviated with their first letter.

ImagePath path
    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.

    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.

    The path may contain environment variables such as $HOME (or ${HOME}). Further, a '+' in the path is expanded to the previous value of the path, allowing appending or prepending to the path easily.

    For example:

        ImagePath $HOME/icons:+:/usr/include/X11/bitmaps

LocalePath path
    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 (';'). As an example the default locale path is:

        /install_prefix/share/locale;fvwm

    where install_prefix is the fvwm installation directory. With such a locale path translations are searched for in

        /install_prefix/share/locale/lang/LC_MESSAGES/fvwm.mo

    where lang depends on the locale. If no directory is given the default directory path is assumed. If no text domain is given, fvwm is assumed. Without argument the default locale path is restored.

    As for the ImagePath command, path may contain environment variables and a '+' to append or prepend the locale path easily.

    For example, the fvwm-themes package uses

        LocalePath ";fvwm-themes:+"

    to add locale catalogs.

    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 FvwmForm 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.

    The main use of locale catalogs is via the "$[gt.string]" parameter:

        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

    gives a menu in the locale languages if translations are available.

    Note that the FvwmScript 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.

PrintInfo subject [verbose]
    Print information on subject to debug log file, which defaults to $HOME/.fvwm/fvwm3-output.log . Environment variables $FVWM_USERDIR and $FVWM3_LOGFILE can alter this default. For this logfile to be written, either fvwm3 has to be started with -v option or SIGUSR2 signal can be used to toggle opening/closing debug log file.

    An optional integer argument to debug log file, which defaults to $HOME/.fvwm/fvwm3-output.log . Environment variables $FVWM_USERDIR and $FVWM3_LOGFILE can alter this default. For this logfile to be written, either fvwm3 has to be started with -v option or SIGUSR2 signal can be used to toggle opening/closing debug log file.

    An optional integer argument verbose defines the level of information which is given. The current valid subjects are:

    Colors which prints information about the colors used by fvwm. This useful on screens which can only display 256 (or less) colors at once. If verbose 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.

    ImageCache which prints information about the images loaded by fvwm. If verbose is one or greater all images in the cache will be listed together with their respective reuse.

    Locale which prints information on your locale and the fonts that fvwm used. verbose can be 1 or 2.

    nls which prints information on the locale catalogs that fvwm used

    bindings which prints information on all the bindings fvwm has: key and mouse bindings. verbose has no effect with this option.

    infostore which prints information on all entries in the infostore, listing the key and its value. verbose has no effect with this option.

Schedule [Periodic] delay_ms [command_id] command
    The command is executed after about delay_ms milliseconds. This may be useful in some tricky setups. The command is executed in the same context window as the Schedule command. An optional integer argument command_id may be given in decimal, hexadecimal or octal format. This id can be used with the Deschedule 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 Schedule command. Note that the Schedule command and its arguments undergo the usual command line expansion, and, when command 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.

    Note: A window’s id as it is returned with $[w.id] can be used as the command_id. Example:

        Current Schedule 1000 $[w.id] WindowShade

    The Schedule command also supports the optional keyword Periodic which indicates that the command should be executed every delay_ms. Example:

        Schedule Periodic 10000 PipeRead '[ -N "$MAIL" ] && echo \
         Echo You have mail'

    Use the Deschedule command to stop periodic commands.

State state [bool]
    Sets, clears or toggles one of the 32 user defined states which are associated with each window. The state is a number ranging from 0 to 31. The states have no meaning in fvwm, but they can be checked in conditional commands like Next with the State condition. The optional argument bool is a boolean argument. "True" sets the given state, while "False" clears it. Using "toggle" switches to the opposite state. If the bool argument is not given, the state is toggled.

WindowList [(conditions)] [position] [options] [double-click-action]
    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.

    The format of the geometry part is: desk(layer): x-geometry sticky, where desk and layer are the corresponding numbers and sticky 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:

        AddToFunc WindowListFunc
        + I Iconify off
        + I FlipFocus
        + I Raise
        + I WarpToWindow 5p 5p

    You can destroy the built-in "WindowListFunc" and create your own if these defaults do not suit you.

    The window list menu uses the "WindowList" menu style if it is defined (see MenuStyle command). Otherwise the default menu style is used. To switch back to the default menu style, issue the command

        DestroyMenuStyle WindowList

    Example:

        MenuStyle WindowList SelectOnRelease Meta_L

    The conditions can be used to exclude certain windows from the window list. Please refer to the Current command for details. Only windows that match the given conditions are displayed in the window list. The options below work vice versa: windows that would otherwise not be included in the window list can be selected with them. The conditions always override the options.

    The position arguments are the same as for Menu. The command double-click-action 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 double-click-action must be quoted if it consists of more than one word.

    The double-click-action is useful to define a default window if you have bound the window list to a key (or button) like this:

        # 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"

    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 SelectOnRelease menu style (see example above) a window is selected as soon as you release the Alt key.

    The options passed to WindowList are separated by commas and can be Geometry / NoGeometry / NoGeometryWithInfo, NoDeskNum, NoLayer, NoNumInDeskTitle, NoCurrentDeskTitle, MaxLabelWidth width, TitleForAllDesks, Function funcname, Desk desknum, CurrentDesk, NoIcons / Icons / OnlyIcons, NoNormal / Normal / OnlyNormal, NoSticky / Sticky / OnlySticky, NoStickyAcrossPages / StickyAcrossPages / OnlyStickyAcrossPages, NoStickyAcrossDesks / StickyAcrossDesks / OnlyStickyAcrossDesks, NoOnTop / OnTop / OnlyOnTop, NoOnBottom / OnBottom / OnlyOnBottom, Layer m [n], UseSkipList / OnlySkipList, NoDeskSort, ReverseOrder, CurrentAtEnd, IconifiedAtEnd, UseIconName, Alphabetic / NotAlphabetic, SortByResource, SortByClass, NoHotkeys, SelectOnRelease ,ShowPage, ShowPageX, ShowPageY, ShowScreen.

    (Note - normal means not iconic, sticky, or on top)

    With the SortByResource option windows are alphabetically sorted first by resource class, then by resource name and then by window name (or icon name if UseIconName is specified). ReverseOrder also works in the expected manner.

    With the SortByClass option windows are sorted just like with SortByResource, but the resource name is not taken into account, only the resource class.

    The SelectOnRelease option works exactly like the MenuStyle option with the same name, but overrides the option given in a menu style. By default, this option is set to the left

    key. To switch it off, use SelectOnRelease without a key name.

    If you pass in a function via Function funcname, it is called within a window context of the selected window:

        AddToFunc IFunc I Iconify toggle
        WindowList Function IFunc, NoSticky, CurrentDesk, NoIcons

    If you use the Layer m [n] option, only windows in layers between m and n are displayed. n defaults to m. With the ReverseOrder option the order of the windows in the list is reversed.

    With the CurrentAtEnd 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.

    IconifiedAtEnd makes iconified windows be moved to the end of the list. This is also from another GUI.

    The NoGeometry option causes fvwm to not display the geometries as well as the separators which indicate the different desktops. NoGeometryWithInfo removes the geometries, but keep the desktop information and indicates iconic windows. NoDeskNum causes fvwm to not display the desktop number in the geometry or before the window title with the NoGeometryWithInfo option. NoNumInDeskTitle is only useful if a desktop name is defined with the DesktopName 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 Desk condition is used. The NoCurrentDeskTitle option removes this title. TitleForAllDesks causes fvwm to add a menu title with the desk name and/or number before each group of windows on the same desk. With NoLayer, the layer of the window is not displayed. The options ShowPage, ShowPageX and ShowPageY enable displaying the page of the window rounded multiples of the display size. With ShowScreen, the window’s screen name is displayed.

    The MaxLabelWidth option takes the number of characters to print as its argument. No more than that many characters of the window name are visible.

    If you wanted to use the WindowList as an icon manager, you could invoke the following:

        WindowList OnlyIcons, Sticky, OnTop, Geometry

    (Note - the Only options essentially wipe out all other ones... but the OnlyListSkip option which just causes WindowList to only consider the windows with WindowListSkip style.)

XSync
    When XSync 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.

XSynchronize [bool]
    The XSynchronize 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 bool argument. Fvwm defaults to synchronized requests when started with the --debug option. This command is intended for debugging only.

+
    Used to continue adding to the last specified decor, function or menu. See the discussion for AddToDecor, AddToFunc, and AddToMenu.

  Window Movement and Placement

AnimatedMove x y [Warp]
    Move a window in an animated fashion. Similar to Move command. The options are the same, except they are required, since it doesn’t make sense to have a user move the window interactively and animatedly. If the optional argument Warp is specified the pointer is warped with the window.

GeometryWindow Hide | Show | Colorset n | Position x y | Screen S
    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.

        GeometryWindow Hide [Never | Move | Resize]

    Hides or switches off the geometry window. If the optional parameters Move or Resize are given, it will only hide the geometry window during the respective operation. The parameter Never will switch the geometry back on again (equivalent to Show).

        GeometryWindow Show [Never | Move | Resize]

    Shows or switches on the geometry window (equivalent to Hide Never). If the optional parameters Move or Resize are given, it will only show the geometry window during the respective operation. The parameter Never will switch the geometry window off (equivalent to Hide).

        GeometryWindow Colorset _cset_

    Sets colorset of the gometry window to cset. Use the literal option default for cset to use the default colorset.

        GeometryWindow Position [+|-]_x_[p] [+|-]_y_[p]

    Configures the position the geometry window appears. x and y are the relative coordinates as a percentage of the screen size. If a leading '-' is provided the coordinates are computed from the left/bottom of the screen respectively. If the coordinates are appended with a 'p', they are interpreted as the number of pixels from the respective screen edge. If no position arguments are given, the geometry window’s position will return to its default state of the upper left corner or the center if emulating MWM.

        GeometryWindow Screen _RANDRNAME_

    Configure which screen the geometry window is shown on. By default the geometry window is shown on the current screen. If a valid RANDRNAME is provided, the geometry window will always be shown on that screen. Use current as the RANDRNAME to return the default.

    Examples:

        # 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

Layer [arg1 arg2] | [default]
    Puts the current window in a new layer. If arg1 is non zero then the next layer is the current layer number plus arg1. If arg1 is zero then the new layer is arg2.

    As a special case, default 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.

Lower
    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

        AddToFunc lower-to-bottom
         + I Layer 0 0
         + I Lower

Move [options]
    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.

    Move without options starts an interactive move. The window may snap to other windows and screen boundaries, configurable with the SnapAttraction style. Moving a window to the edge of the screen can be used to drag the window to other pages. (See EdgeScroll, and the EdgeMoveDelay style for more information.)

    Holding down Alt disables snapping and allows one to switch pages without any delay. Interactive movement can be aborted with the Escape 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 Mouse command with special context 'P' for Placement.

    The window condition PlacedByButton can be used to check if a specific button was pressed to place the window (see Current command).

    If the single argument pointer 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 FvwmPager.

        Move pointer

    To move a window in a given direction until it hits another window, icon, or screen boundary use:

        Move shuffle [options] _direction_(s)

    The direction can be North/N/Up/U, East/E/Right/R, South/S/Down/D, or West/W/Left/L. The window will move in the given direction until it hits another window or the EwmhBaseStruts/screen boundary. When a window is at the EwmhBaseStruts/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 EwmhBaseStruts unless the literal option ewmhiwa is given. If multiple direction(s) are given, the window will move the directions in the order of the sequence stated.

    The literal option Warp will warp the mouse pointer to the window. The literal option all_windows 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 both_sides will consider both the close side and the far side of the window (by default only the close side is considered).

    If the literal option snap followed by a snap type of windows, icons, or same is given, then the window will only stop if it hits another window, icon, or the same type. If the literal option layers followed by two integers specifying a min layer and max layer is given, then only windows on the layers between min and max layers will stop the window. For example:

        # 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

    Move can be used to moved a window to a specified position:

        Move [screen _S_] [desk _N_] [w | m | v]_x_[p | w] \
             [w | m | v]_y_[p | w] [Warp] [ewmhiwa]

    This will move the window to the x and y position (see below). By default, the EWMH working area of each monitor is honoured (the working area for each monitor is set via EwmhBaseStruts 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 ewmhiwa 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 Warp is given then the pointer is warped to the window.

    If the literal option screen followed by a RandR screen name S 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 screen is interpreted as in the MoveToScreen command.

    If the literal option desk followed by a desk number N 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’s 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.

    The positional arguments x and y 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 screen. By default, the numeric value given is interpreted as a percentage of the screen’s width/height, but a trailing 'p' changes the interpretation to mean pixels, while a trailing 'w' means percent of the window width/height. To move the window relative to its current position, add the 'w' (for "window") prefix before the x and/or y value. To move the window to a position relative to the current location of the pointer, add the 'm' (for "mouse") prefix. To move the window relative to the virtual screen coordinates, add the 'v' (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 'p' suffix. To leave either coordinate unchanged, "keep" can be specified in place of x or y.

    For advanced uses, the arguments x and y can be used multiple times, but without the prefix 'm' or 'w'. (See complex examples below).

    Simple Examples:

        # 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

    More complex examples (these can be bound as actions to keystrokes, etc.; only the command is shown, though):

        # 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

    See also the AnimatedMove command.

MoveToDesk [prev | arg1 [arg2] [min max]]
    Moves the selected window to another desktop. The arguments are the same as for the GotoDesk command. Without any arguments, the window is moved to the current desk.

MoveThreshold [pixels]
    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 pixels pixels it is assumed to be a drag.

    Previous versions of fvwm hardwired pixels to 3, which is now the default value. If pixels is negative or omitted the default value (which might be increased when 16000x9000 pixel displays become affordable) is restored.

MoveToPage [options] [x[p | w] y[p | w]] | [prev]
    Moves the selected window to another 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 DesktopSize 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 x and y 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 'p' after any or both numerical arguments. To move the window relative to its current location, add a trailing 'w'. To move a window to the previous page use prev as the single argument.

    Windows are usually not moved beyond desk boundaries.

    Possible options are wrapx and wrapy to wrap around the x or y coordinate when the window is moved beyond the border of the desktop. For example, with wrapx, when the window moves past the right edge of the desktop, it reappears on the left edge. The options nodesklimitx and nodesklimity allow moving windows beyond the desk boundaries in x and y direction (disabling the wrapx and wrapy options).

    Examples:

        # 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

MoveToScreen [screen]
    Moves the selected window to another screen. The screen argument must be a valid RandR name.

OpaqueMoveSize [percentage]
    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

        OpaqueMoveSize 0

    all windows are moved using the traditional rubber-band outline. With

        OpaqueMoveSize unlimited

    or if a negative percentage is given all windows are moved as solid windows. The default is

        OpaqueMoveSize 5

    which allows small windows to be moved in an opaque manner but large windows are moved as rubber-bands. If percentage is omitted or invalid the default value is set. To resize windows in an opaque manner you can use the ResizeOpaque style. See the Style command.

PlaceAgain [Anim] [Icon]
    Causes the current window’s 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 Smart or Clever (ReallySmart) placement. With the optional argument Anim an animated move is used to place the window in its new position. With the additional option Icon, the icon is placed again instead.

Raise
    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

        AddToFunc raise-to-top
         + I Layer 0 ontop
         + I Raise

    where ontop is the highest layer used in your setup.

RaiseLower
    Alternately raises and lowers a window. The window is raised if it is obscured by any window (except for its own transients when RaiseTransient style is used; see the Style command) otherwise it is lowered.

Resize [[frame] [direction dir] [warptoborder automatic] [fixeddirection] width[p | c | wa | da] height[p | c]]
    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.

    Resize without options starts an interactive resize.

    If the EdgeResizeDelay style is set or the Alt key is held down, the window can be resized across the edge of the screen.

    The operation can be aborted with the Escape key or by pressing any mouse button (except button 1 which confirms it).

    If the optional arguments width and height are provided, then the window is resized so that its dimensions are width by height. The units of width and height are percent-of-screen, unless a letter 'p' is appended to one or both coordinates, in which case the location is specified in pixels. With a 'c' suffix the unit defined by the client application (hence the c) is used. With the suffix 'wa' the value is a percentage of the width or height size of the EWMH working area, and with the suffix 'da' it is a percentage of the width or height of the EWMH dynamic working area. So you can say

        Resize 80c 24c

    to make a terminal window just big enough for 80x24 characters.

    If the width or height is prefixed with the letter 'w' the size is not taken as an absolute value but added to the current size of the window. Example:

        # Enlarge window by one line
        Resize keep w+1c

    Both, width and height can be negative. In this case the new size is the screen size minus the given value. If either value is "keep", the corresponding dimension of the window is left untouched. The new size is the size of the client window, thus

        Resize 100 100

    may make the window bigger than the screen. To base the new size on the size of the whole fvwm window, add the frame option after the command. The options fixeddirection, direction and warptoborder are only used in interactive move operations. With fixeddirection the same border is moved even if the pointer moves past the opposite border. The direction 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 automatic 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 warptoborder option can be used to warp the pointer to the direction indicated. As with the automatic option for direction, the border to warp to is calculated based on the pointer’s 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.

        AddToFunc ResizeSE I Resize Direction SE
        Mouse 3 A M ResizeSE

Resize [bottomright | br x y]
    An alternate syntax is used if the keyword bottomright or in short br follows the command name. In this case, the arguments x and y specify the desired position of the bottom right corner of the window. They are interpreted exactly like the x and y arguments of the Move command. Actually, any of the options accepted by the Move command can be used.

ResizeMaximize [resize-arguments]
    Combines the effects of Resize and Maximize 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 resize-arguments are the same as for the Resize command.

ResizeMove resize-arguments move-arguments
    This command does the same as the Resize and Move commands, but in a single call which is less visually disturbing. The resize-arguments are exactly the same arguments as for the Resize command and the move-arguments are exactly the same arguments as for the Move command except the pointer option which is not supported by the ResizeMove command.

    Examples:

        # 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

    Note: Fvwm may not be able to parse the command properly if the option bottomright of the Resize command is used.

ResizeMoveMaximize resize-arguments move-arguments
    Combines the effects of ResizeMove and Maximize 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 resize-arguments and move-arguments are the same as for the ResizeMove command.

RestackTransients
    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 RaiseTransient or LowerTransient style are affected at all. When RestackTransients is used on a transient window with the StackTransientParent style set, it is redirected to the parent window.

SetAnimation milliseconds-delay [fractions-to-move-list]
    Sets the time between frames and the list of fractional offsets to customize the animated moves of the AnimatedMove command and the animation of menus (if the menu style is set to animated; see MenuStyle command). If the fractions-to-move-list is omitted, only the time between frames is altered. The fractions-to-move-list 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.:

        SetAnimation 10 -.01 0 .01 .03 .08 .18 .3 \
        .45 .6 .75 .85 .90 .94 .97 .99 1.0

    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.

XorPixmap [pixmap]
    Selects the pixmap with which bits are xor’ed when doing rubber-band window moving or resizing. This has a better chance of making the rubber-band visible if XorValue does not give good results. An example pixmap resize.rainbow.xpm is provided with the icon distribution. To turn the XorPixmap off again use the XorValue command or omit the pixmap argument.

XorValue [number]
    Changes the value with which bits are xor’ed 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 number is omitted or invalid.

  Focus & Mouse Movement

CursorBarrier [destroy] [options] [left top right bottom]
    A cursor barrier is a box that the cursor cannot be moved outside of (unless warped with CursorMove or WarpToWindow). The left, top, right, and bottom values give the percent distance the box is placed from each of the corresponding edges of the desktop. If the values end with a p, they are interpreted as pixel amounts instead. If the option coords is given, the values are interpreted as the left/top and right/bottom coordinates of the box’s corners. If the option screen RandRname is given, the positions are computed relative to the specified monitor. Use screen c to place the barrier on the current monitor.

    Multiple barriers can be created by calling CursorBarrier multiple times. This allows creating multiple regions to confine the cursor to (such as each monitor in a multi-monitor setup), then use CursorMove or WarpToWindow to move the cursor between the barriers. If the command destroy is included, all barriers are destroyed allowing free movement of the mouse again. If destroy is followed by an integer N, 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 destroy -1 to destroy the most recent barrier without affecting any previously created barriers.

    By default the key binding ctrl+shift+D will destroy all cursor barriers by calling CursorBarrier destroy.

    Here are some examples:

        # 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 \
            $[math.+.$[w.x],$[w.width]]p $[math.+.$[w.y],$[w.height]]p

        # Destroy all barriers
        CursorBarrier destroy

    Note that if the CURSOR_BARRIER limit is hit, all defined CursorBarriers are undefined. In pratice, this is unlikely to happen though. If it does, a message is printed to fvwm3’s debug logs.

    CursorBarrier only works if fvwm is complied with the XFixes extension.

CursorMove [screen RANDRNAME] horizontal[p] vertical[p]
    Without the screen option, CusorMove moves the mouse cursor a horizontal distance and vertical 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 'p' to the value. Either or both entries may be negative. For example,

        # 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

    If the option screen followed by a valid RandR monitor name is included, CursorMove 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’s size, or an absolute location with the 'p' suffix. For example,

        # 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

    When moving to a specified screen, the horizontal and vertical values are always shifted to be inside the current page of the specified monitor. For instance '50', '150', and '-150' will all be the center of the monitor, and will not change monitor’s page. Use GotoPage to change the page of a specified monitor. Negative values can be used to specify distance from the right/bottom corner of the monitor.

    CusorMove 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 WarpToWindow.

FlipFocus [NoWarp]
    Executes a Focus 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 WindowList and placed at the start. This command is recommended for use with the Direction command and in the function invoked from WindowList.

Focus [NoWarp]
    Sets the keyboard focus to the selected window. If the NoWarp 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 WarpToWindow function). Does not de-iconify. This command does not alter the order of the WindowList, it rotates the WindowList around so that the target window is at the start.

    When the NoWarp argument is given, Focus cannot transfer the keyboard focus to windows on other desks.

    To raise and/or warp a pointer to a window together with Focus or FlipFocus, use a function, like:

        AddToFunc SelectWindow
        + I Focus
        + I Iconify false
        + I Raise
        + I WarpToWindow 50 8p

WarpToWindow [!raise | raise] x[p] y[p]
    Warps the cursor to the associated window and raises it (unless the option !raise is present). The parameters x and y default to percentage of window down and in from the upper left hand corner (or number of pixels down and in if 'p' 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:

        WindowId root WarpToWindow 50 50

  Window State

Close
    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 Destroy command. Note: if the window accepts the delete window protocol but does not close itself in response, the window is not deleted.

Delete
    Sends a message to a window asking that it remove itself, frequently causing the application to exit.

Destroy
    Destroys an application window, which usually causes the application to crash and burn.

Iconify [bool]
    Iconifies a window if it is not already iconified or de-iconifies it if it is already iconified. The optional argument bool is a boolean argument. "True" means only iconification is allowed, while "False" forces de-iconification. Using "toggle" switches between iconified and de-iconified states.

    There are a number of Style options which influence the appearance and behavior of icons (e.g. StickyIcon, NoIcon).

    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.

Maximize [flags] [bool | forget] [horizontal[p]] [vertical[p]]
    Without its optional arguments (or if the bool bit has the value "toggle") Maximize 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 "True" or "False" value for the bool argument.

    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 ResizeMaximize and ResizeMoveMaximize. If the window is not maximized, nothing happens.

    With the optional arguments horizontal and vertical, which are expressed as percentage of a full screen, the user can control the new size of the window. An optional suffix 'p' 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 horizontal*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 horizontal is "grow", 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, "growleft" or "growright" can be used respectively "growup" and "growdown".

    The optional flags argument is a space separated list containing the following key words: fullscreen, ewmhiwa, growonwindowlayer, growonlayers, keepgrowing, all_windows, both_sides, and screen. fullscreen causes the window to become fullscreened if the appropriate EWMH hint is set. ewmhiwa causes fvwm to ignore the EWMH working area. growonwindowlayer causes the various grow methods to ignore windows with a layer other than the current layer of the window which is maximized. The growonlayers 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 all_windows 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 both_sides 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. keepgrowing will allow the window to keep growing beyond any window boundary it is currently touching until it grows into the next closest window boundary. screen must have an argument which specifies the screen on which to operate.

    Here are some examples. The following adds a title-bar button to switch a window to the full vertical size of the screen:

        Mouse 0 4 A Maximize 0 100

    The following causes windows to be stretched to the full width:

        Mouse 0 4 A Maximize 100 0

    This makes a window that is half the screen size in each direction:

        Mouse 0 4 A Maximize 50 50

    To expand a window horizontally until any other window is found:

        Mouse 0 4 A Maximize 0 grow

    To expand a window until any other window on the same or a higher layer is hit.

        Mouse 0 4 A Maximize growonlayers $[w.layer] -1 grow grow

    To expand a window but leave the lower 60 pixels of the screen unoccupied:

        Mouse 0 4 A Maximize 100 -60p

    Values larger than 100 can be used with caution.

Refresh
    Causes all windows on the screen to redraw themselves. All pending updates of all windows' styles and looks are applied immediately. E.g. if Style or TitleStyle commands were issued inside a fvwm function.

RefreshWindow
    Causes the chosen window to redraw itself. All pending updates of the window’s style and look are applied immediately. E.g. if Style or TitleStyle commands were issued inside a fvwm function.

Stick [bool]
    If the bool argument is empty or "toggle", the Stick 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 bool argument must be "True". To make it non-sticky use "False".

StickAcrossPages [bool]
    Works like Stick but only sticks a window across pages, not across desks.

StickAcrossDesks [bool]
    Works like Stick but only sticks a window across desks, not across pages.

WindowShade [bool] | [[ShadeAgain] direction]
    Toggles the window shade feature for titled windows. Windows in the shaded state only display a title-bar. If bool is not given or "toggle", the window shade state is toggled. If bool is "True", the window is forced to the shaded state. If bool is "False", then the window is forced to the non-shaded state. To force shading in a certain direction, the direction argument can be used. Any of the strings "North", "South", "West", "East", "NorthWest", "NorthEast", "SouthWest", "SouthEast" or "Last" can be given. The direction can be abbreviated with the usual one or two letters "N", "NW", etc. Using a direction on a window that was already shaded unshades the window. To shade it in a different direction, use the ShadeAgain option. The direction Last 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 WindowShadeSteps, WindowShadeShrinks, WindowShadeScrolls, WindowShadeLazy, WindowShadeAlwaysLazy and WindowShadeBusy options of the Style command. Examples:

        Style * WindowShadeShrinks, WindowShadeSteps 20, \
          WindowShadeLazy
        Mouse 1 - S WindowShade North
        Mouse 1 [ S WindowShade West
        Mouse 1 ] S WindowShade E
        Mouse 1 _ S WindowShade S

    Note: When a window that has been shaded with a direction argument changes the direction of the window title (see TitleAtTop Style option), the shading direction does not change. This may look very strange. Windows that were shaded without a direction argument stay shaded in the direction of the title bar.

    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.

  Mouse & Key Bindings

IgnoreModifiers [Modifiers]
    Tells fvwm which modifiers to ignore when matching Mouse or Key bindings. IgnoreModifiers affects the ClickToFocus style too. This command belongs into your config. 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 config file (e.g. with the Exec command).

    Modifiers has the same syntax as in the Mouse or Key bindings, with the addition of 'L' meaning the caps lock key. The default is "L". Modifiers 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 '2' usually is the num-lock modifier and '5' refers to the scroll-lock key. To turn all these pesky modifiers off you can use this command:

        IgnoreModifiers L25

    If the Modifiers argument is the string "default", fvwm reverts back to the default value "L".

    Important This command creates a lot of extra network traffic, depending on your CPU, network connection, the number of Key or Mouse 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

    if you have no problem with it. In the FAQ you can find a better solution of this problem.

EdgeCommand [screen RANDRNAME] [direction [Function]]
    Binds a specified fvwm command Function to an edge of the screen. Direction may be one of "North", "Top", "West", "Left", "South", "Bottom", "Right" and "East". If Function 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 screen followed by a RandR screen name RANDRNAME is given, the command is set only for the given monitor.

    Function is executed when the mouse pointer enters the invisible pan frames that surround the visible screen. The binding works only if EdgeThickness is set to a value greater than 0. If a function is bound to an edge, scrolling specified by EdgeScroll 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. FvwmAuto can be used get a delay when raising or lowering windows. The following example raises FvwmButtons if the mouse pointer enters the top edge of the screen.

        # 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" \
         "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

    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.

EdgeLeaveCommand [screen RANDRNAME] [direction [Function]]
    Binds a specified fvwm command Function to an edge of the screen. Direction may be one of "North", "Top", "West", "Left", "South", "Bottom", "Right" and "East". If Function 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 screen followed by a RandR screen name RANDRNAME is given, the command is set only for the given monitor.

    Function is executed when the mouse pointer leaves the invisible pan frames that surround the visible screen. The binding works only if EdgeThickness is set to a value greater than 0. If a function is bound to an edge, scrolling specified by EdgeScroll 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. FvwmAuto can be used get a delay when raising or lowering windows. See example for EdgeCommand

    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.

Key [(window)] Keyname Context Modifiers Function
    Binds a keyboard key to a specified fvwm command, or removes the binding if Function is '-'. The syntax is the same as for a Mouse binding except that the mouse button number is replaced with a Keyname. Normally, the key binding is activated when the key is pressed. Keyname is a standard X11 key name as defined in /usr/include/X11/keysymdef.h, (without the XK_ prefix), or the keysym database /usr/X11R6/lib/X11/XKeysymDB. Only key names that are generated with no modifier keys or with just the

    key held are guaranteed to work. The Context and Modifiers fields are defined as in the Mouse 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 SloppyFocus or ClickToFocus). Note that key bindings with the 'R' (root window) context do not work properly with SloppyFocus and ClickToFocus. If you encounter problems, use the PointerKey command instead. If you want to bind keys to a window with SloppyFocus or ClickToFocus 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 'W' context).

    The special context 'M' for menus can be used to (re)define the menu controls. It be used alone or together with 'T', 'S', 'I', '[', ']', '-' and '_'. See the Menu Bindings section for details.

    The following example binds the built-in window list to pop up when

    is hit, no matter where the mouse pointer is:

        Key F11 A SCM WindowList

    Binding a key to a title-bar button causes that button to appear. Please refer to the Mouse command for details.

Mouse [(window)] Button Context Modifiers Function
    Defines a mouse binding, or removes the binding if Function is '-'. Button is the mouse button number. If Button 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.

    Context describes where the binding applies. Valid contexts are 'R' for the root window, 'W' for an application window, 'D' for a desktop application (as kdesktop or Nautilus desktop), 'T' for a window title-bar, 'S' for a window side, top, or bottom bar, '[', ']', '-' and '_' for the left, right, top or bottom side only, 'F' for a window frame (the corners), '<', '^', '>' and 'v' for the top left, top right, bottom right or bottom left corner, 'I' for an icon window, or '0' through '9' for title-bar buttons, or any combination of these letters. 'A' is for any context. For instance, a context of "FST" applies when the mouse is anywhere in a window’s border except the title-bar buttons. Only 'S' and 'W' are valid for an undecorated window.

    The special context 'M' for menus can be used to (re)define the menu controls. It can be used alone or together with 'T', 'S', 'I', '[', ']', '-' and '_'. See the Menu Bindings section for details.

    The special context 'P' controls what buttons that can be used to place a window. When using this context no modifiers are allowed (Modifiers must be N), no window is allowed, and the Function must be one of PlaceWindow, PlaceWindowDrag, PlaceWindowInteractive, CancelPlacement, CancelPlacementDrag, CancelPlacementInteractive or -.

    PlaceWindow makes Button usable for window placement, both for interactive and drag move. CancelPlacement does the inverse. That is makes Button 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 Emulate command. Also a window being dragged can always be placed by releasing the button hold while dragging, regardless of if it is set to PlaceWindow or not.

    PlaceWindowDrag and PlaceWindowInteractive/CancelPlacementDrag and CancelPlacementInteractive work as PlaceWindow/CancelPlacement with the exception that they only affect either windows dragged / placed interactively.

    - is equivalent to CancelPlacement.

    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:

        Mouse 0 P N PlaceWindow
        Mouse 3 P N CancelPlacement
        Mouse 1 P N CancelPlacementDrag

    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.

    The following example shows how the same key-binding can be used to perform different functions depending on the window that is focused:

        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

    A '--' action indicates that the event should be propagated to the specified window to handle. This is only a valid action for window-specific bindings.

    This example shows how to display the WindowList when Button 3 is pressed on an rxvt window:

        Mouse (rxvt) 3 A A WindowList

    Note that Fvwm actually intercepts all events for a window-specific binding and (if the focused window doesn’t 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 ~/.Xdefaults file:

        XTerm*allowSendEvents:  true

    Modifiers is any combination of 'N' for no modifiers, 'C' for control, 'S' for shift, 'M' for Meta, 'L' for Caps-Lock or 'A' for any modifier. For example, a modifier of "SM" applies when both the

    and

    keys are down. X11 modifiers mod1 through mod5 are represented as the digits '1' through '5'. The modifier 'L' is ignored by default. To turn it on, use the IgnoreModifiers command.

    Function is one of fvwm’s commands.

    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:

        1 3 5 7 9    0 8 6 4 2

    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.

PointerKey [(window)] Keyname Context Modifiers Function
    This command works exactly like the Key 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 PointerKey command can for example be used to bind keys to the root window if you are using SloppyFocus or ClickToFocus. 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 PointerKey command only for key combinations that are not needed in any application window.

    Example:

        Style * SloppyFocus
        PointerKey f1 a m Menu MainMenu

  Controlling the Virtual Desktop

DesktopName desk name
    Defines the name of the desktop number desk to name. This name is used in the WindowList command and in the FvwmPager where it override the Label 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).

DesktopConfiguration global | per-monitor | shared
    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 — hence, when a change of desktop/page happens, the same change occurs across all monitors.

    With per-monitor , each RandR monitor has a separate copy of desktops, and hence function independently of one another when switching desks/pages.

    When shared is set, the desktops are shared amongst all monitors. So for example, with the following number of desktops defined with two monitors ([] is monitor1, and <> is monitor2):

        [0]     1      2      <3>     4

    Moving between desktops would still honor the monitor the desktop is being requested on. If monitor1 wanted to switch to desktop 3, then that desktop is exchanged with monitor2 such that the following showed the active desktop on both monitors:

        <0>     1      2      [3]     4

    This concept is similar to how spectrwm or xmonad handles desktops.

    Note: these each DesktopConfiguration mode can be changed on-the-fly.

DesktopSize HorizontalxVertical
    Defines the virtual desktop size in units of the physical screen size.

EdgeResistance delay, EdgeResistance scrolling moving [screen-scrolling]
    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

        EdgeScroll 100 100

    but find themselves accidentally flipping pages when they do not want to. If -1 is given as the delay, scrolling is disabled completely.

    The second form of invocation with two or three arguments is obsolete and should be replaced with the following three commands as needed:

        EdgeResistance scrolling
        Style * EdgeMoveDelay scrolling
        Style * EdgeMoveResistance moving
        or
        Style * EdgeMoveResistance moving screen-scrolling

    Fvwm does this substitution automatically and prints a warning.

EdgeScroll [screen RANDRNAME] horizontal[p] vertical[p] [wrap | wrapx | wrapy]
    Specifies the percentage of a page to scroll when the cursor hits the edge of a page. The optional 'screen RANDRNAME' 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 'p' changes the interpretation to mean pixels. If you do not want any paging or scrolling when you hit the edge of a page include

        EdgeScroll 0 0

    in your config file, or possibly better, set the EdgeThickness to zero. See the EdgeThickness command. If you want whole pages, use

        EdgeScroll 100 100

    Both horizontal and vertical should be positive numbers.

    If the horizontal and vertical percentages are multiplied by 1000 or one of the keywords wrap, wrapx and wrapy is given then scrolling wraps around at the edge of the desktop. If

        EdgeScroll 100000 100000

    is used fvwm scrolls by whole pages, wrapping around at the edge of the desktop.

EdgeThickness [screen RANDRNAME] 0 | 1 | 2
    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.

    The optional 'screen RANDRNAME' specifies the RandR monitor which this setting should apply to, ignoring all other monitors. Without this option, it applies the value to all monitors.

    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’s 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’re having trouble with the pan frames and (assuming you do not use the mouse to flip between pages) should set the EdgeThickness to 0.

    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.

    2 is the default.

    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.

EwmhBaseStruts screen RANDRNAME left right top bottom
    Where left, right, top and bottom are positive or null integers which define bands at the edge of the screen. If screen is given, followed by the RANDRNAME of a given display, then the EwmhBaseStruts are defined for just RANDRNAME. left defines a band on the left of your screen of width left, right defines a band on the right of your screen of width right, top defines a band on the top of your screen of height top and bottom defines a band on the bottom of your screen of height bottom. 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 Extended Window Manager Hints section for a definition of the Working Area.

EwmhNumberOfDesktops num [max]
    This command is useful only for an ewmh compliant pager or taskbar (as kpager or kicker taskbar) and not for fvwm modules ( FvwmPager or FvwmIconMan). It causes a compliant application to consider at least num desktops (desktop 0 to desktop num-1). The optional argument max causes a compliant application to never consider more than max desktops. If max is 0 (the default) there is no limitation. The actual number of desktops is determined dynamically. It is at least num, 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 max or max is null. Moreover, a compliant pager can ask to change num itself. This is accepted by fvwm only if this number is less than or equal to max or if max is null. Note that negative desktops are not supported by the ewmh specification. The default is 4 0.

GotoDesk [screen RANDRNAME] [prev | arg1 [arg2] [min max]]
    Switches the current viewport to another desktop (workspace, room). The current monitor is used in per-monitor and shared DesktopConfiguration, unless the literal screen followed by a valid RandR monitor name is included.

    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 prev is given as the single argument, the last visited desk number is used.

    If arg1 is non zero then the next desktop number is the current desktop number plus arg1.

    If arg1 is zero then the new desktop number is arg2. (If arg2 is not present, then the command has no effect.)

    If min and max are given, the new desktop number is no smaller than min and no bigger than max. Values out of this range are truncated (if you gave an absolute desk number) or wrapped around (if you gave a relative desk number).

    The syntax is the same as for MoveToDesk, which moves a window to a different desktop.

    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.

GotoDeskAndPage screen | prev | desk xpage ypage
    Switches the current viewport to another desktop and page, similar to the GotoDesk and GotoPage commands. The new desk is desk and the new page is (xpage,ypage).

GotoPage screen | prev | [options] x[p] y[p]
    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 DesktopSize command. The lower left page is (0,N), and the lower right page is (M,N), where N is the desktop’s vertical size as specified in the DesktopSize command. To switch to a page relative to the current one add a trailing 'p' after any or both numerical arguments.

    Possible options are wrapx and wrapy to wrap around the x or y coordinate when the viewport is moved beyond the border of the desktop.

    The name of the RandR screen.

    To go to the last visited page use prev as the first argument. The GotoPage function should not be used in a pop-up menu.

    Examples:

        # 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

Scroll [screen RANDRNAME] [horizonal[p] vertical[p] | reverse]
    Scrolls the virtual desktop’s viewport by horizontal pages in the x-direction and vertical pages in the y-direction or starts interactive scrolling of the viewport. Either or both entries may be negative. Both horizontal and vertical values are expressed in percent of pages, so

        Scroll 100 100

    means to scroll down and right by one full page.

        Scroll 50 25

    means to scroll right half a page and down a quarter of a page. The Scroll function should not be called from pop-up menus. Normally, scrolling stops at the edge of the desktop.

    If the horizontal and vertical percentages are 100 or more and are multiplied by 1000 then scrolling wraps around at the edge of the desktop. If

        Scroll 100000 0

    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.

    If the letter 'p' is appended to each coordinate (horizontal and/or vertical), then the scroll amount is measured in pixels.

    Without arguments or if the option reverse is given interactive scrolling takes place. The viewport scrolls as the mouse is moved. With the reverse option scrolling is done in opposite direction of the mouse movement, and without it scrolling in the same direction as the mouse.

    The binding

        Mouse 1 A CM Scroll reverse

    gives an effect of grabbing and dragging the viewport with button 1 if Control and Meta is pressed.

    If screen 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 DesktopConfiguration and wanting to scroll a monitor other than the current monitor. Interactive scrolling always scrolls the current monitor.

  User Functions and Shell Commands

AddToFunc [name [I | J | M | C | H | D action]]
    Begins or adds to a function definition. Here is an example:

        AddToFunc Move-or-Raise I Raise
         + M Move
         + D Lower

    The function name is "Move-or-Raise", and it could be invoked from a menu or a mouse binding or key binding:

        Mouse 1 TS A Move-or-Raise

    The name 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 action tells what kind of action triggers the command which follows it. 'I' stands for "Immediate", and is executed as soon as the function is invoked. 'J' 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. 'M' stands for "Motion", i.e. if the user starts moving the mouse. 'C' stands for "Click", i.e., if the user presses and releases the mouse button. 'H' stands for "Hold", i.e. if the user presses a mouse button and holds it down for more than ClickTime milliseconds. 'D' stands for "Double-click". The action 'I' causes an action to be performed on the button-press, if the function is invoked with prior knowledge of which window to act on.

    There is a number of predefined symbols that are replaced by certain values if they appear on the command line. Please refer to the Command Expansion section for details.

    Warning Please read the comments on executing complex functions in the section Scripting and Complex Functions.

    Examples:

    If you call

        Key F10 R A Function MailFunction xmh "-font fixed"

    and "MailFunction" is

        AddToFunc MailFunction
         + I Next ($0) Iconify off
         + I Next (AcceptsFocus, $0) Focus
         + I None ($0) Exec exec $0 $1

    Then the last line of the function becomes

         + I None (xmh) Exec exec xmh -font fixed

    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

        Key F11 R A Function MailFunction zmail "-bg pink"

    in the same config, if you wanted. An example of using "$[w.id]" is:

        AddToFunc PrintFunction
         + I Raise
         + I Exec xdpr -id $[w.id]

    Note that "$$" is expanded to '$'.

    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:

        AddToFunc FuncIconifySameResource "I" All ($0) Iconify on
        Mouse 3 6 A FuncIconifySameResource $[w.resource]

Beep
    As might be expected, this makes the terminal beep.

DestroyFunc function
    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 AddToFunc.

        DestroyFunc PrintFunction

Echo string
    Prints a message to the debug log file, which requires logging to be enabled. See the -v option or PrintInfo for more information on both enabling debug logging and the log file location. Potentially useful for debugging things in your config or getting the value of variables.

        Echo Beginning style definitions...
        Echo Current desk $[desk.n].

EchoFuncDefinition function
    The EchoFuncDefinition is similar to the Echo command but prints the definition for the given function to the debug log file. It is useful to find out how fvwm handles quoting and for debugging functions.

Exec command
    Executes command. You should not use an ampersand '&' at the end of the command. You probably want to use an additional "exec" at the beginning of command. Without that, the shell that fvwm invokes to run your command stays until the command exits. In effect, you’ll 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.

    The following example binds function key

    in the root window, with no modifiers, to the exec function. The program rxvt is started with an assortment of options.

        Key F1 R N Exec exec rxvt -fg yellow -bg blue \
        -e /bin/tcsh

    Note that this function doesn’t wait for command to complete, so things like:

        Exec "echo AddToMenu ... > /tmp/file"
        Read /tmp/file

    do not work reliably (see the PipeRead command).

ExecUseShell [shell]
    Makes the Exec command use the specified shell, or the value of the $SHELL environment variable if no shell is specified, instead of the default Bourne shell (/bin/sh).

        ExecUseShell
        ExecUseShell /usr/local/bin/tcsh

Function FunctionName
    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’s title-bar.

        Mouse 1 T A Function Move-or-Raise

    The keyword Function may be omitted if FunctionName does not coincide with an fvwm command.

    Warning: Please read the comments on executing complex functions in the section Scripting and Complex Functions.

InfoStoreAdd key value
    Stores the value at the given key. 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.

    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 SetEnv 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’s wanted. Hence the point of InfoStoreAdd is to still allow for such information to be stored, but kept internal to fvwm.

    In this way, one can build up as many key/value pairs as needed. Recalling the value of a given key happens through fvwm’s usual expansion mechanism. See the Command Expansion section for more details. For example:

        InfoStoreAdd teddybearprog xteddy

        # Echo the value of teddybearprog
        Echo $[infostore.teddybearprog]

    Removing an entry from the InfoStore is done with the InfoStoreRemove command.

InfoStoreRemove key
    Removes an entry at the given key from the InfoStore. Example:

        InfoStoreRemove teddybearprog

Nop
    Does nothing. This is used to insert a blank line or separator in a menu. If the menu item specification is

        AddToMenu MyMenu " " Nop

    then a blank line is inserted. If it looks like

        + "" Nop

    then a separator line is inserted. Can also be used as the double-click action for Menu or Popup.

PipeRead command [quiet]
    Causes fvwm to read commands from the output of the command. This command is executed by /bin/sh 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 Quiet follows the command no message is produced if the command is not found.

    Example:

        AddToMenu HomeDirMenu
        PipeRead 'for i in $HOME/*; \
        do echo "+ $i Exec xterm -e vi $i"; done'

    Note: The PipeRead 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 PipeRead

        BusyCursor Read off

    The PipeRead command executes synchronously. If you want to Exec something, but need the command to run synchronously, you might do something like:

        PipeRead 'command 1>&2'

    The redirection causes any output from the program to go to stderr instead of being read as a sequence of commands by fvwm. PipeRead returns 1 if the given command could be executed or -1 if not (see the section Conditional Commands for the meaning of return codes).

Read filename [quiet]
    Causes fvwm to read commands from the file named filename. If the keyword Quiet follows the command no message is produced if the file is not found. If the file name does not begin with a slash ('/'), fvwm looks in the user’s data directory, then the system data directory. The user’s data directory is by default $HOME/.fvwm. It can be overridden by exporting FVWM_USERDIR set to any other directory. The Read command returns 1 if the given file could be read or -1 if not (see the section Conditional Commands for the meaning of return codes).

SetEnv variable value
    Set an environment variable to a new value, similar to the shell’s export or setenv command. The variable and its value are inherited by processes started directly by fvwm. For example:

        SetEnv height HEIGHT

Silent command
    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 Silent in front of the fvwm command. If a function that needs a window is called with Silent without a window selected, it simply returns without doing anything. If Silent is used on a user defined function it affects all function and sub function calls until the original function exits.

    Another usage of Silent is with binding commands Key, PointerKey and Mouse, this disables error messages.

    Silent also disables the error message for non-existent commands. Note: This command is treated as a prefix to its command. Expansion of the command line is done as if Silent was not there.

    Examples:

        Silent Move 0 0
        Silent User_defined_function
        # do not complain on keyboards without "Help" key
        Silent Key Help R A Popup HelpMenu

UnsetEnv [variable]
    Unset an environment variable, similar to shell’s export or unsetenv command. The variable then is removed from the environment array inherited by processes started directly by fvwm.

Wait window
    This command is intended to be used in fvwm functions only. It causes execution of a function to pause until a new window matching window appears. This can be a window’s name, class, or resource string. It may contain the wildcards '*' and '?', 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:

        AddToFunc InitFunction
         + I Exec exec xterm -geometry 80x64+0+0
         + I Wait xterm
         + I GotoDesk 0 2
         + I Exec exec xmh -font fixed -geometry \
         507x750+0+0
         + I Wait xmh
         + I GotoDesk 0 0

    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.

    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 FvwmIconMan or FvwmPager during a wait.

    You can escape from a Wait pause by pressing Ctrl-Alt-Escape (where Alt is the first modifier). To redefine this key sequence see the EscapeFunc command.

Status On | Off
    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’s happening in Fvwm. For example, the JSON could be manipulated and sent to tools such as lemonbar, polybar, etc.

    The format of the JSON blob looks like this:

        {
            "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
                        },
                    },
                },
             },
        }

    These sections repeat for all screens/groups/etc, depending on how many there are of each.

  Conditional Commands

Conditional commands are commands that are only executed if certain conditions are met. Most conditional commands work on windows, like Next, ThisWindow or All. There is one conditional command, Test, 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.

Return Codes
    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 Break 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 TestRc command. Please refer to the commands' description for examples. The return code can also be accessed through the variable $[cond.rc]. 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 AddToFunc command and are not inherited by sub functions. To run a command without altering the return code, the KeepRc command can be used.

The Ring of Windows
    Fvwm stores windows in a ring internally. Think of the focused window as a cursor on the current position in the ring. The Next command and many other commands search forwards through the ring for a matching window, and Prev searches backwards. The windows in the ring are either ordered by creation time (if the !FPSortWindowlistByFocus, NeverFocus or MouseFocus styles are used) or by the last time they had the focus.

List of Conditional Commands

    All [options] [(conditions)] command
        Execute command 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 options can be any combination of Reverse and UseStack. If the option Reverse is given the execution order is reversed. The option UseStack makes All use the stacking order instead of the window ring when walking through windows. See the Conditions section for a list of conditions.

        This command implies the conditions CirculateHit, CirculateHitIcon and CirculateHitShaded. They can be turned off by specifying !CirculateHit etc. explicitly.

    Any [(conditions)] command
        Performs command if any window which satisfies all conditions exists. The command is run in the context of the root window. See the Conditions section for a list of conditions.

    Break [levels]
        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 levels may be given to break out of the given number of nested functions and continue execution of a higher level function. The Break command always has the return code -2. Example:

            AddToFunc PickWindowRaiseAndDeiconify
            + I Pick
            + I TestRc (Error) Break
            + I Raise
            + I Iconify off

    Current [(conditions)] command
        Performs command on the currently focused window if it satisfies all conditions. See the Conditions section for a list of conditions.

        This command implies the conditions CirculateHit, CirculateHitIcon and CirculateHitShaded. They can be turned off by specifying !CirculateHit etc. explicitly.

    Direction [FromPointer] direction [(conditions)] command
        Performs command (typically Focus) on a window in the given direction which satisfies all conditions. 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 FromPointer option is given, the current position of the pointer is taken as the starting point. The direction may be one of "North", "Northeast", "East", "Southeast", "South", "Southwest", "West", "Northwest" and "Center". Which window Direction 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 Center direction simply selects the window closest to the starting point. Returns -1 if an invalid direction was given. See the Conditions section for a list of conditions.

    KeepRc command
        Runs the command but does not alter the return code of the previous command. Note: KeepRc is treated as a prefix to its command. Expansion of the command line is done as if KeepRc was not there.

    Next [(conditions)] command
        Performs command (typically Focus) on the next window which satisfies all conditions. 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 Conditions section for a list of conditions.

    None [(conditions)] command
        Performs command if no window which satisfies all conditions exists. The command is run in the context of the root window. Returns 1 if no window matches the conditions and 0 otherwise. See Conditions section for a list of conditions.

        This command implies the conditions CirculateHit, CirculateHitIcon and CirculateHitShaded. They can be turned off by specifying !CirculateHit etc. explicitly.

    NoWindow command
        Performs command, 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.

    Pick [(conditions)] command
        Pick works like Function 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 command in the context of that window. This avoids annoying multiple selections with complex functions. The command is executed only if the given conditions are met. Returns -1 if no window was selected. See Conditions section for a list of conditions.

        This command implies the conditions CirculateHit, CirculateHitIcon and CirculateHitShaded. They can be turned off by specifying !CirculateHit etc. explicitly.

    PointerWindow [(conditions)] command
        Performs command if the window under the pointer satisfies all conditions. Returns -1 if there is no window under the pointer. See Conditions section for a list of conditions.

        This command implies the conditions CirculateHit, CirculateHitIcon and CirculateHitShaded. They can be turned off by specifying !CirculateHit etc. explicitly.

    Prev [(conditions)] command
        Performs command (typically Focus) on the previous window which satisfies all conditions. 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 Conditions section for a list of conditions.

    ScanForWindow [FromPointer] dir1 dir2 [(conditions)] command
        Performs command (typically Focus) on a window in the given direction which satisfies all conditions. 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 FromPointer option is given, the current position of the pointer is taken as the starting point. The direction dir1 may be one of "North", "NorthEast", "East", "SouthEast", "South", "SouthWest", "West", and "NorthWest". Which window ScanForWindow selects depends first on the position along the primary axis given by dir1. If any windows have the exact same coordinate along the primary axis, the secondary direction is used to order the windows. The direction dir2 may be one of the same set of values as dir1. If dir2 is not perfectly perpendicular to dir1, 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 Conditions section for a list of conditions.

    Test [(test-conditions)] command
        Performs command if all test-conditions are satisfied. The test-conditions are keywords with possible arguments from the list below and are separated by commas or whitespace. They include: Version operator x.y.z, EnvIsSet varname, EnvMatch varname pattern, EdgeHasPointer direction, EdgeIsActive direction, Start, Init, Restart, Exit, Quit, ToRestart, True, False, F, R, W, X and I. A test-condition prefixed with "!" is negated.

        The Version operator x.y.z test-condition is fulfilled if the logical condition of the expression is true. Valid operator values are: >=, >, <=, <, == and !=.

        Example:

            Test (Version >= 2.5.11) Echo 2.5.11 or later.

        The EnvIsSet varname test-condition is true if the given environment variable is set. The EnvMatch varname pattern test-condition is true if pattern matches the given environment or infostore variable value. (See InfoStoreAdd). The pattern may contain special "*" and "?" chars. The "varname" is coded without the leading dollar sign ($).

        The EdgeHasPointer [direction] test-condition is true if the edge in the given direction currently contains the pointer. The EdgeIsActive [direction] 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, North, Top, Up, West, Left, South, Bottom, Down, Right* and * East. If no direction is specified Any* is assumed.

        The Start test-condition is the same as either Init or Restart. It is only true on startup or restart prior and during StartFunction execution. The Exit test-condition is the same as either Quit or ToRestart. It is only valid on shutdown during ExitFunction function execution.

        The True and False test-conditions are unconditionally true and false.

        Additionally, if a test-condition name is not recognized, the Error return code is set and the command is not executed.

        The F file, R file, W file, X file and I file test-conditions test for existence of the given [F]ile (possibly with [R]ead/[W]rite permissions), e[X]ecutable (in $PATH), or the [I]mage (in ImagePath).

        Example:

            AddToFunc StartFunction I Test (Init) Exec exec xterm

            AddToFunc VerifyVersion
            + I Test (Version 2.5.*) Echo 2.5.x detected
            + I TestRc (NoMatch) \
            Test (!Version 2.6.*) Echo Future version
            + I TestRc (NoMatch) \
            Echo 2.6.x is detected

            Test (F $[FVWM_USERDIR]/local-config) Read local-config
            Test (X xterm-utf16) Exec exec xterm-utf16

    TestRc [([!]returncode)] command
        Performs command if the last conditional command returned the value returncode. Instead of the numeric values 0 (no match), 1 (match), -1 (error), and -2 (break) the symbolic names "NoMatch", "Match", "Error" and "Break" can be used. If no returncode is given, the default 0 is assumed. If the return code is prefixed with '!', the command is executed if returncode does not match the value returned by the conditional command. The TestRc command can only be used inside functions. If the command is another conditional command, the previous return code is replaced by the new one. Example:

            AddToFunc ToggleXterm
            + I All (my_xtermwindow) Close
            + I TestRc (NoMatch) Exec xterm -T my_xtermwindow

    ThisWindow [(conditions)] command
        ThisWindow executes the specified command 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. ThisWindow is never interactive. The command is executed only if the given conditions are met. It returns -1 if used outside a window context. See Conditions section for a list of conditions.

        This command implies the conditions CirculateHit, CirculateHitIcon and CirculateHitShaded. They can be turned off by specifying "!CirculateHit" etc. explicitly.

    WindowId [id] [(conditions)] | [root] command
        The WindowId command looks for a specific window id and runs the specified command on it. The second form of syntax retrieves the window id of the root window. The window indicated by id 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 WarpToWindow command. Returns -1 if no window with the given id exists. See Conditions section for a list of conditions.

        This command implies the conditions CirculateHit, CirculateHitIcon and CirculateHitShaded. They can be turned off by specifying !CirculateHit etc. explicitly.

        Examples:

            WindowId 0x34567890 Raise
            WindowId root 1 WarpToWindow 50 50
            WindowId $0 (Silly_Popup) Delete

        In the past this command was mostly useful for functions used with the WindowList command, or for selective processing of FvwmEvent 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.

        Pick SetEnv BOOKMARKED_WINDOW $[w.id]
        WindowId $[BOOKMARKED_WINDOW] WarpToWindow

Conditions
    The conditions 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).

    In addition, the conditions 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 '*' and '?', and may consist of two or more alternatives, separated by the character '|', 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 '!', which prevents command if any of the window name, icon name, class or resource match. However, '!' 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.

    Examples:

        Next ("Netscape|konqueror|Mozilla*") WarpToWindow 99 90

    This goes to the next web browser window, no matter which of the three named web browsers is being used.

        Next ("Mozilla*", "Bookmark*") WarpToWindow 99 90

    This goes to Mozilla’s bookmark manager window, ignoring other Mozilla windows and other browsers' bookmark windows.

        All ("XTerm|rxvt", !console) Iconify

    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.

        Next (!"FvwmPager|FvwmForm*|FvwmButtons") Raise
        Next (!FvwmPager, !FvwmForm*, !FvwmButtons) Raise

    These two commands are equivalent; either one raises the next window which is not one of the named fvwm modules.

    Any condition can be negated by using a an exclamation mark ('!') directly in front of its name.

    AcceptsFocus, AnyScreen, CirculateHit, CirculateHitIcon, CirculateHitShaded, Closable, CurrentDesk, CurrentGlobalPage, CurrentGlobalPageAnyDesk, CurrentPage, CurrentPageAnyDesk, CurrentScreen, Desk, FixedPosition, FixedSize, Focused, HasBorders, HasHandles, HasPointer, HasTitle, TitleAtTop, TitleAtBottom, TitleAtLeft, TitleAtRight, Iconic, Iconifiable, Layer [n], Maximizable, Maximized, Overlapped, PlacedByButton n, PlacedByButton3, PlacedByFvwm, Raised, Shaded, State n, Sticky, StickyAcrossDesks, StickyAcrossPages, StickyIcon, StickyAcrossDesksIcon, StickyAcrossPagesIcon, Transient, Visible.

    The AcceptsFocus 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 Lenience option of the Style command. Also, all windows using the NeverFocus style are ignored. Note: !Lenience is equivalent to the deprecated option NoLenience.

    With the AnyScreen condition used together with any of the Current... conditions, windows that do not intersect the screen containing the mouse pointer are considered for a match too. For example:

        # Focus next window on current page,
        # regardless of screen
        Next (CurrentPage, AnyScreen) Focus

    The CirculateHit and CirculateHitIcon options override the CirculateSkip and CirculateSkipIcon Style attributes for normal or iconic windows. The CirculateHitShaded option overrides the CirculateSkipShaded Style. All three options are turned on by default for the Current command. They can be turned off by specifying !CirculateHit etc. explicitly. Note: Do not confuse these conditions with the style options of the same name. Specifically,

        Style foo CirculateSkip
        Next (foo, CirculateHit) ...

    is not the same as

        Style foo CirculateHit ...
        Next (foo)

    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.

    The Closable condition matches only windows that are allowed to be closed.

    The CurrentDesk condition matches only windows that are on the current desk.

    The CurrentGlobalPage 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 CurrentDesk condition.

    The CurrentGlobalPageAnyDesk condition matches only windows that are on the current page of any desk, regardless of RandR screen .

    The CurrentPage condition matches only windows that are on the current page of the current desk. This condition implicitly activates the CurrentDesk condition.

    The CurrentPageAnyDesk and CurrentScreen conditions matches only windows that are on the current page of any desk.

    The Screen [name] condition matches only windows which are on the specified screen.

    The Desk [n] condition matches only windows which are on the specified desk.

    The FixedPosition condition excludes all windows that do not have a fixed position, either set through WM hints or the Style option FixedPosition. Example:

        DestroyFunc ToggleFixedGeometry
        AddToFunc   ToggleFixedGeometry
        + I Pick (FixedPosition) \
        WindowStyle VariablePosition, VariableSize
        + I TestRc (NoMatch) WindowStyle FixedPosition, FixedSize

    The FixedSize condition excludes all windows that do not have a fixed size, either set through WM hints or the Style option FixedSize.

    The Focused matches on the window that currently has the keyboard focus. This is not useful for the Current command but can be used with the other conditional commands.

    The HasBorders condition excludes all windows that do not have borders.

    The HasHandles condition excludes all windows that do not have resize handles.

    The HasPointer condition excludes all windows that do not contain the pointer.

    The HasTitle condition excludes all windows that do not have a titlebar.

    The TitleAtTop, TitleAtBottom, TitleAtLeft, TitleAtRight conditions test for the titlebar at that window location.

    The Iconic condition matches only iconic windows.

    The Iconifiable condition matches only windows that are allowed to be iconified.

    The Layer [n] condition matches only windows on the specified layer. The optional argument of the Layer condition defaults to the layer of the focused window. The negation !Layer switches off the Layer condition.

    The Maximizable condition matches only windows that are allowed to be maximized.

    The Maximized condition matches only maximized windows.

    The Overlapped condition matches only windows that are overlapped by other windows on the same layer (or unmanaged windows if the option RaiseOverUnmanaged of the BugOpts 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.

    The PlacedByButton n condition is fulfilled if the last interactive motion of the window (with the Move command or as ManualPlacement) was ended by pressing mouse button n. Example:

        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

    The PlacedByButton3 condition has the same meaning as PlacedByButton 3. It remains only for backward compatibility.

    The PlacedByFvwm condition excludes all windows that have been placed manually or by using the user or program position hint.

    The Raised conditions matches only windows that are fully visible on the current viewport and not overlapped by any other window.

    The Shaded conditions matches only shaded windows (see WindowShade command).

    The State n or !State n conditions match only windows with the specified integer state set (or unset). See the State command for details. The argument may range from 0 to 31.

    The Sticky, StickyAcrossDesks and StickyAcrossPages match only windows that are currently sticky, sticky across all desks or sticky across all pages. Please refer to the Style options with the same name and the commands Stick, StickAcrossDesks and StickAcrossPages for details.

    The StickyIcon, StickyAcrossDesksIcon and StickyAcrossPagesIcon match only windows that become sticky, sticky across all desks or sticky across all pages when they are in iconified state.

    The Transient 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 FvwmIdent module can be used to find out whether a specific window is transient.

    The Visible condition matches only windows that are at least partially visible on the current viewport and not completely overlapped by other windows.

  Module Commands

Fvwm maintains a database of module configuration lines in a form

    *<ModuleName>: <Config-Resource>

where <ModuleName> is either a real module name or an alias.

This database is initially filled from config file (or from output of -cmd config command), and can be later modified either by user (via FvwmCommand) or by modules.

When modules are run, they read appropriate portion of database. (The concept of this database is similar to one used in X resource database).

Commands for manipulating module configuration database are described below.

* module_config_line
    Defines a module configuration. module_config_line 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.

        *FvwmPager: WindowBorderWidth 1
        *FvwmButtons-TopRight: Geometry 100x100-0+0
        *FvwmButtons-Bottom: Geometry +0-0

DestroyModuleConfig module_config
    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.

    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’t have wildcards.

        DestroyModuleConfig FvwmButtons*
        DestroyModuleConfig FvwmForm: Fore
        DestroyModuleConfig FvwmIconMan: Tips*

KillModule modulename [modulealias]
    Causes the module which was invoked with name modulename to be killed. The name may include wildcards. If modulealias is given, only modules started with the given alias are killed.

        # kill all pagers
        KillModule FvwmPager

        Module FvwmEvent SoundEvent
        KillModule FvwmEvent SoundEvent

Module modulename [moduleparams]
    Specifies a module with its optional parameters which should be spawned. Currently several modules, including FvwmButtons, FvwmEvent, FvwmForm, FvwmPager, FvwmScript support aliases. Aliases are useful if more than one instance of the module should be spawned. Aliases may be configured separately using * syntax. To start a module FvwmForm using an alias MyForm, the following syntax may be used:

        Module FvwmForm MyForm

    At the current time the available modules (included with fvwm) are FvwmAnimate (produces animation effects when a window is iconified or de-iconified), FvwmAuto (an auto raise module), FvwmBacker (to change the background when you change desktops), FvwmBanner (to display a spiffy XBM, XPM, PNG or SVG), FvwmButtons (brings up a customizable tool bar), FvwmCommandS (a command server to use with shell’s FvwmCommand client), FvwmConsole (to execute fvwm commands directly), FvwmEvent (trigger various actions by events), FvwmForm (to bring up dialogs), FvwmIconMan (a flexible icon manager), FvwmIdent (to get window info), FvwmPager (a mini version of the desktop), FvwmPerl (a Perl manipulator and preprocessor), FvwmProxy (to locate and control obscured windows by using small proxy windows), FvwmRearrange (to rearrange windows), FvwmScript (another powerful dialog toolkit), These modules have their own man pages. There may be other modules out on there as well.

    Modules can be short lived transient programs or, like FvwmButtons , 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 Module may be omitted if modulename is distinct from all fvwm commands.

ModuleListenOnly modulename [moduleparams]
    This command works like the Module 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 FvwmButtons module to implement a simple clock.

ModulePath path
    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.

    The ModulePath may contain environment variables such as $HOME (or ${HOME}). Further, a '+' in the path is expanded to the previous value of the path, allowing easy appending or prepending to the path.

    For example:

        ModulePath ${HOME}/lib/fvwm/modules:+

    The directory containing the standard modules is available via the environment variable $FVWM_MODULEDIR.

ModuleSynchronous [Expect string] [Timeout secs] modulename
    The ModuleSynchronous command is very similar to Module. 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 Timeout is given fvwm gives up if the module sent no input back to fvwm for secs seconds. If the Expect option is given, fvwm waits for the given string instead. ModuleSynchronous 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.

    Warning: 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 ModuleSynchronous command by using the key sequence

    (see the EscapeFunc).

ModuleTimeout timeout
    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. timeout must be greater than zero, or it is reset to the default value of 30 seconds.

SendToModule modulename string
    Sends an arbitrary string (no quotes required) to all modules, whose alias or name matching modulename, 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.

  Session Management Commands

Quit
    Exits fvwm, generally causing X to exit too.

Restart [window_manager [params]]
    Causes fvwm to restart itself if window_manager is left blank, or to switch to an alternate window manager (or other fvwm version) if window_manager is specified. If the window manager is not in your default search path, then you should use the full path name for window_manager.

    This command should not have a trailing ampersand. The command can have optional parameters with simple shell-like syntax. You can use ~ (is expanded to the user’s home directory) and environmental variables $VAR or ${VAR}. Here are several examples:

        Key F1 R N Restart
        Key F1 R N Restart fvwm1 -f .fvwmrc
        Key F1 R N Restart xterm -n '"X console"' -T \"X\ console\" -e fvwm

    Note, currently with multi headed displays, restart of fvwms on different screens works independently.

Restart --pass-args window_manager
    The same as Restart without parameters but the name for the current window manager is replaced with the specified window_manager and original arguments are preserved.

Restart --dont-preserve-state [other-params]
    The same as

        Restart [other-params]

    but it does not save any window states over the restart.

    Without this option, Restart preserves most per-window state by writing it to a file named .fs-restart-$HOSTDISPLAY in the user’s home directory.

SaveSession
    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.

SaveQuitSession
    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.

  Colorsets

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.

Colorset num [options]
    Creates or modifies colorset num. Colorsets are identified by this number. The number can start at zero and can be a very large number.

    Warning: The highest colorset number used determines memory consumption. Thus, if you define 'Colorset 100000', the memory for 100001 colorsets is used. Keep your colorset numbers as small as possible.

    By convention, colorsets are numbered like this:

        # 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

    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:

    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.

    options 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.

    fg, Fore and Foreground take a color name as an argument and set the foreground color. The special name Contrast 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.

    bg, Back and Background 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 Average may be used to select a color that is the average color of the pixmap. If the pixmap is tinted with the Tint option, the tint is not taken in account in the computation of the average color. You should use the bgTint option to get the "real" average color. The background color is reset to the default value if the color name is omitted.

    hi, Hilite and Hilight 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.

    sh, Shade and Shadow 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.

    fgsh takes a color name as an argument and sets the color used by the shadowing font effect. See the Font Shadow Effects 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.

    Pixmap, TiledPixmap and AspectPixmap take a file name as an argument, search the ImagePath 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. TiledPixmap produces repeated copies of the image with no scaling, Pixmap causes the image to be stretched to fit whatever object the colorset is applied to and AspectPixmap stretches to fit but retains the image aspect ratio.

    Transparent creates a transparent background pixmap. The pixmap is used as a window background to achieve root transparency. For this you should use the ParentalRelativity option to the Style command. A subsequent root background change may be detected or not, this depends on the program used to set the background. If you use fvwm-root, xsetbg (xli), FvwmBacker with solid or colorset colors or a recent version of Esetroot (>= 9.2) a background change is detected. If background changes are not detected (e.g., if you use xv or xsetroot) you can force detection by using the -d option of fvwm-root:

        xv -root -quit mybg.png; fvwm-root -d

    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.

    Using outline move and resize (see the OpaqueMoveSize command and the ResizeOpaque Style option) as well as setting the WindowShadeShrinks style may help. The transparency achieved with Transparent 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:

        Colorset 12 VGradient 200 grey30 grey60
        Colorset 17 Transparent
        *FvwmIconMan: Colorset 12
        *FvwmIconMan: PlainColorset 17

    gives an IconMan with a vertical grey gradient background and the buttons use the background (by transparency). To obtain a (root) transparent IconMan:

        Colorset 12 Transparent
        Colorset 17 Transparent
        Colorset 18 Transparent
        Colorset 19 Transparent

        *FvwmIconMan: Colorset 12
        *FvwmIconMan: PlainColorset 17
        *FvwmIconMan: FocusColorset 18
        *FvwmIconMan: IconColorset  19

    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:

        FvwmButtons:(Colorset 10, Swallow "FvwmIconMan" 'FvwmIconMan')

    then, FvwmIconMan becomes a child of FvwmButtons and it is transparent relative to FvwmButtons. So, in this case FvwmIconMan uses Colorset 10 as background. If you want root transparency use the RootTransparent option. FvwmButtons FvwmIconMan, and FvwmIdent, 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 FvwmProxy is simpler, the two colorsets refer to the window backgrounds. FvwmPager 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 FvwmForm and FvwmScript 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. Tint may work or not with the Transparent option. When the colorset is drawn on the foreground Tint 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 RootTransparent option.

    RootTransparent [ buffer ] creates a root transparent background. To make this option work, you must use an Esetroot compatible program, fvwm-root with the --retain-pixmap option or FvwmBacker with the RetainPixmap option (and colorset or solid backgrounds). The buffer keyword is useful only when the Tint 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 buffer. 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.

    Shape, TiledShape and AspectShape take a file name as an argument, search the ImagePath and use it as the shape bitmap. TiledShape produces repeated copies of the bitmap with no scaling, Shape causes the bitmap to be stretched to fit whatever object the colorset is applied to and AspectShape 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).

    Warning Due to the way X11 implements shapes you cannot take back making windows shaped. You may have to restart fvwm or the shaped application.

    ?Gradient ... creates a pixmap and stretches it to fit the window. ?Gradient may be one of HGradient, VGradient, DGradient, BGradient, SGradient, CGradient, RGradient or YGradient. 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 Color Gradients section for the syntax of gradients.

    Tint takes 2 arguments, a color and a percentage between 0 and 100. It causes the image defined using ?Pixmap or ?Gradient to be tinted with the specified color using the percentage. If the image is transparent Tint tints only the image part. Unfortunately, a colorset background specified using the Transparent option can give strange results. See the Transparent option for details. With no arguments this option removes the tint.

    fgTint takes 2 arguments, a color and a percentage between 0 and 100. It causes the color defined using fg to be tinted with the specified color using the percentage. With no arguments this option removes the tint.

    bgTint takes 2 arguments, a color and a percentage between 0 and 100. It causes the color defined using bg to be tinted with the specified color using the percentage. If the sh and hi colors are not specified, they are recomputed from the tinted bg color. With no arguments this option removes the tint.

    Alpha takes a percentage between 0 and 100 as an argument. It causes fvwm to merge the image defined using ?Pixmap or ?Gradient with the bg 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.

    fgAlpha 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 Font Names and Font Loading section. The default is 100 and it is restored if no argument is given.

    Dither causes fvwm to dither the image defined using ?Pixmap or ?Gradient. 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. NoDither causes fvwm to do not dither the images. Dither 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 NoDither, however this effect can be useful with images which contain a lot of close colors. For example a fine gradient looks more smooth.

    IconTint 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 Icon FvwmButtons button option) ...etc. With no arguments this option removes the icon tint.

    IconAlpha 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.

    Note: 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.

    NoShape removes the shape mask from the colorset while Plain removes the background pixmap or gradient.

    Examples

        Colorset 3 fg tan, bg navy

    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.

        Colorset 3 bg "navy blue"

    changes the background color of colorset 3 to navy blue. The foreground and pixmap are unchanged.

        Colorset 3 AspectPixmap large_murky_dungeon.xpm

    causes depression.

        Colorset 3 bg Average

    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.

        Colorset 3 YGradient 200 3 blue 1000 navy 1 blue 1000 navy

    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.

        #!/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

    Makes colorset 7 blink.

    The color names used in colorsets are saved as fvwm variables which can be substituted in any fvwm command. For example:

        AddToFunc InitFunction
        + I Exec exec xterm -fg $[fg.cs0] -bg $[bg.cs0]

    Where $[fg.cs0] is the foreground color of colorset zero. Please refer to the Command Expansion section for more information.

CleanupColorsets
    Resets a definition of all colorsets.

Color Gradients
    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: HGradient is a horizontal gradient, VGradient is vertical, DGradient is diagonal from top left to bottom right, BGradient is backwards diagonal from bottom left to top right, SGradient is concentric squares, CGradient is concentric circles, RGradient is a radar like pattern and YGradient is a Yin Yang style (but without the dots).

    The color gradient syntax has two forms:

    ?Gradient colors start-color end-color

    This form specifies a linear gradient. The arguments denote the total number of colors to allocate (between 2 and 1000), the initial color and the final color.

    Example:

        TitleStyle VGradient 20 rgb:b8/ce/bc rgb:5b/85/d0

    ?Gradient colors segments color length color [length color] ...

    The second form specifies a nonlinear gradient. The arguments are: the total number of colors to allocate (between 2 and 1000), then the number of segments. For each segment, specify the starting color, a relative length, 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.

    Examples:

        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

    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:

    Turn hilighting of the active menu item other than foreground color off:

        MenuStyle <style> Hilight3DOff, !HilightBack

    Make sure sub menus do not overlap the parent menu. This can prevent menus being redrawn every time a sub menu pops up or down.

        MenuStyle <style> PopupOffset 1 100

    Run your X server with backing storage. If your X Server is started with the -bs option, turn it off. If not try the -wm and +bs options:

        startx -- -wm +bs

    You may have to adapt this example to your system (e.g. if you use xinit to start X).