Provided by: fvwm3_1.0.6a+ds-1build1_amd64 bug

NAME

       fvwm3all - F? Virtual Window Manager for X11 - meta-man page

OVERVIEW

       fvwm3 contains many features. Because of this, the documentation is split into a number of
       different sections. This man page contains all those sections which can also be found in
       these separate manpages:

       fvwm3commands       builtin fvwm3commands.
       fvwm3menus          commands/options relating to fvwm3menus.
       fvwm3styles         style options for handling windows, menus, etc.

SYNOPSIS

       fvwm3 [-c config-command] [-d displayname] [-f config-file] [-o logfile] [-s [screen_num]]
       [-v]

DESCRIPTION

       Fvwm is a window manager for X11 optimised for speed.

       Fvwm is intended to have a small memory footprint and is extremely customizable and
       extendible. A large virtual desktop and multiple disjoint desktops can be used separately
       or together. The virtual desktop pretends that the video screen is really quite large, and
       you can scroll around within the desktop. The multiple disjoint desktops pretend there are
       really several screens to work at, but each screen is completely unrelated to the others.

       Fvwm provides keyboard accelerators that allow one to perform practically all window
       manager functions, including moving and resizing windows and operating the menus, using
       keyboard shortcuts.

       Fvwm does not distinguish between configuration and action commands. Configuration
       commands typically set fonts, colors, menu contents, and key and mouse function bindings,
       while action commands do things like raising and lowering windows. Fvwm makes no such
       distinction and allows anything to be changed at any time.

OPTIONS

       These are the command line options that are recognized by fvwm:

       -i | --clientid id
           This option is used when fvwm is started by a session manager. Should not be used by a
           user.

       -c | --cmd config-command
           Causes fvwm to use config-command instead of 'Read config' (or 'Read .fvwm2rc') as its
           initialization command. (Note that up to 10 -f and -c parameters can be given, and
           they are executed in the order specified.)

           Any module started by command line arguments is assumed to be a module that sends back
           config commands. All command line modules have to quit before fvwm proceeds on to the
           StartFunction and setting border decorations and styles. There is a potential deadlock
           if you start a module other than FvwmCpp/FvwmM4/FvwmPerl but there is a timeout so
           fvwm eventually gets going.

           As an example, starting the pager this way hangs fvwm until the timeout, but the
           following should work well:

           fvwm -c "AddToFunc StartFunction I Module FvwmPager"

       -d | --display displayname
           Manage the display called displayname instead of the name obtained from the
           environment variable $DISPLAY.

       -f config-file
           Causes fvwm to read config-file instead of ~/.fvwm/config as its initialization file.
           $FVWM_USERDIR can also be used to change location of default user directory ~/.fvwm.

       -o logfile
           Write log messages to logfile. If logfile is '-', log to the console. (Does not turn
           on logging, see the -v option.)

       -h | --help
           A short usage description is printed.

       -r | --replace
           Try to take over from a previously running wm. This does not work unless the other wm
           is ICCCM2 2.0 compliant.

       -F | --restore state-file
           This option is used when fvwm is started by a session manager. Should not be used by a
           user.

       -s | --single-screen [screen_num]
           On a multi-screen display, run fvwm only on the screen named in the $DISPLAY
           environment variable or provided through the -d option. The optional argument
           screen_num should be positive or null and override the screen number. Normally, fvwm
           attempts to start up on all screens of a multi-screen display.

       -V | --version
           Prints the version of fvwm to stderr. Also prints an information about the compiled in
           features as stated at compiletime.

       -C | --visual visual-class
           Causes fvwm to use visual-class for the window borders and menus. visual-class can be
           "StaticGray", "GrayScale", "StaticColor", "PseudoColor", "TrueColor" or "DirectColor".

       -I | --visualid id
           Causes fvwm to use id as the visual id for the window borders and menus. id can be
           specified as N for decimal or 0xN for hexadecimal. See man page of xdpyinfo for a list
           of supported visuals.

       -l | --color-limit limit
           Specifies a limit on the colors used in image, gradient and possibly simple colors
           used by fvwm. In fact, fvwm (and all the modules) uses a palette with at most limit
           colors. This option is only useful with screens that display 256 colors (or less) with
           a dynamic visual (PseudoColor, GrayScale or DirectColor). The default depends on your
           X server and how you run fvwm. In most case this default is reasonable. The -l option
           should be used only if you encounter problems with colors. By default, fvwm tries to
           detect large pre-allocated palettes. If such a palette is detected fvwm uses it and a
           priori the -l must not be used. Moreover, in this case the -A and -S options are
           forced. Note that XFree-4.2 pre-allocates 244 colors (if you use a driver with Render
           support) leaving only a few free colors. This may lead to some color problems (and
           nothing can be done). XFree-4.3 or better pre-allocate only 85 colors. If no
           pre-allocated palette is auto detected the defaults are as follow:

           Display depth 8 (256 colors)

               PseudoColor: 68 (4x4x4 color cube + 4 grey)
               GrayScale: 64 regular grey
               DirectColor: 32 (3x3x3 color cube + 5 grey)

           Display depth 4 (16 colors)

               PseudoColor: 10 (2x2x2 color cube + 2 grey)
               GrayScale: 8 regular grey
               DirectColor: 10 (2x2x2 color cube + 2 grey)

           Note that if you use a private color map (i.e., fvwm is started with the -C or the -I
           options), then other defaults are used.

           Now what to do if you encounter problems with colors? The first thing to do is to
           check if you really cannot run your X server with depth 15, 16 or better. Check your X
           server documentation. Note that some hardware can support two different depths on the
           same screen (typically depth 8 and depth 24). If depth 8 is the default, you can force
           fvwm to use the best depth by using the -C option with TrueColor as argument. So now
           we assume that you are forced to run in depth 8 with a dynamic visual because your
           hardware/driver cannot do better or because you need to use an application which needs
           to run under this mode (e.g., because this application needs read-write colors). What
           it should be understand is that you have only 256 colors and that all the applications
           which use the default color map must share these colors. The main problem is that
           there are applications which use a lot or even all the colors. If you use such
           application you may have no more free colors and some applications (which used only a
           few colors) may fail to start or are unusable. There are three things that can be done
           (and fvwm does not really play a particular role, all applications are concerned). The
           first is to run the applications which waste your (default) color map with a private
           color map. For example, run netscape with the -install option, run KDE or QT
           applications with the --cmap option, use the -C option for fvwm. The disadvantage of
           this method is that it is visually disturbing (see the ColormapFocus command for a
           better control of the color maps switching). The second method is to limit the number
           of colors that the applications use. Again, some applications have options to specify
           a given color limit. With fvwm you may try various values, 61 (a special "visual"
           palette), 56 (a 4x4x3 color cube plus 6 grey), 29 (a 3x3x3 color cube plus 2 grey), 10
           or 9. Also, you may use the -L option. However, limiting the number of colors is not
           the definitive solution. The definitive solution is to try cause applications which
           use a lot of colors use the same colors. This is a difficult task as there are no
           formal standards for this goal. However, some toolkits as QT and GTK use color cubes
           as palettes. So, the idea is to configure your applications/toolkits to all use the
           same color cube. Moreover, you can use the colors in this color cube in your X
           resources configuration files and/or as arguments to colors options. Fvwm can use any
           color cube of the form RxGxB with 2 ⇐ R ⇐ 6, R = G, R-1 =< B ⇐ R and B >= 2. To get an
           RxGxB color cube give an argument to -l an integer c >= R*G*B and < (R+1)(G+1)*B if
           B=R and < R*G(B+1) if B < R (and different from 61). If c > R*G*B, then some grey may
           be added to the color cube. You can use the PrintInfo Colors [1] command to get
           information on your fvwm colors setting. In particular, this command prints the
           palette used by fvwm in rgb format (the last integer gives the number of times fvwm
           has allocated the colors).

       -L | --strict-color-limit
           If the screen displays 256 colors (or less) and has a dynamic visual, causes fvwm to
           use its palette for all the colors. By default, the palette is used only for images
           and gradients.

       -P | --visual-palette
           If the screen displays 256 colors (or less) and has a dynamic visual, this option
           causes fvwm to use a palette designed for limiting the "visual" color distance between
           the points of the palette. Moreover, for better color sharing, if possible colors with
           a name in the X rgb data base are used for defining the colors (with the hope that
           applications and images prefer to use named colors). If the -l option is not used this
           palette has 61 colors. This palette is also automatically selected if 61 or 9 is used
           as argument to the -l option.

       -A | --allocate-palette
           If the screen displays 256 colors (or less) and has a dynamic visual this option
           causes fvwm to allocate all the colors of its palette at start up for reserving these
           colors for future use. This option forces the -static-palette option. By default, fvwm
           allocates (reserves) a color in its palette only if it needs this color.

       -S | --static-palette
           If the screen displays 256 colors (or less) and has a dynamic visual this option
           causes fvwm to never free the colors in its palette. By default, when fvwm does not
           need a color any more it frees this color so that a new color can be used. This option
           may speed up image loading and save a few bits of memory.

       --debug-stack-ring
           Enables stack ring debugging. This option is only intended for internal debugging and
           should only be used by developers.

       -v | --verbose
           Enables debug logging. Writes in append mode to fvwm log file, which is
           ~/.fvwm/fvwm3-output.log by default. See ENVIRONMENT section on how to override this
           location on fvwm3 startup using $FVWM_USERDIR or $FVWM3_LOGFILE .

           Logging can also be dynamically toggled on and off using signals:

               SIGUSR1 : used as a signal to restart Fvwm
               SIGUSR2 : used as a signal to toggle opening/closing debug log file

ANATOMY OF A WINDOW

       Fvwm puts a decorative border around most windows. This border consists of a bar on each
       side and a small L-shaped section on each corner. There is an additional top bar called
       the title-bar which is used to display the name of the window. In addition, there are up
       to 10 title-bar buttons. The top, side, and bottom bars are collectively known as the
       side-bars. The corner pieces are called the frame.

       With the built-in minimal configuration, dragging mouse button 1 in the frame or side-bars
       begins a resize operation on the window. Dragging mouse button 2 in the frame or side-bars
       begins a move operation. There are raise/lower operations bound to a single clicking on
       borders. Similarly for the window title.

       Up to ten title-bar buttons may exist. Their use is completely user definable. One popular
       configuration uses one button on the left that is used to bring up a list of window
       options and two buttons on the right used to iconify and maximize the window. Another
       popular configuration adds a close button to the right. The number of title-bar buttons
       used depends on which ones have mouse actions bound to them. See the Mouse command.

THE VIRTUAL DESKTOP

       Fvwm provides multiple virtual desktops for users who wish to use them. The screen is a
       viewport onto a desktop which may be larger than the screen. Several distinct desktops can
       be accessed (concept: one desktop for each project, or one desktop for each application,
       when view applications are distinct). Since each desktop can be larger than the physical
       screen, divided into m by n pages which are each the size of the physical screen, windows
       which are larger than the screen or large groups of related windows can easily be viewed.

       The (m by n) size (i.e. number of pages) of the virtual desktops can be changed any time,
       by using the DesktopSize command. All virtual desktops must be (are) the same size. The
       total number of distinct desktops does not need to be specified, but is limited to
       approximately 4 billion total. All windows on a range of desktops can be viewed in the
       FvwmPager, a miniature view of the desktops. The pager is an accessory program, called a
       module, which is not essential for the window manager to operate. Windows may also be
       listed using the WindowList command or the FvwmIconMan module.

       Fvwm keeps the windows on the desktop in a layered stacking order; a window in a lower
       layer never obscures a window in a higher layer. The layer of a window can be changed by
       using the Layer command. The concept of layers is a generalization of the StaysOnTop flag
       of older fvwm versions. The StaysOnTop and StaysPut Style options are now implemented by
       putting the windows in suitable layers and the previously missing StaysOnBottom Style
       option has been added.

       Sticky windows are windows which transcend the virtual desktop by "Sticking to the
       screen’s glass". They always stay put on the screen. This is convenient for things like
       clocks and xbiffs, so you only need to run one such gadget and it always stays with you.
       Icons can also be made to stick to the glass, if desired.

       Window geometries are specified relative to the current viewport. That is:

           xterm -geometry +0+0

       creates a window in the upper left hand corner of the visible portion of the screen. It is
       permissible to specify geometries which place windows on the virtual desktop, but off the
       screen. For example, if the visible screen is 1000 by 1000 pixels, and the desktop size is
       3x3, and the current viewport is at the upper left hand corner of the desktop, invoking:

           xterm -geometry +1000+1000

       places a window just off of the lower right hand corner of the screen. It can be found by
       moving the mouse to the lower right hand corner of the screen and waiting for it to scroll
       into view. A geometry specified as something like:

           xterm -geometry -5-5

       places the window’s lower right hand corner 5 pixels from the lower right corner of the
       visible portion of the screen. Not all applications support window geometries with
       negative offsets. Some applications place the window’s upper right hand corner 5 pixels
       above and to the left of the upper left hand corner of the screen; others may do just
       plain bizarre things.

       There are several ways to cause a window to map onto a desktop or page other than the
       currently active one. The geometry technique mentioned above (specifying x,y coordinates
       larger than the physical screen size), however, suffers from the limitation of being
       interpreted relative to the current viewport: the window may not consistently appear on a
       specific page, unless you always invoke the application from the same page.

       A better way to place windows on a different page, screen or desk from the currently
       mapped viewport is to use the StartsOnPage or StartsOnScreen style specification (the
       successors to the older StartsOnDesk style) in your config file. The placement is
       consistent: it does not depend on your current location on the virtual desktop.

       Some applications that understand standard Xt command line arguments and X resources, like
       xterm and xfontsel, allow the user to specify the start-up desk or page on the command
       line:

           xterm -xrm "*Desk:1"

       starts an xterm on desk number 1;

           xterm -xrm "*Page:3 2 1"

       starts an xterm two pages to the right and one down from the upper left hand page of desk
       number 3. Not all applications understand the use of these options, however. You could
       achieve the same results with the following lines in your .Xdefaults file:

           XTerm*Desk: 1

       or

           XTerm*Page: 3 2 1

USE ON MULTI-SCREEN DISPLAYS

       If the -s command line argument is not given, fvwm automatically starts up on every screen
       on the specified display. After fvwm starts each screen is treated independently. Restarts
       of fvwm need to be performed separately on each screen. The use of

           EdgeScroll 0 0

       is strongly recommended for multi-screen displays. You may need to quit on each screen to
       quit from the X session completely. This is not to be confused with RandR support.

RANDR SUPPORT

       Fvwm supports the RandR X11 protocol. If Fvwm has been compiled wiith RandR support then
       it tracks the outputs (displays) which it finds. These outputs are stored by name, which
       can be found by running using the xrand(1) command.

       In doing so, Fvwm tracks events from RandR, such as when a given output changes size, or
       has been removed. In such cases, Fvwm will react by moving windows. If an output is
       removed, those windows on that removed output will be moved to the next active output (the
       output which contains the mouse pointer). If the same output reappears, Fvwm will move
       those windows back again.

       In addition to specific FvwmEvent conditions which can be used to track a monitor’s
       change, there is a function called RandRFunc which the user can define to be run when a
       screen event occurs (such as enabling/disabling/resolution change):

           DestroyFunc RandRFunc
           AddToFunc   RandRFunc
           + I Exec exec xmessage "A screen changed"

DESKTOP BEHAVIOUR

       Because Fvwm has the capability to track outputs, Fvwm can be told how to handle those.
       This is controlled via the DesktopConfiguration command. By default, Fvwm treats all
       outputs it finds as one large screen, although Fvwm can be told to treat screens
       indepedantly of each other.

INITIALIZATION

       During initialization, fvwm searches for a configuration file which describes key and
       button bindings, and many other things. The format of these files is described later. Fvwm
       first searches for configuration files using the command

           Read config

       This looks for file config in $FVWM_USERDIR and $FVWM_DATADIR directories, as described in
       Read. If this fails more files are queried for backward compatibility. Here is the
       complete list of all file locations queried in the default installation (only the first
       found file is used):

           $HOME/.fvwm/config
           /usr/local/share/fvwm/config

           $HOME/.fvwm/.fvwm2rc
           $HOME/.fvwm2rc
           /usr/local/share/fvwm/.fvwm2rc
           /usr/local/share/fvwm/system.fvwm2rc
           /etc/system.fvwm2rc

       Please note, the last 5 locations are not guaranteed to be supported in the future.

       If a configuration file is not found, the left mouse button, or

       or

       keys on the root window bring up menus and forms that can create a starting configuration
       file.

       Fvwm sets two environment variables which are inherited by its children. These are
       $DISPLAY which describes the display on which fvwm is running. $DISPLAY may be unix:0.0 or
       :0.0, which doesn’t work too well when passed through ssh to another machine, so
       $HOSTDISPLAY is set to a network-ready description of the display. $HOSTDISPLAY always
       uses the TCP/IP transport protocol (even for a local connection) so $DISPLAY should be
       used for local connections, as it may use Unix-domain sockets, which are faster.

       If you want to start some applications or modules with fvwm, you can simply put

           Exec app

       or

           Module FvwmXxx

       into your config, but it is not recommended; do this only if you know what you are doing.
       It is usually important to start applications or modules after the entire config is read,
       because it contains styles or module configurations which can affect window appearance and
       functionality.

       The standard way to start applications or modules on fvwm’s start up is to add them to an
       initialization function (usually StartFunction or InitFunction). This way they are only
       started after fvwm finishes to read and execute config file.

       Fvwm has three special functions for initialization: StartFunction, which is executed on
       startups and restarts; InitFunction and RestartFunction, which are executed during
       initialization and restarts (respectively) just after StartFunction. These functions may
       be customized in a user’s config file using the AddToFunc command (described later) to
       start up modules, xterms, or whatever you’d like to have started by fvwm.

       Fvwm has also a special exit function: ExitFunction, executed when exiting or restarting
       before actually quitting. It could be used to explicitly kill modules, etc.

       If fvwm is run under a session manager, functions SessionInitFunction and
       SessionRestartFunction are executed instead of InitFunction and RestartFunction. This
       helps to define the user’s config file to be good for both running under a session manager
       and without it. Generally it is a bad idea to start xterms or other applications in
       "Session*" functions. Also someone can decide to start different modules while running
       under a session manager or not. For the similar purposes SessionExitFunction is used
       instead of ExitFunction.

           DestroyFunc StartFunction
           AddToFunc StartFunction
            + I Module FvwmPager * *
            + I Module FvwmButtons

           DestroyFunc InitFunction
           AddToFunc InitFunction
            + I Module FvwmBanner
            + I Module FvwmIconMan
            + I Exec xsetroot -solid cyan
            + I Exec xterm
            + I Exec netscape

           DestroyFunc RestartFunction
           AddToFunc RestartFunction
            + I Module FvwmIconMan

           DestroyFunc SessionInitFunction
           AddToFunc SessionInitFunction
            + I Module FvwmBanner

           DestroyFunc SessionRestartFunction
           AddToFunc SessionRestartFunction
            + I Nop

       You do not need to define all special functions if some are empty. Also note, all these
       special functions may be emulated now using StartFunction and ExitFunction, like this:

           DestroyFunc StartFunction
           AddToFunc StartFunction
           + I Test (Init) Module FvwmBanner
           + I Module FvwmPager * *
           + I Test (Restart) Beep

           DestroyFunc ExitFunction
           AddToFunc ExitFunction
           + I Test (Quit) Echo Bye-bye
           + I KillModule MyBuggyModule
           + I Test (ToRestart) Beep

COMPILATION OPTIONS

       Fvwm has a number of compile-time options. If you have trouble using a certain command or
       feature, check to see if support for it was included at compile time. Optional features
       are described in the config.h file that is generated during compilation.

ICONS AND IMAGES

       Fvwm can load .xbm, .xpm, .png and .svg images. XBM images are monochrome. Fvwm can always
       display XBM files. XPM and PNG formats are color images. SVG is a vector graphics image
       format. Compile-time options determine whether fvwm can display XPM, PNG or SVG icons and
       images. See the INSTALL.fvwm file for more information.

       The related SHAPE compile-time option can make fvwm display spiffy shaped icons.

   SVG rendering options
       SVG images are generated from (XML) text files. A really simple SVG file might look
       something like this:

           <svg width="120" height="80">
           <rect fill="red"     width="40" height="40"  x="0"   y="0"  />
           <rect fill="lime"    width="40" height="40"  x="40"  y="0"  />
           <rect fill="blue"    width="40" height="40"  x="80"  y="0"  />
           <rect fill="cyan"    width="40" height="40"  x="0"   y="40" />
           <rect fill="magenta" width="40" height="40"  x="40"  y="40" />
           <rect fill="yellow"  width="40" height="40"  x="80"  y="40" />
           </svg>

       By default, SVG images are rendered as the image creator intended them to. But since SVG
       is a vector graphics format, the images can be rendered at any chosen size and rotation,
       e.g. making it possible to use the same icon file rendered at different sizes for the Icon
       and MiniIcon styles.

       The rendering options are specified as a string appended to the SVG filename as follows:

           _image.svg_:[!] [(1) _size_] [(2) _position_] [(3) _rotation_] [(4)
           _scale_] ...

           {empty}(1) [-]_width_{x}[-]_height_

           {empty}(2) {- | +}_xpos_{- | +}_ypos_

           {empty}(3) @[-]_angle_

           {empty}(4) {* | }[-]_factor_[x | y]

       The option string always starts with a colon (':') to separate it from the filename. An
       empty option string can skip this colon, but it might still be a good idea to include it
       to prevent ambiguity if the filename contains any colon.

           filename_without_colon.svg
           filename:with:colon.svg:

       An exclamation point ('!') transposes the entire final image (including the rendering
       area), i.e. all the horizontal and all the vertical coordinates are swapped with each
       other.

           image.svg:!

       width and height specifies the dimensions of the rendering area in pixels, i.e. the
       dimensions of the resulting image. The actual image is fitted to fill the entire rendering
       area.

           image.svg:60x60

       Use a width or height value of 0 to keep the aspect ratio.

           image.svg:0x60
           image.svg:60x0

       A '-' before width mirrors the rendering area horizontally.

           image.svg:-0x0

       A '-' before height mirrors the rendering area vertically.

           image.svg:0x-0

       xpos and ypos specifies a translation of the image in pixels. A positive xpos value moves
       the image to the right. A positive ypos value moves it down. Moving it partially outside
       of the rendering area results in a cropped image.

           image.svg:-30-0
           image.svg:-0+10
           image.svg:-30+10

       angle specifies a rotation around the actual image center in degrees. This might result in
       a cropped image. A positive value rotates the image clockwise. Floating point values are
       recognized.

           image.svg:@180
           image.svg:@-90
           image.svg:@30
           image.svg:@57.3

       factor specifes a scaling of the actual image (not the rendering area). Scaling it up
       results in a cropped image. Floating point values are recognized. Division by zero is
       ignored. If factor is directly followed by a 'x' or a 'y', the scaling is horizontal or
       vertical respectively. Otherwise the scaling is uniform.

           image.svg:*2
           image.svg:/2
           image.svg:/3x
           image.svg:/2y

       Scaling down a translated or rotated image can prevent cropping.

           image.svg:@30*0.6

       Repeated usage of translation, rotation, and scaling is allowed. Translation and rotation
       are additive. Scaling is multiplicative.

           image.svg:*2/3
           image.svg:/3x/2y

       When combining affine transformations, the scaling is always done first, then the
       rotation, and finally the translation.

           image.svg:-30+10@30/3x/2y

       Use a negative scale factor to mirror the actual image.

           image.svg:-30+10@30/-3x/2y

       Mirroring of the rendering area is done after any scaling, rotation or translation of the
       image.

           image.svg:-0x0-30+10@30/3x/2y

       Transposing is done last of all, after everything else.

           image.svg:!-0x0-30+10@30/3x/2y

MODULES

       A module is a separate program which runs as a separate Unix process but transmits
       commands to fvwm to execute. Users can write their own modules to do any weird or bizarre
       manipulations without bloating or affecting the integrity of fvwm itself.

       Modules must be spawned by fvwm so that it can set up two pipes for fvwm and the module to
       communicate with. The pipes are already open for the module when it starts and the file
       descriptors for the pipes are provided as command line arguments.

       Modules can be spawned by fvwm at any time during the X session by use of the Module
       command. Modules can exist for the duration of the X session, or can perform a single task
       and exit. If the module is still active when fvwm is told to quit, then fvwm closes the
       communication pipes and waits to receive a SIGCHLD from the module, indicating that it has
       detected the pipe closure and has exited. If modules fail to detect the pipe closure fvwm
       exits after approximately 30 seconds anyway. The number of simultaneously executing
       modules is limited by the operating system’s maximum number of simultaneously open files,
       usually between 60 and 256.

       Modules simply transmit commands to the fvwm command engine. Commands are formatted just
       as in the case of a mouse binding in the config setup file. Certain auxiliary information
       is also transmitted, as in the sample module FvwmButtons.

       Please refer to the Module Commands section for details.

ICCCM COMPLIANCE

       Fvwm attempts to be ICCCM 2.0 compliant. Check http://tronche.com/gui/x/icccm/ for more
       info. In addition, ICCCM states that it should be possible for applications to receive any
       keystroke, which is not consistent with the keyboard shortcut approach used in fvwm and
       most other window managers. In particular you cannot have the same keyboard shortcuts
       working with your fvwm and another fvwm running within Xnest (a nested X server running in
       a window). The same problem exists with mouse bindings.

       The ICCCM states that windows possessing the property

           WM_HINTS(WM_HINTS):
           Client accepts input or input focus: False

       should not be given the keyboard input focus by the window manager. These windows can take
       the input focus by themselves, however. A number of applications set this property, and
       yet expect the window manager to give them the keyboard focus anyway, so fvwm provides a
       window style, Lenience, which allows fvwm to overlook this ICCCM rule. Even with this
       window style it is not guaranteed that the application accepts focus.

       The differences between ICCCM 1.1 and 2.0 include the ability to take over from a running
       ICCCM 2.0 compliant window manager; thus

           fvwm; vi ~/.fvwm/config; fvwm -replace

       resembles the Restart command. It is not exactly the same, since killing the previously
       running wm may terminate your X session, if the wm was started as the last client in your
       .Xclients or .Xsession file.

       Further additions are support for client-side colormap installation (see the ICCCM for
       details) and the urgency hint. Clients can set this hint in the WM_HINTS property of their
       window and expect the window manager to attract the user’s attention to the window. Fvwm
       has two re-definable functions for this purpose, "UrgencyFunc" and "UrgencyDoneFunc",
       which are executed when the flag is set/cleared. Their default definitions are:

           AddToFunc UrgencyFunc
            + I Iconify off
            + I FlipFocus
            + I Raise
            + I WarpToWindow !raise 5p 5p
           AddToFunc UrgencyDoneFunc
            + I Nop

EXTENDED WINDOW MANAGER HINTS

       Fvwm attempts to respect the extended window manager hints (ewmh or EWMH for short)
       specification: https://specifications.freedesktop.org/wm-spec/wm-spec-1.3.html and some
       extensions of this specification.

       This support is configurable with styles and commands. These styles and commands have EWMH
       as the prefix (so you can find them easily in this man page).

       There is a new Context 'D' for the Key, PointerKey, Mouse commands. This context is for
       desktop applications (such as kdesktop and Nautilus desktop).

       When a compliant taskbar asks fvwm to activate a window (typically when you click on a
       button which represents a window in such a taskbar), then fvwm calls the complex function
       EWMHActivateWindowFunc which by default is Iconify Off, Focus and Raise. You can redefine
       this function. For example:

           DestroyFunc EWMHActivateWindowFunc
           AddToFunc EWMHActivateWindowFunc I Iconify Off
           + I Focus
           + I Raise
           + I WarpToWindow 50 50

       additionally warps the pointer to the center of the window.

       The EWMH specification introduces the notion of Working Area. Without ewmh support the
       Working Area is the full visible screen (or all your screens if you have a multi head
       setup with RandR). However, compliant applications (such as a panel) can ask to reserve
       space at the edge of the screen. If this is the case, the Working Area is your full
       visible screen minus these reserved spaces. If a panel can be hidden by clicking on a
       button the Working Area does not change (as you can unhide the panel at any time), but the
       Dynamic Working Area is updated: the space reserved by the panel is removed (and added
       again if you pop up the panel). The Dynamic Working Area may be used when fvwm places or
       maximizes a window. To know if an application reserves space you can type "xprop | grep
       _NET_WM_STRUT" in a terminal and select the application. If four numbers appear then these
       numbers define the reserved space as explained in the EwmhBaseStruts command.

CONFIGURATION

   Configuration Files
       The configuration file is used to describe mouse and button bindings, colors, the virtual
       display size, and related items. The initialization configuration file is typically called
       config (or .fvwm2rc). By using the Read command, it is easy to read in new configuration
       files as you go.

       Lines beginning with '#' are ignored by fvwm. Lines starting with '*' are expected to
       contain module configuration commands (rather than configuration commands for fvwm
       itself). Like in shell scripts embedded newlines in a configuration file line can be
       quoted by preceding them with a backslash. All lines linked in this fashion are treated as
       a single line. The newline itself is ignored.

       Fvwm makes no distinction between configuration commands and action commands, so anything
       mentioned in the fvwm commands section can be placed on a line by itself for fvwm to
       execute as it reads the configuration file, or it can be placed as an executable command
       in a menu or bound to a mouse button or a keyboard key. It is left as an exercise for the
       user to decide which function make sense for initialization and which ones make sense for
       run-time.

   Supplied Configuration
       A sample configuration file, is supplied with the fvwm distribution. It is well commented
       and can be used as a source of examples for fvwm configuration. It may be copied from
       /usr/local/share/fvwm/config file.

       Alternatively, the built-in menu (accessible when no configuration file is found) has
       options to create an initial config file for the user.

FONTS

   Font names and font loading
       The fonts used for the text of a window title, icon titles, menus and geometry window can
       be specified by using the Font and IconFont Style, the Font MenuStyle and the DefaultFont
       commands. Also, all the Modules which use text have configuration command(s) to specify
       font(s). All these styles and commands take a font name as an argument. This section
       explains what is a font name for fvwm and which fonts fvwm loads.

       First, you can use what we can call a usual font name, for example,

           -adobe-courier-bold-r-normal--10-100-75-75-m-60-ISO8859-1
           -adobe-courier-bold-r-normal--10-*
           -*-fixed-medium-o-normal--14-*-ISO8859-15

       That is, you can use an X Logical Font Description (XLFD for short). Then the "first" font
       which matches the description is loaded and used. This "first" font depends of your font
       path and also of your locale. Fonts which match the locale charset are loaded in priority
       order. For example with

           -adobe-courier-bold-r-normal--10-*

       if the locale charset is ISO8859-1, then fvwm tries to load a font which matches

           -adobe-courier-bold-r-normal--10-*-ISO8859-1

       with the locale charset ISO8859-15 fvwm tries to load

           -adobe-courier-bold-r-normal--10-*-ISO8859-15.

       A font name can be given as an extended XLFD. This is a comma separated list of (simple)
       XLFD font names, for example:

           -adobe-courier-bold-r-normal--14-*,-*-courier-medium-r-normal--14-*

       Each simple font name is tried until a matching font with the locale charset is found and
       if this fails each simple font name is tried without constraint on the charset.

       More details on the XLFD can be found in the X manual page, the X Logical Font Description
       Conventions document (called xlfd) and the XLoadFont and XCreateFontSet manual pages. Some
       useful font utilities are: xlsfonts, xfontsel, xfd and xset.

       If you have Xft support you can specify an Xft font name (description) of a true type (or
       Type1) font prefixed by "xft:", for example:

           "xft:Luxi Mono"
           "xft:Luxi Mono:Medium:Roman:size=14:encoding=iso8859-1"

       The "first" font which matches the description is loaded. This first font depends on the
       XftConfig configuration file with Xft1 and on the /etc/fonts/fonts.conf file with Xft2.
       One may read the Xft manual page and the fontconfig man page with Xft2. The first string
       which follows "xft:" is always considered as the family. With the second example Luxi Mono
       is the Family (Other XFree TTF families: "Luxi Serif", "Luxi Sans"), Medium is the Weight
       (other possible weights: Light, DemiBold, Bold, Black), Roman is the slant or the style
       (other possibilities: Regular, Oblique, Italic) size specifies the point size (for a pixel
       size use pixelsize=), encoding allows for enforce a charset (iso8859-1 or iso10646-1 only;
       if no encoding is given the locale charset is assumed). An important parameter is
       "minspace=bool" where bool is True or False. If bool is False (the default?) Xft gives a
       greater font height to fvwm than if bool is True. This may modify text placement, icon and
       window title height, line spacing in menus and FvwmIdent, button height in some fvwm
       modules ...etc. With a LCD monitor you may try to add "rgba=mode" where mode is either
       rgb, bgr, vrgb or vbgr to enable subpixel rendering. The best mode depends on the way your
       LCD cells are arranged. You can pass other specifications in between ":", as
       "foundry=foundry_name", "spacing=type" where type can be monospace, proportional or
       charcell, "charwidth=integer", "charheight=integer" or "antialias=bool" where bool is True
       or False. It seems that these parameters are not always taken in account.

       To determine which Xft fonts are really loaded you can export XFT_DEBUG=1 before starting
       fvwm and take a look to the error log. With Xft2 you may use fc-list to list the available
       fonts. Anyway, Xft support is experimental (from the X and the fvwm point of view) and the
       quality of the rendering depends on number of parameters (the XFree and the freetype
       versions and your video card(s)).

       After an Xft font name you can add after a ";" an XLFD font name (simple or extended) as:

           xft:Verdana:pixelsize=14;-adobe-courier-bold-r-normal--14-*

       then, if either loading the Xft font fails or fvwm has no Xft support, fvwm loads the font
       "-adobe-courier-bold-r-normal—14-*". This allows for writing portable configuration files.

   Font and string encoding
       Once a font is loaded, fvwm finds its encoding (or charset) using its name (the last two
       fields of the name). fvwm assumes that the strings which are displayed with this font use
       this encoding (an exception is that if an iso10646-1 font is loaded, then UTF-8 is assumed
       for string encoding). In a normal situation, (i) a font is loaded by giving a font name
       without specifying the encoding, (ii) the encoding of the loaded font is the locale
       encoding, and then (iii) the strings in the fvwm configuration files should use the locale
       encoding as well as the window and icon name. With Xft the situation is bit different as
       Xft supports only iso10646-1 and iso8859-1. If you do not specify one of these encodings
       in the Xft font name, then fvwm does strings conversion using (iii). Note that with
       multibyte fonts (and in particular with "CJK" fonts) for good text rendering, the locale
       encoding should be the charset of the font.

       To override the previous rules, it is possible to specify the string encoding in the
       beginning of a font description as follow:

           StringEncoding=enc:_full_font_name_

       where enc is an encoding supported by fvwm (usually font name charset plus some unicode
       encodings: UTF-8, USC-2, USC-4 and UTF-16).

       For example, you may use an iso8859-1 locale charset and have an FvwmForm in Russian using
       koi8-r encoding. In this case, you just have to ask FvwmForm to load a koi8-r font by
       specifying the encoding in the font name. With a multibyte language, (as multibyte font
       works well only if the locale encoding is the charset of the font), you should use an
       iso10646-1 font:

           StringEncoding=jisx0208.1983-0:-*-fixed-medium-r-*-ja-*-iso10646-1

       or

           "StringEncoding=jisx0208.1983-0:xft:Bitstream Cyberbit"

       if your FvwmForm configuration uses jisx0208.1983-0 encoding. Another possibility is to
       use UTF-8 encoding for your FvwmForm configuration and use an iso10646-1 font:

           -*-fixed-medium-r-*-ja-*-iso10646-1

       or

           "StringEncoding=UTF-8:xft:Bitstream Cyberbit"

       or equivalently

           "xft:Bitstream Cyberbit:encoding=iso10646-1"

       In general iso10646-1 fonts together with UTF-8 string encoding allows the display of any
       characters in a given menu, FvwmForm etc.

       More and more, unicode is used and text files use UTF-8 encoding. However, in practice the
       characters used range over your locale charset. For saving memory (an iso10646-1 font may
       have a very large number of characters) or because you have a pretty font without an
       iso10646-1 charset, you can specify the string encoding to be UTF-8 and use a font in the
       locale charset:

           StringEncoding=UTF-8:-*-pretty_font-*-12-*

       In most cases, fvwm correctly determines the encoding of the font. However, some fonts do
       not end with valid encoding names. When the font name isn’t normal, for example:

           -misc-fixed-*--20-*-my_utf8-36

       you need to add the encoding after the font name using a slash as a delimiter. For
       example:

           MenuStyle * Font -misc-fixed-*--20-*-my_utf8-36/iso10646-1

       If fvwm finds an encoding, fvwm uses the iconv system functions to do conversion between
       encodings. Unfortunately, there are no standards. For conversion between iso8859-1 and
       UTF-8: a GNU system uses "ISO-8859-1" and other systems use "iso881" to define the
       converters (these two names are supported by fvwm). Moreover, in some cases it may be
       necessary to use machine specific converters. So, if you experience problems you can try
       to get information on your iconv implementation ("man iconv" may help) and put the name
       which defines the converter between the font encoding and UTF-8 at the end of the font
       name after the encoding hint and a / (another possible solution is to use GNU libiconv).
       For example use:

           Style * Font -misc-fixed-*--14-*-iso8859-1/*/latin1

       to use latin1 for defining the converter for the iso8859-1 encoding. The "*" in between
       the "/" says to fvwm to determine the encoding from the end of the font name. Use:

           Style * Font \
           -misc-fixed-*--14-*-local8859-6/iso8859-6/local_iso8859_6_iconv

       to force fvwm to use the font with iso8859-6 as the encoding (this is useful for
       bi-directionality) and to use local_iso8859_6_iconv for defining the converters.

   Font Shadow Effects
       Fonts can be given 3d effects. At the beginning of the font name (or just after a possible
       StringEncoding specification) add

           Shadow=size [offset] [directions]]:

       size is a positive integer which specifies the number of pixels of shadow. offset is an
       optional positive integer which defines the number of pixels to offset the shadow from the
       edge of the character. The default offset is zero. directions is an optional set of
       directions the shadow emanates from the character. The directions are a space separated
       list of fvwm directions:

       N, North, Top, t, Up, u, -

       E, East, Right, r, Right, r, ]

       S, South, Bottom, b, Down, d, _

       W, West, Left, l, Left, l, [

       NE, NorthEast, TopRight, tr, UpRight, ur, ^

       SE, SouthEast, BottomRight, br, DownRight, dr, >

       SW, SouthWest, BottomLeft, bl, DownLeft, dl, v

       NW, NorthWest, TopLeft, tl, UpLeft, ul, <

       C, Center, Centre, .

       A shadow is displayed in each given direction. All is equivalent to all the directions.
       The default direction is BottomRight. With the Center direction, the shadow surrounds the
       whole string. Since this is a super set of all other directions, it is a waste of time to
       specify this along with any other directions.

       The shadow effect only works with colorsets. The color of the shadow is defined by using
       the fgsh option of the Colorset command. Please refer to the Colorsets section for details
       about colorsets.

       Note: It can be difficult to find the font, fg, fgsh and bg colors to make this effect
       look good, but it can look quite good.

BI-DIRECTIONAL TEXT

       Arabic and Hebrew text require bi-directional text support to be displayed correctly, this
       means that logical strings should be converted before their visual presentation, so
       left-to-right and right-to-left sub-strings are determined and reshuffled. In fvwm this is
       done automatically in window titles, menus, module labels and other places if the fonts
       used for displaying the text are of one of the charsets that require bidi (bi-directional)
       support. For example, this includes iso8859-6, iso8859-8 and iso10646-1 (unicode), but not
       other iso8859-* fonts.

       This bi-directional text support is done using the fribidi library compile time option,
       see INSTALL.fvwm.

KEYBOARD SHORTCUTS

       Almost all window manager operations can be performed from the keyboard so mouse-less
       operation should be possible. In addition to scrolling around the virtual desktop by
       binding the Scroll command to appropriate keys, Popup, Move, Resize, and any other command
       can be bound to keys. Once a command is started the pointer is moved by using the up,
       down, left, and right arrows, and the action is terminated by pressing return. Holding
       down the Shift key causes the pointer movement to go in larger steps and holding down the
       control key causes the pointer movement to go in smaller steps. Standard emacs and vi
       cursor movement controls can be used instead of the arrow keys.

SESSION MANAGEMENT

       Fvwm supports session management according to the X Session Management Protocol. It saves
       and restores window position, size, stacking order, desk, stickiness, shadiness,
       maximizedness, iconifiedness for all windows. Furthermore, some global state is saved.

       Fvwm doesn’t save any information regarding styles, decors, functions or menus. If you
       change any of these resources during a session (e.g. by issuing Style commands or by using
       various modules), these changes are lost after saving and restarting the session. To
       become permanent, such changes have to be added to the configuration file.

       Note further that the current implementation has the following anomaly when used on a
       multi-screen display: Starting fvwm for the first time, fvwm manages all screens by
       forking a copy of itself for each screen. Every copy knows its parent and issuing a Quit
       command to any instance of fvwm kills the master and thus all copies of fvwm. When you
       save and restart the session, the session manager brings up a copy of fvwm on each screen,
       but this time they are started as individual instances managing one screen only. Thus a
       Quit kills only the copy it was sent to. This is probably not a very serious problem,
       since with session management, you are supposed to quit a session through the session
       manager anyway. If it is really needed,

           Exec exec killall fvwm

       still kills all copies of fvwm. Your system must have the killall command though.

BOOLEAN ARGUMENTS

       A number of commands take one or several boolean arguments. These take a few equivalent
       inputs: "yes", "on", "true", "t" and "y" all evaluate to true while "no", "off", "false",
       "f" and "n" evaluate to false. Some commands allow "toggle" too which means that the
       feature is disabled if it is currently enabled and vice versa.

BUILTIN KEY AND MOUSE BINDINGS

       The following commands are built-in to fvwm:

           Key Help R A Popup MenuFvwmRoot
           Key F1 R A Popup MenuFvwmRoot
           Key Tab A M WindowList Root c c NoDeskSort
           Key Escape A MC EscapeFunc

           Mouse 1 R A Menu MenuFvwmRoot
           Mouse 1 T   A FuncFvwmRaiseLowerX Move
           Mouse 1 FS  A FuncFvwmRaiseLowerX Resize
           Mouse 2 FST A FuncFvwmRaiseLowerX Move

           AddToFunc FuncFvwmRaiseLowerX
           + I Raise
           + M $0
           + D Lower

       The Help and F1 keys invoke a built-in menu that fvwm creates. This is primarily for new
       users that have not created their own configuration file. Either key on the root
       (background) window pops up an menu to help you get started.

       The Tab key pressed anywhere with the Alt key (same as the key on PC keyboards) held down
       pop-ups a window list.

       Mouse button 1 on the title-bar or side frame can move, raise or lower a window.

       Mouse button 1 on the window corners can resize, raise or lower a window.

       You can override or remove these bindings. To remove the window list binding, use this:

           Key Tab A M -

COMMAND EXECUTION

   Module and Function Commands
       If fvwm encounters a command that it doesn’t recognize, it checks to see if the specified
       command should have been

           Function (rest of command)

       or

           Module (rest of command)

       This allows complex functions or modules to be invoked in a manner which is fairly
       transparent to the configuration file.

       Example: the config file contains the line

           HelpMe

       Fvwm looks for an fvwm command called "HelpMe", and fails. Next it looks for a
       user-defined complex function called "HelpMe". If no such function exists, fvwm tries to
       execute a module called "HelpMe".

   Delayed Execution of Commands
       Note: There are many commands that affect look and feel of specific, some or all windows,
       like Style, Mouse, Colorset, TitleStyle and many others. For performance reasons such
       changes are not applied immediately but only when fvwm is idle, i.e. no user interaction
       or module input is pending. Specifically, new Style options that are set in a function are
       not applied until after the function has completed. This can sometimes lead to unwanted
       effects.

       To force that all pending changes are applied immediately, use the UpdateStyles, Refresh
       or RefreshWindow commands.

QUOTING

       Quotes are required only when needed to make fvwm consider two or more words to be a
       single argument. Unnecessary quoting is allowed. If you want a quote character in your
       text, you must escape it by using the backslash character. For example, if you have a
       pop-up menu called "Window-Ops", then you do not need quotes:

           Popup Window-Ops

       but if you replace the dash with a space, then you need quotes:

           Popup "Window Ops"

       The supported quoting characters are double quotes, single quotes and reverse single
       quotes. All three kinds of quotes are treated in the same way. Single characters can be
       quoted with a preceding backslash. Quoting single characters works even inside other kinds
       of quotes.

COMMAND EXPANSION

       Whenever an fvwm command line is executed, fvwm performs parameter expansion. A parameter
       is a '$' followed by a word enclosed in brackets ($[...]) or a single special character.
       If fvwm encounters an unquoted parameter on the command line it expands it to a string
       indicated by the parameter name. Unknown parameters are left untouched. Parameter
       expansion is performed before quoting. To get a literal '$' use "$$".

       If a command is prefixed with a '-' parameter expansion isn’t performed. This applies to
       the command immediately following the '-', in which the expansion normally would have
       taken place. When uesed together with other prefix commands it must be added before the
       other prefix.

       Example:

           Pick -Exec exec xmessage '$[w.name]'

       opens an xmessage dialog with "$[w.name]" unexpanded.

       The longer variables may contain additional variables inside the name, which are expanded
       before the outer variable.

       In earlier versions of fvwm, some single letter variables were supported. It is deprecated
       now, since they cause a number of problems. You should use the longer substitutes instead.

       Example:

           # Print the current desk number, horizontal page number
           # and the window's class (unexpanded here, no window).
           Echo $[desk.n] $[page.nx] $[w.class]

       Note: If the command is called outside a window context, it prints "$[w.class]" instead of
       the class name. It is usually not enough to have the pointer over a window to have a
       context window. To force using the window with the focus, the Current command can be used:

           Current Echo $[desk.n] $[page.nx] $[w.class]

       The parameters known by fvwm are:

       $$
           A literal '$'.

       $.
           The absolute directory of the currently Read file. Intended for creating relative and
           relocatable configuration trees. If used outside of any read file, the returned value
           is '.'.

       $0 to $9
           The positional parameters given to a complex function (a function that has been
           defined with the AddToFunc command). "$0" is replaced with the first parameter, "$1"
           with the second parameter and so on. If the corresponding parameter is undefined, the
           "$..." is deleted from the command line.

       $*
           All positional parameters given to a complex function. This includes parameters that
           follow after "$9".

       $[n]
           The n:th positional parameter given to a complex function, counting from 0. If the
           corresponding parameter is undefined, the "$[n]" is deleted from the command line. The
           parameter is expanded unquoted.

       $[n-m]
           The positional parameters given to a complex function, starting with parameter n and
           ending with parameter m. If all the corresponding parameters are undefined, the
           "$[...]" is deleted from the command line. If only some of the parameters are defined,
           all defined parameters are expanded, and the remaining silently ignored. All
           parameters are expanded unquoted.

       $[n-]
           All the positional parameters given to a complex function, starting with parameter n.
           If all the corresponding parameters are undefined, the "$[...]" is deleted from the
           command line. All parameters are expanded unquoted.

       $[*]
           All the positional parameters given to a complex function. This is equivalent of
           $[0-].

       $[version.num]
           The version number, like "2.6.0".

       $[version.info]
           The version info, which contains the SHA of the latest commit (if compiled from git),
           or "(relesaed)" if a compiled from a release tarball.

       $[version.line]
           The first line printed by the --version command line option.

       $[vp.x] $[vp.y] $[vp.width] $[vp.height]
           Either coordinate or the width or height of the current viewport.

       $[wa.x] $[wa.y] $[wa.width] $[wa.height]
           Either coordinate or the width or height of the EWMH working area.

       $[dwa.x] $[dwa.y] $[dwa.width] $[dwa.height]
           Either coordinate or the width or height of the dynamic EWMH working area.

       $[desk.n]
           The current desk number.

       $[desk.name<n>]
           These parameters are replaced with the name of the desktop number <n> that is defined
           with the DesktopName command. If no name is defined, then the default name is
           returned.

       $[desk.width] $[desk.height]
           The width or height of the whole desktop, i.e. the width or height multiplied by the
           number of pages in x or y direction.

       $[desk.pagesx] $[desk.pagesy]
           The number of total pages in a desk in x or y direction. This is the same as the
           values set by DesktopSize.

       $[page.nx] $[page.ny]
           The current page numbers, by X and Y axes, starting from 0. page is equivalent to area
           in the GNOME terminology.

       $[w.id]
           The window-id (expressed in hex, e.g. 0x10023c) of the window the command was called
           for or "$[w.id]" if no window is associated with the command.

       $[w.name] $[w.iconname] $[w.class] $[w.resource] $[w.visiblename] $[w.iconfile]
       $[w.miniiconfile] $[w.iconfile.svgopts] $[w.miniiconfile.svgopts]
           The window’s name, icon name, resource class and resource name, visible name, file
           name of its icon or mini icon defined with the Icon or MiniIcon style (including the
           full path if the file was found on disk), and (if fvwm is compiled with SVG support)
           the icon or mini icon svg rendering options (including the leading colon), or
           unexpanded "$[w.<attribute>]" string if no window is associated with the command.

           Note, the first 5 variables may include any kind of characters, so these variables are
           quoted. It means that the value is surrounded by single quote characters and any
           contained single quote is prefixed with a backslash. This guarantees that commands
           like:

               Style $[w.resource] Icon norm/network.png

           work correctly, regardless of any special symbols the value may contain, like spaces
           and different kinds of quotes.

           In the case of the window’s visible name, this is the value returned from the literal
           title of the window shown in the titlebar. Typically this will be the same as
           $[w.name] once expanded, although in the case of using IndexedWindowName then this is
           more useful a distinction, and allows for referencing the specific window by its
           visible name for inclusion in things like Style commands.

       $[w.x] $[w.y] $[w.width] $[w.height]
           Either coordinate or the width or height of the current window if it is not iconified.
           If no window is associated with the command or the window is iconified, the string is
           left as is.

       $[w.pagex] $[w.pagey]
           The X or Y page the window is on.

       $[w.desk]
           The number of the desk on which the window is shown. If the window is sticky the
           current desk number is used.

       $[w.layer]
           The layer of the window.

       $[w.screen]
           The screen name the window is on. If RandR is not present, this does not expand.

       $[cw.x] $[cw.y] $[cw.width] $[cw.height]
           These work like $[w.…] but return the geometry of the client part of the window. In
           other words: the border and title of the window is not taken into account.

       $[i.x], $[it.x], $[ip.x] $[i.y], $[it.y], $[ip.y] $[i.width], $[it.width], $[ip.width]
       $[i.height], $[it.height], $[ip.height]
           These work like $[w.…] but return the geometry of the icon ($[i.…]), the icon title
           ($[it.…]) or the icon picture ($[ip.…]).

       $[pointer.x] $[pointer.y]
           These return the position of the pointer on the screen. If the pointer is not on the
           screen, these variables are not expanded.

       $[pointer.wx] $[pointer.wy]
           These return the position of the pointer in the selected window. If the pointer is not
           on the screen, the window is iconified or no window is selected, these variables are
           not expanded.

       $[pointer.cx] $[pointer.cy]
           These return the position of the pointer in the client portion of the selected window.
           If the pointer is not on the screen, the window is shaded or iconified or no window is
           selected, these variables are not expanded.

       $[pointer.screen]
           The screen name the pointer is currently on. No expansion if RandR is not enabled.

           This is deprecated; use $[monitor.current] instead.

       $[monitor.<n>.x], $[monitor.<n>.y], $[monitor.<n>.width], $[monitor.<n>.height],
       $[monitor.<n>.desk], $[monitor.<n>.pagex], $[monitor.<n>.pagey] $[monitor.primary],
       $[monitor.current], $[monitor.prev] $[monitor.output], $[monitor.count],
       $[monitor.<n>.prev_desk], $[monitor.<n>.prev_pagex], $[monitor.<n>.prev_pagey]
           Returns information about the selected monitor. These can be nested, for example:
           $[monitor.$[monitor.primary].width]

           <n> should be a valid xrandr(1) output name.

           "x" returns the monitor’s x position; "y" returns the monitor’s y position; "width"
           returns the monitor’s width (in pixels); "height" returns the monitor’s height (in
           pixels)

           "current" is the same as the deprecated $[screen.pointer] variable; the monitor which
           has the mouse pointer.

           "prev" returns the previously focused monitor, or the empty string if there isn’t one.

           "count" returns the number of active monitors.

           "desk" returns the current desk displayed on the referenced monitor.

           "pagex" returns the X page on the referenced monitor.

           "pagey" returns the Y page of the referenced monitor.

           "primary" is the name of the output set as primary via xrandr(1).

           "prev_desk" returns the previous desk on the referenced monitor.

           "prev_pagex" returns the previous X page on the referenced monitor.

           "prev_pagey" returns the previous Y page on the referenced monitor.

       $[screen]
           The screen number fvwm is running on. Useful for setups with multiple screens.

       $[screen.count]
           The total number of screens detected. Assumes RandR.

           This is deprecated; use $[monitor.count] instead.

       $[fg.cs<n>] $[bg.cs<n>] $[hilight.cs<n>] $[shadow.cs<n>] $[fgsh.cs<n>]
           These parameters are replaced with the name of the foreground (fg), background (bg),
           hilight (hilight), shadow (shadow), or the font shadow (fgsh) color that is defined in
           colorset <n> (replace <n> with zero or a positive integer). For example "$[fg.cs3]" is
           expanded to the name of the foreground color of colorset 3 (in rgb:rrrr/gggg/bbbb
           form).

           If .lighten<p> or .darken<p> is appended to the parameters, they are instead replaced
           with a color that is lighter or darker than the one defined in colorset <n> by a
           percentage value <p> (between 0 and 100). For example "$[bg.cs3.lighten15]" is
           expanded to the background color of colorset 3 and then lightened 15% (in
           rgb:rrrr/gggg/bbbb form).

           If .hash is appened to the end the color output will use #rrggbb form (instead of
           rgb:rrrr/gggg/bbbb). For example, $[bg.cs3.hash] or $[bg.cs3.lighten15.hash].

           Please refer to the Colorsets section for details about colorsets.

       $[schedule.last]
           This is replaced by the id of the last command that was scheduled with the Schedule
           command, even if this command was already executed.

       $[schedule.next]
           This is replaced by the id the next command used with Schedule will get (unless a
           different id is specified explicitly).

       $[cond.rc]
           The return code of the last conditional command. This variable is only valid inside a
           function and can not be used in a conditional command. Please refer to the section
           Conditional Commands in the command list.

       $[func.context]
           The context character of the running command as used in the Mouse, Key or PointerKey
           command. This is useful for example with:

               Mouse 3 FS N WindowShade $$[func.context]

       $[debuglog.state]
           Either 0 (debug log closed) or 1. Indicates the current state of debugging and logging
           facility.

       $[gt.str]
           return the translation of str by looking in the current locale catalogs. If no
           translation is found str is returned as is. See the LocalePath command.

       $[infostore.key]
           Return the value of the item stored in the InfoStore at the given key. If no key is
           present, the unexpanded string is returned.

       $[...]
           If the string within the braces is neither of the above, fvwm tries to find an
           environment variable with this name and replaces its value if one is found (e.g.
           "$[PAGER]" could be replaced by "more"). Otherwise the string is left as is.

           Some examples can be found in the description of the AddToFunc command.

SCRIPTING AND COMPLEX FUNCTIONS

       To achieve the more complex effects, fvwm has a number of commands that improve its
       scripting abilities. Scripts can be read from a file with Read, from the output of a
       command with PipeRead or written as a complex function with the AddToFunc command. For the
       curious, section 7 of the fvwm FAQ shows some real life applications of scripting. Please
       refer to the sections User Functions and Shell Commands and Conditional Commands for
       details. A word of warning: during execution of complex functions, fvwm needs to take all
       input from the mouse pointer (the pointer is "grabbed" in the slang of X). No other
       programs can receive any input from the pointer while a function is run. This can confuse
       some programs. For example, the xwd program refuses to make screen shots when run from a
       complex function. To achieve the same functionality you can use the Read or PipeRead
       command instead.

MENUS

       Before a menu can be opened, it has to be populated with menu items using the AddToMenu
       command and bound to a key or mouse button with the Key, PointerKey or Mouse command
       (there are many other ways to invoke a menu too). This is usually done in the
       configuration file.

       Fvwm menus are extremely configurable in look and feel. Even the slightest nuances can be
       changed to the user’s liking, including the menu item fonts, the background, delays before
       popping up sub menus, generating menus dynamically and many other features. Please refer
       to the MenuStyle command to learn more.

       Types of Menus
           There are four slightly different types of menus:

           Popup menus can appear everywhere on the screen on their own or attached to a part of
           a window. The Popup command opens popup menus. If the popup menu was invoked with a
           mouse button held down, it is closed when the button is released. The item under the
           pointer is then activated and the associated action is executed.

           Normal menus are very similar command, but slightly transient. When invoked by
           clicking a mouse button, they stay open and can be navigated with no button held. But
           if invoked by a button press followed by mouse motion, it behaves exactly like a popup
           menu. The Menu command creates normal menus.

           "Sub menus" are menus inside other menus. When a menu item that has the Popup command
           as its action is selected, the named menu is opened as a sub menu to the parent. Any
           type of menu can have sub menus.

           "Tear off menus" are menus that have been "torn off" their original context on the
           desktop like a normal window. They are created from other menus by certain key presses
           or mouse sequences or with the TearMenuOff command from inside a menu.

       Menu Anatomy
           Menus consist of any number of titles which are inactive menu items that usually
           appear at the top of the menu, normal items triggering various actions when selected,
           separator lines between the items, tear off bars (a horizontal broken line) that tear
           off the menu when selected, and sub menu items indicated with a triangle pointing left
           or right, depending on the direction in which the sub menu appears. All the above menu
           items are optional.

           Additionally, if the menu is too long to fit on the screen, the excess menu items are
           put in a continuation menu and a sub menu with the string "More..." is placed at the
           bottom of the menu. The "More..." string honors the locale settings.

           Finally, there may be a picture running up either side of the menu (a "side bar").

       Menu Navigation
           Menus are navigated with the keyboard and the mouse. Many people prefer to use the
           mouse, but it can be tedious. Keyboard navigation can be much faster. While fvwm
           displays a menu, it can do nothing else. For example, new windows do not appear before
           the menu is closed. However, this is not exactly true for tear off menus. See the Tear
           Off Menus section for details.

       Mouse Navigation
           Moving the pointer over a menu selects the item below it. Normally this is indicated
           by a 3d border around the item, but not all parts of a menu can be selected. Pressing
           any mouse button while a menu is open by default activates the item below it. Items of
           a popup menu are also activated by releasing a held mouse button. In case of an item
           that hides a sub menu, the sub menu is displayed if the pointer hovers over the item
           long enough or moves close to the triangle indicating the sub menu. This behaviour can
           be tuned with menu styles.

           Scrolling a mouse wheel over a menu either wraps the pointer along the menu (default),
           scrolls the menu under the pointer or act as if the menu was clicked depending on the
           MouseWheel menu style.

           Clicking on a selected item activates it - what happens exactly depends on the type of
           the item.

           Clicking on a title, a separator, the side bar, or outside the menu closes the menu
           (exception: tear off menus can not be closed this way). Pressing mouse button 2 over a
           menu title or activating a tear off bar creates a tear off menu from the current menu.
           Clicking on a normal menu item invokes the command that is bound to it, and clicking
           on a sub menu item either closes all open menus and replaces them with the sub menu or
           posts the menu (default).

           Posting menus is meant to ease mouse navigation. Once a sub menu is posted, only items
           from that sub menu can be selected. This can be very useful to navigate the menu if
           the pointer tends to stray off the menu. To unpost the menu and revert back to normal
           operation, either click on the same sub menu item or press any key.

       Keyboard Navigation
           Just like with mouse navigation, the item below the pointer is selected. This is
           achieved by warping the pointer to the menu items when necessary. While a menu is
           open, all key presses are intercepted by the menu. No other application can get
           keyboard input (although this is not the case for tear off menus).

           Items can be selected directly by pressing a hotkey that can be configured
           individually for each menu item. The hotkey is indicated by underlining it in the menu
           item label. With the AutomaticHotkeys menu style fvwm automatically assigns hotkeys to
           all menu items.

           The most basic keys to navigate through menus are the cursor keys (move up or down one
           item, enter or leave a sub menu),

           (activate item) and

           (close menu). Numerous other keys can be used to navigate through menus by default:

           Enter, Return, Space activate the current item.

           Escape, Delete, Ctrl-G exit the current sequence of menus or destroy a tear off menu.

           J, N, Cursor-Down, Tab, Meta-Tab, Ctrl-F, move to the next item.

           K, P, Cursor-Up, Shift-Tab, Shift-Meta-Tab, Ctrl-B, move to the prior item.

           L, Cursor-Right, F enter a sub menu.

           H, Cursor-Left, B return to the prior menu.

           Ctrl-Cursor-Up, Ctrl-K Ctrl-P, Shift-Ctrl-Meta-Tab, Page-Up move up five items.

           Ctrl-Cursor-Down, Ctrl-J Ctrl-N, Ctrl-Meta-Tab Page-Down move down five items.

           Shift-P, Home, Shift-Cursor-Up, Ctrl-A move to the first item.

           Shift-N, End, Shift-Cursor-Down, Ctrl-E move to the last item.

           Meta-P, Meta-Cursor-Up, Ctrl-Cursor-Left, Shift-Ctrl-Tab, move up just below the next
           separator.

           Meta-N, Meta-Cursor-Down, Ctrl-Cursor-Right, Ctrl-Tab, move down just below the next
           separator.

           Insert opens the "More..." sub menu if any.

           Backspace tears off the menu.

       Menu Bindings
           The keys and mouse buttons used to navigate the menu can be configured using the Key
           and Mouse commands with the special context 'M', possible combined with 'T' for the
           menu title, 'I' for other menu items, 'S' for any border or sidepic, '[' for left
           border including a left sidepic, ']' for right border including a right sidepic, '-'
           for top border, '' for bottom border. The menu context uses its own set of actions
           that can be bound to keys and mouse buttons. These are _MenuClose, MenuCloseAndExec,
           MenuEnterContinuation, MenuEnterSubmenu, MenuLeaveSubmenu, MenuMoveCursor,
           MenuCursorLeft, MenuCursorRight, MenuSelectItem, MenuScroll and MenuTearOff.

           It is not possible to override the key Escape with no modifiers for closing the menu.
           Neither is it possible to undefine mouse button 1, the arrow keys or the enter key for
           minimal navigation.

           MenuClose exits from the current sequence of menus or destroys a tear off menu.

           MenuCloseAndExec exits from the current sequence of menus or destroys a tear off menu
           and executes the rest of the line as a command.

           MenuEnterContinuation opens the "More..." sub menu if any.

           MenuEnterSubmenu enters a sub menu.

           MenuLeaveSubmenu returns to the prior menu.

           MenuMoveCursor n [m] moves the selection to another item. If the first argument is
           zero the second argument specifies an absolute item in the menu to move the pointer
           to. Negative items are counted from the end of the menu. If the first argument is
           non-zero, the second argument must be omitted, and the first argument specifies a
           relative change in the selected item. The positions may be suffixed with a 's' to
           indicate that the items should refer only to the first items after separators.

           MenuCursorLeft enters a sub menu with the SubmenusLeft menu style, and returns to the
           prior menu with the SubmenusRight menu style.

           MenuCursorRight enters a sub menu with the SubmenusRight menu style, and returns to
           the prior menu with the SubmenusLeft menu style.

           MenuSelectItem triggers the action for the menu item.

           MenuScroll n performs menu scrolling according to the MouseWheel menu style with n
           items. The distance can be suffixed with an 's' to indicate the items should refer
           only to the first items after separators.

           MenuTearOff turns a normal menu into a "torn off" menu. See Tear Off Menus for
           details.

       Tear Off Menus
           A tear off menu is any menu that has been "torn off" the window it was attached to and
           pinned to the root window. There are three ways to tear off a menu: click on the menu
           title with mouse button 2, press

           in the menu or activate its tear off bar (a horizontal bar with a broken line). Tear
           off bars must be added to the menu as any other item by assigning them the command
           TearMenuOff.

           The builtin tear off actions can be overridden by undefining the builtin menu actions
           bound to tear off. To remove the builtin mouse button 2 binding, use:

               Mouse 2 MT A -

           and to remove the builtin backspace binding, use:

               Key Backspace M A -

           See the section Menu Bindings for details on how to assign other bindings for tear
           off.

           Note that prior to fvwm 2.5.20 the tear off mouse bindings were redefined in different
           way, which no longer work.

           The window containing the menu is placed as any other window would be. If you find it
           confusing to have your tear off menus appear at random positions on the screen, put
           this line in your configuration file:

               Style fvwm_menu UsePPosition

           To remove borders and buttons from a tear-off menu but keep the menu title, you can
           use

               Style fvwm_menu !Button 0, !Button 1
               Style fvwm_menu !Button 2, !Button 3
               Style fvwm_menu !Button 4, !Button 5
               Style fvwm_menu !Button 6, !Button 7
               Style fvwm_menu !Button 8, !Button 9
               Style fvwm_menu Title, HandleWidth 0

           A tear off menu is a cross breeding between a window and a menu. The menu is swallowed
           by a window and its title is stripped off and displayed in the window title. The main
           advantage is that the menu becomes permanent - activating an item does not close the
           menu. Therefore, it can be used multiple times without reopening it. To destroy such a
           menu, close its window or press the Escape key.

           Tear off menus behave somewhat differently than normal menus and windows. They do not
           take the keyboard focus, but while the pointer is over one of them, all key presses
           are sent to the menu. Other fvwm key bindings are disabled as long as the pointer is
           inside the tear off menu or one of its sub menus. When the pointer leaves this area,
           all sub menus are closed immediately. Note that the window containing a tear off menu
           is never hilighted as if it had the focus.

           A tear off menu is an independent copy of the menu it originated from. As such, it is
           not affected by adding items to that menu or changing its menu style.

           To create a tear off menu without opening the normal menu first, the option
           TearOffImmediately can be added to the Menu or Popup command.

   Building menu contents
       AddToMenu menu-name [menu-label action]
           Begins or adds to a menu definition. Typically a menu definition looks like this:

               AddToMenu Utilities Utilities Title
                + Xterm           Exec  exec xterm -e tcsh
                + Rxvt            Exec  exec rxvt
                + "Remote Logins" Popup Remote-Logins
                + Top             Exec  exec rxvt -T Top -n Top -e top
                + Calculator      Exec  exec xcalc
                + Xman            Exec  exec xman
                + Xmag            Exec  exec xmag
                + emacs           Exec  exec xemacs
                + Mail            MailFunction xmh "-font fixed"
                + ""              Nop
                + Modules         Popup Module-Popup
                + ""              Nop
                + Exit Fvwm       Popup Quit-Verify

           The menu could be invoked via

               Mouse 1 R A Menu Utilities Nop

           or

               Mouse 1 R A Popup Utilities

           There is no end-of-menu symbol. Menus do not have to be defined in a contiguous region
           of the config file. The quoted (or first word) portion in the above examples is the
           menu label, which appears in the menu when the user pops it up. The remaining portion
           is an fvwm command which is executed if the user selects that menu item. An empty
           menu-label ("") and the Nop function are used to insert a separator into the menu.

           The keywords DynamicPopUpAction and DynamicPopDownAction have a special meaning when
           used as the name of a menu item. The action following the keyword is executed whenever
           the menu is popped up or down. This way you can implement dynamic menus. It is even
           possible to destroy itself with DestroyMenu and the rebuild from scratch. When the
           menu has been destroyed (unless you used the recreate option when destroying the
           menu), do not forget to add the dynamic action again.

           Note: Do not trigger actions that require user interaction. They may fail and may
           screw up your menus. See the Silent command.

           Warning Do not issue MenuStyle commands as dynamic menu actions. Chances are good that
           this crashes fvwm.

           The keyword Greyed will still render the menu item, but will grey it out making the
           option unselectable.

           There are several configurable scripts installed together with fvwm for automatic menu
           generation. They have their own man pages. Some of them, specifically
           fvwm-menu-directory and fvwm-menu-desktop, may be used with DynamicPopupAction to
           create a directory listing or GNOME/KDE application listing.

           Example (File browser):

               # You can find the shell script fvwm_make_browse_menu.sh
               # in the utils/ directory of the distribution.
               AddToMenu BrowseMenu
               + DynamicPopupAction PipeRead \
               'fvwm_make_browse_menu.sh BrowseMenu'

           Example (Picture menu):

               # Build a menu of all .jpg files in
               # $HOME/Pictures
               AddToMenu JpgMenu foo title
               + DynamicPopupAction Function MakeJpgMenu

               AddToFunc MakeJpgMenu
               + I DestroyMenu recreate JpgMenu
               + I AddToMenu JpgMenu Pictures Title
               + I PipeRead 'for i in $HOME/Pictures/*.jpg; \
               do echo AddToMenu JpgMenu "`basename $i`" Exec xv $i; done'

           The keyword MissingSubmenuFunction has a similar meaning. It is executed whenever you
           try to pop up a sub menu that does not exist. With this function you can define and
           destroy menus on the fly. You can use any command after the keyword, but if the name
           of an item (that is a submenu) defined with AddToFunc follows it, fvwm executes this
           command:

               Function <function-name> <submenu-name>

           i.e. the name is passed to the function as its first argument and can be referred to
           with "$0".

           The fvwm-menu-directory script mentioned above may be used with MissingSubmenuFunction
           to create an up to date recursive directory listing.

           Example:

               # There is another shell script fvwm_make_directory_menu.sh
               # in the utils/ directory of the distribution. To use it,
               # define this function in your configuration file:

               DestroyFunc MakeMissingDirectoryMenu
               AddToFunc MakeMissingDirectoryMenu
               + I PipeRead fvwm_make_directory_menu.sh $0

               DestroyMenu SomeMenu
               AddToMenu SomeMenu
               + MissingSubmenuFunction MakeMissingDirectoryMenu
               + "Root directory" Popup /

           This is another implementation of the file browser that uses sub menus for
           subdirectories.

           Titles can be used within the menu. If you add the option top behind the keyword
           Title, the title is added to the top of the menu. If there was a title already, it is
           overwritten.

               AddToMenu Utilities Tools Title top

           All text up to the first Tab in the menu label is aligned to the left side of t the
           menu, all text right of the first is aligned to the left in a second column and all
           text thereafter is placed right aligned in the third column. All other s are replaced
           by spaces. Note that you can change this format with the ItemFormat option of the
           MenuStyle command.

           If the menu-label contains an ampersand ('&'), the next character is taken as a
           hot-key for the menu item. Hot-keys are underlined in the label. To get a literal '&',
           insert "&&". Pressing the hot-key moves through the list of menu items with this
           hot-key or selects an item that is the only one with this hot-key.

           If the menu-label contains a sub-string which is set off by stars, then the text
           between the stars is expected to be the name of an image file to insert in the menu.
           To get a literal '', insert "*". For example

               + Calculator*xcalc.xpm* Exec exec xcalc

           inserts a menu item labeled "Calculator" with a picture of a calculator above it. The
           following:

               + *xcalc.xpm*           Exec exec xcalc

           Omits the "Calculator" label, but leaves the picture.

           If the menu-label contains a sub-string which is set off by percent signs, then the
           text between the percent signs is expected to be the name of image file (a so called
           mini icon to insert to the left of the menu label. A second mini icon that is drawn at
           the right side of the menu can be given in the same way. To get a literal '%', insert
           "%%". For example

               + Calculator%xcalc.xpm% Exec exec xcalc

           inserts a menu item labeled "Calculator" with a picture of a calculator to the left.
           The following:

               + %xcalc.xpm%           Exec exec xcalc

           Omits the "Calculator" label, but leaves the picture. The pictures used with this
           feature should be small (perhaps 16x16).

           If the menu-name (not the label) contains a sub-string which is set off by at signs
           ('@'), then the text between them is expected to be the name of an image file to draw
           along the left side of the menu (a side pixmap). You may want to use the SidePic
           option of the MenuStyle command instead. To get a literal '@', insert "@@". For
           example

               AddToMenu StartMenu@linux-menu.xpm@

           creates a menu with a picture in its bottom left corner.

           If the menu-name also contains a sub-string surrounded by '^'s, then the text between
           '^'s is expected to be the name of an X11 color and the column containing the side
           picture is colored with that color. You can set this color for a menu style using the
           SideColor option of the MenuStyle command. To get a literal '^', insert "^^". Example:

               AddToMenu StartMenu@linux-menu.xpm@^blue^

           creates a menu with a picture in its bottom left corner and colors with blue the
           region of the menu containing the picture.

           In all the above cases, the name of the resulting menu is name specified, stripped of
           the substrings between the various delimiters.

       DestroyMenu [recreate] menu
           Deletes a menu, so that subsequent references to it are no longer valid. You can use
           this to change the contents of a menu during an fvwm session. The menu can be rebuilt
           using AddToMenu. The optional parameter recreate tells fvwm not to throw away the menu
           completely but to throw away all the menu items (including the title).

               DestroyMenu Utilities

       Title
           Does nothing. It is used to insert a title line in a popup or menu.

   Commands that open menus
       Menu menu-name [position] [double-click-action]
           Causes a previously defined menu to be popped up in a sticky manner. That is, if the
           user invokes the menu with a click action instead of a drag action, the menu stays up.
           The command double-click-action is invoked if the user double-clicks a button (or hits
           the key rapidly twice if the menu is bound to a key) when bringing up the menu. If the
           double click action is not specified, double clicking on the menu does nothing.
           However, if the menu begins with a menu item (i.e. not with a title or a separator)
           and the double click action is not given, double clicking invokes the first item of
           the menu (but only if the pointer really was over the item).

           The pointer is warped to where it was when the menu was invoked if it was both invoked
           and closed with a keystroke.

           The position arguments allow placement of the menu somewhere on the screen, for
           example centered on the visible screen or above a title bar. Basically it works like
           this: you specify a context-rectangle and an offset to this rectangle by which the
           upper left corner of the menu is moved from the upper left corner of the rectangle.
           The position arguments consist of several parts:

           [context-rectangle] x y [special options]

           The context-rectangle can be one of:

           Root
               the root window of the current screen.

           Monitor
               the area of the current RandR screen.

           Mouse
               a 1x1 rectangle at the mouse position.

           Window
               the frame of the context window.

           Interior
               the inside of the context window.

           Title
               the title of the context window or icon.

           Button<n>
               button <n> of the context window.

           Icon
               the icon of the context window.

           Menu
               the current menu.

           Item
               the current menu item.

           Context
               the current window, menu or icon.

           This
               whatever widget the pointer is on (e.g. a corner of a window or the root window).

           Rectangle <_geometry_>
               the rectangle defined by <_geometry_> in X geometry format. Width and height
               default to 1 if omitted.

               If the context-rectangle is omitted or invalid (e.g. "item" on a window), "Mouse"
               is the default. Note that not all of these make sense under all circumstances
               (e.g. "Icon" if the pointer is on a menu).

               The offset values x and y specify how far the menu is moved from its default
               position. By default, the numeric value given is interpreted as a percentage of
               the context rectangle’s width (height), but with a trailing 'm' the menu’s width
               (height) is used instead. Furthermore a trailing 'p' changes the interpretation to
               mean pixels.

               Instead of a single value you can use a list of values. All additional numbers
               after the first one are separated from their predecessor by their sign. Do not use
               any other separators.

               If x or y are prefixed with "'o<number>" where <number> is an integer, the menu
               and the rectangle are moved to overlap at the specified position before any other
               offsets are applied. The menu and the rectangle are placed so that the pixel at
               <number> percent of the rectangle’s width/height is right over the pixel at
               <number> percent of the menu’s width/height. So "o0" means that the top/left
               borders of the menu and the rectangle overlap, with "o100" it’s the bottom/right
               borders and if you use "o50" they are centered upon each other (try it and you
               will see it is much simpler than this description). The default is "o0". The
               prefix "o<number>" is an abbreviation for "+<number>-<number>m".

               A prefix of 'c' is equivalent to "o50". Examples:

                   # window list in the middle of the screen
                   WindowList Root c c

                   # menu to the left of a window
                   Menu name window -100m c+0

                   # popup menu 8 pixels above the mouse pointer
                   Popup name mouse c -100m-8p

                   # somewhere on the screen
                   Menu name rectangle 512x384+1+1 +0 +0

                   # centered vertically around a menu item
                   AddToMenu foobar-menu
                    + "first item" Nop
                    + "special item" Popup "another menu" item +100 c
                    + "last item" Nop

                   # above the first menu item
                   AddToMenu foobar-menu
                    + "first item" Popup "another menu" item +0 -100m

               Note that you can put a sub menu far off the current menu so you could not reach
               it with the mouse without leaving the menu. If the pointer leaves the current menu
               in the general direction of the sub menu the menu stays up.

           Special options

               To create a tear off menu without opening the normal menu, add the option
               TearOffImmediately. Normally the menu opens in normal state for a split second
               before being torn off. As tearing off places the menu like any other window, a
               position should be specified explicitly:

                   # Forbid fvwm to place the menu window
                   Style <name of menu> UsePPosition
                   # Menu at top left corner of screen
                   Menu Root 0p 0p TearOffImmediately

               The Animated and Mwm or Win menu styles may move a menu somewhere else on the
               screen. If you do not want this you can add Fixed as an option. This might happen
               for example if you want the menu always in the top right corner of the screen.

               Where do you want a menu to appear when you click on its menu item? The default is
               to place the title under the cursor, but if you want it where the position
               arguments say, use the SelectInPlace option. If you want the pointer on the title
               of the menu, use SelectWarp too. Note that these options apply only if the
               PopupAsRootMenu MenuStyle option is used.

               The pointer is warped to the title of a sub menu whenever the pointer would be on
               an item when the sub menu is popped up (fvwm menu style) or never warped to the
               title at all (Mwm or Win menu styles). You can force (forbid) warping whenever the
               sub menu is opened with the WarpTitle (NoWarp) option.

               Note that the special-options do work with a normal menu that has no other
               position arguments.

       Popup PopupName [position] [default-action]
           This command has two purposes: to bind a menu to a key or mouse button, and to bind a
           sub menu into a menu. The formats for the two purposes differ slightly. The position
           arguments are the same as for Menu. The command default-action is invoked if the user
           clicks a button to invoke the menu and releases it immediately again (or hits the key
           rapidly twice if the menu is bound to a key). If the default action is not specified,
           double clicking on the menu does nothing. However, if the menu begins with a menu item
           (i.e. not with a title or a separator) and the default action is not given, double
           clicking invokes the first item of the menu (but only if the pointer really was over
           the item).

           To bind a previously defined pop-up menu to a key or mouse button:

           The following example binds mouse buttons 2 and 3 to a pop-up called "Window Ops". The
           menu pops up if the buttons 2 or 3 are pressed in the window frame, side-bar, or
           title-bar, with no modifiers (none of shift, control, or meta).

               Mouse 2 FST N Popup "Window Ops"
               Mouse 3 FST N Popup "Window Ops"

           Pop-ups can be bound to keys through the use of the Key command. Pop-ups can be
           operated without using the mouse by binding to keys and operating via the up arrow,
           down arrow, and enter keys.

           To bind a previously defined pop-up menu to another menu, for use as a sub menu:

           The following example defines a sub menu "Quit-Verify" and binds it into a main menu,
           called "RootMenu":

               AddToMenu Quit-Verify
                + "Really Quit Fvwm?" Title
                + "Yes, Really Quit"  Quit
                + "Restart Fvwm"      Restart
                + "Restart Fvwm 1.xx" Restart fvwm1 -s
                + ""                  Nop
                + "No, Don't Quit"    Nop

               AddToMenu RootMenu "Root Menu" Title
                + "Open XTerm Window" Popup NewWindowMenu
                + "Login as Root"     Exec exec xterm -T Root -n Root -e su -
                + "Login as Anyone"   Popup AnyoneMenu
                + "Remote Hosts"      Popup HostMenu
                + ""                  Nop
                + "X utilities"       Popup Xutils
                + ""                  Nop
                + "Fvwm Modules"      Popup Module-Popup
                + "Fvwm Window Ops"   Popup Window-Ops
                + ""                  Nop
                + "Previous Focus"    Prev (AcceptsFocus) Focus
                + "Next Focus"        Next (AcceptsFocus) Focus
                + ""                  Nop
                + "Refresh screen"    Refresh
                + ""                  Nop
                + "Reset X defaults"  Exec xrdb -load \
                                $HOME/.Xdefaults
                + ""                  Nop
                + ""                  Nop
                + Quit                Popup Quit-Verify

           Popup differs from Menu in that pop-ups do not stay up if the user simply clicks.
           These are popup-menus, which are a little hard on the wrist. Menu menus stay up on a
           click action. See the Menu command for an explanation of the interactive behavior of
           menus. A menu can be open up to ten times at once, so a menu may even use itself or
           any of its predecessors as a sub menu.

       TearMenuOff
           When assigned to a menu item, it inserts a tear off bar into the menu (a horizontal
           broken line). Activating that item tears off the menu. If the menu item has a label,
           it is shown instead of the broken line. If used outside menus, this command does
           nothing. Examples:

               AddToMenu WindowMenu
               + I "" TearMenuOff

               AddToMenu RootMenu
               + I "click here to tear me off" TearMenuOff

   Menu style commands
       Menu styles describe the looks and behaviour like normal styles do for windows. Menu
       styles are assigned to individual or all menus, and changing the menu style immediately
       affects all menus that use it. (If a menu style is used from within a menu, the changes
       are applied the next time an affected menu is opened.)

       ChangeMenuStyle menustyle menu ...
           Changes the menu style of menu to menustyle. You may specify more than one menu in
           each call of ChangeMenuStyle.

       CopyMenuStyle orig-menustyle dest-menustyle
           Copy orig-menustyle to dest-menustyle, where orig-menustyle is an existing menu style.
           If the menu style dest_menustyle does not exist, then it is created.

       DestroyMenuStyle menustyle
           Deletes the menu style named menustyle and changes all menus using this style to the
           default style, you cannot destroy the default menu style.

               DestroyMenuStyle pixmap1

       MenuStyle stylename [options]
           Sets a new menu style or changes a previously defined style. The stylename is the
           style name; if it contains spaces or tabs it has to be quoted. The name "" is reserved
           for the default menu style. The default menu style is used for every menu-like object
           (e.g. the window created by the *WindowList command) that had not be assigned a style
           using the ChangeMenuStyle. See also DestroyMenuStyle. When using monochrome color
           options are ignored.

           options is a comma separated list containing some of the keywords Fvwm / Mwm / Win,
           BorderWidth, HilightBack / !HilightBack, HilightTitleBack, ActiveFore / !ActiveFore,
           MenuColorset, ActiveColorset, GreyedColorset, TitleColorset, Hilight3DThick /
           Hilight3DThin / Hilight3DOff, Hilight3DThickness, Animation / !Animation, Font,
           TitleFont, PopupDelay, PopupOffset, TitleWarp / !TitleWarp, TitleUnderlines0 /
           TitleUnderlines1 / TitleUnderlines2, SeparatorsLong / SeparatorsShort, TrianglesSolid
           / TrianglesRelief, PopupImmediately / PopupDelayed, PopdownImmediately /
           PopdownDelayed, PopupActiveArea, DoubleClickTime, SidePic, SideColor, PopupAsRootMenu
           / PopupAsSubmenu / PopupIgnore / PopupClose, RemoveSubmenus / HoldSubmenus,
           SubmenusRight / SubmenusLeft, SelectOnRelease, ItemFormat, VerticalItemSpacing,
           VerticalMargins, VerticalTitleSpacing, AutomaticHotkeys / !AutomaticHotkeys,
           UniqueHotkeyActivatesImmediate / !UniqueHotkeyActivatesImmediate, MouseWheel,
           ScrollOffPage / !ScrollOffPage, TrianglesUseFore / !TrianglesUseFore, Translucent /
           !Translucent.

           In the above list some options are listed as option pairs or triples with a '/' in
           between. These options exclude each other. All paired options can be negated to have
           the effect of the counterpart option by prefixing ! to the option.

           Fvwm, Mwm, Win reset all options to the style with the same name in former versions of
           fvwm. The default for new menu styles is Fvwm style. These options override all others
           except HilightBack, ActiveFore and PopupDelay, so they should be used only as the
           first option specified for a menu style or to reset the style to defined behavior. The
           same effect can be created by setting all the other options one by one.

           Mwm and Win style menus popup sub menus automatically. Win menus indicate the current
           menu item by changing the background to dark. Fvwm sub menus overlap the parent menu,
           Mwm and Win style menus never overlap the parent menu.

           Fvwm style is equivalent to !HilightBack, Hilight3DThin, !ActiveFore, !Animation,
           Font, PopupOffset 0 67, TitleWarp, TitleUnderlines1, SeparatorsShort, TrianglesRelief,
           PopupDelayed, PopdownDelayed, PopupDelay 150, PopdownDelay 150, PopupAsSubmenu,
           HoldSubmenus, SubmenusRight, BorderWidth 2, !AutomaticHotkeys,
           UniqueHotkeyActivatesImmediate, PopupActiveArea 75.

           Mwm style is equivalent to !HilightBack, Hilight3DThick, !ActiveFore, !Animation,
           Font, PopupOffset -3 100, !TitleWarp, TitleUnderlines2, SeparatorsLong,
           TrianglesRelief, PopupImmediately, PopdownDelayed, PopdownDelay 150, PopupAsSubmenu,
           HoldSubmenus, SubmenusRight, BorderWidth 2, UniqueHotkeyActivatesImmediate,
           !AutomaticHotkeys, PopupActiveArea 75.

           Win style is equivalent to HilightBack, Hilight3DOff, ActiveFore, !Animation, Font,
           PopupOffset -5 100, !TitleWarp, TitleUnderlines1, SeparatorsShort, TrianglesSolid,
           PopupImmediately, PopdownDelayed, PopdownDelay 150, PopupAsSubmenu, RemoveSubmenus,
           SubmenusRight, BorderWidth 2, UniqueHotkeyActivatesImmediate, !AutomaticHotkeys,
           PopupActiveArea 75.

           BorderWidth takes the thickness of the border around the menus in pixels. It may be
           zero to 50 pixels. The default is 2. Using an invalid value reverts the border width
           to the default.

           HilightBack and !HilightBack switch hilighting the background of the selected menu
           item on and off. The ActiveColorset background color is used for the hilighting.

           HilightTitleBack switches hilighting the background of menu titles on. The
           TitleColorset background color is used for the hilighting.

           ActiveFore and !ActiveFore switch hilighting the foreground of the selected menu item
           on and off. The ActiveColorset foreground color is used for the hilighting.

           MenuColorset controls the colorset used to color the menu. If the colorset has a
           pixmap or gradient defined, this is used as the background of the menu. The shape mask
           from the colorset is used to shape the menu. Please refer to the Colorsets section for
           details about colorsets.

           ActiveColorset controls the color of the active menu item, provided the HilightBack or
           ActiveFore menu styles are used. If specified, the hilight and shadow colors from the
           colorset are used too. The pixmap and shape mask from the colorset are not used.
           Hilighting the background or foreground can be turned off individually with the
           !ActiveFore or !HilightBack menu styles.

           GreyedColorset works exactly like MenuColorset, but the foreground from the colorset
           replaces the color given with the Greyed menu style. No other parts of the colorset
           are used.

           TitleColorset works exactly like MenuColorset, but is used only for menu titles.

           Translucent controls a pseudo transparent effect that uses a image of the desktop
           under the menu as its background image. This option takes one value that is a number
           between 0 (fully translucent) and 100 (not translucent), which is the percent of the
           translucency. Use !Translucent (or no additional value) to turn the effect off. The
           translucent effect only applies to normal menus and does not apply to "torn off"
           menus. Note, only the menu background is translucent, the HilightBack of the active
           item and HilightTitleBack of the title are not. To have a fully translucent menu use
           the following.

               MenuStyle * Translucent 60, !HilightBack, !HilightTitleBack, ActiveFore

           Hilight3DThick, Hilight3DThin and Hilight3DOff determine if the selected menu item is
           hilighted with a 3D relief. Thick reliefs are two pixels wide, thin reliefs are one
           pixel wide.

           Hilight3DThickness takes one numeric argument that may be between -50 and +50 pixels.
           With negative values the menu item gets a pressed in look. The above three commands
           are equivalent to a thickness of 2, 1 and 0.

           Animation and !Animation turn menu animation on or off. When animation is on, sub
           menus that do not fit on the screen cause the parent menu to be shifted to the left so
           the sub menu can be seen.

           Font and TitleFont take a font name as an argument. If a font by this name exists it
           is used for the text of all menu items. If it does not exist or if the name is left
           blank the built-in default is used. If a TitleFont is given, it is used for all menu
           titles instead of the normal font.

           PopupDelay requires one numeric argument. This value is the delay in milliseconds
           before a sub menu is popped up when the pointer moves over a menu item that has a sub
           menu. If the value is zero no automatic pop up is done. If the argument is omitted the
           built-in default is used. Note that the popup delay has no effect if the
           PopupImmediately option is used since sub menus pop up immediately then.

           PopupImmediately makes menu items with sub menus pop up it up as soon as the pointer
           enters the item. The PopupDelay option is ignored then. If PopupDelayed is used fvwm
           looks at the PopupDelay option if or when this automatic popup happens.

           PopdownDelay works exactly like PopupDelay but determines the timeout of the
           PopupDelayed style.

           PopdownImmediately makes sub menus vanish as soon as the pointer leaves the sub menu
           and the correspondent item in the parent menu. With the opposite option PopdownDelayed
           the sub menu only pops down after the time specified with the PopdownDelay option.
           This comes handy when the pointer often strays off the menu item when trying to move
           into the sub menu. Whenever there is a conflict between the PopupImmediately,
           PopupDelayed, PopupDelay styles and the PopdownImmediately, PopdownDelayed,
           PopdownDelay styles, the Popup... styles win when using mouse navigation and the
           Popdown... styles win when navigating with the keyboard.

           PopupOffset requires two integer arguments. Both values affect where sub menus are
           placed relative to the parent menu. If both values are zero, the left edge of the sub
           menu overlaps the left edge of the parent menu. If the first value is non-zero the sub
           menu is shifted that many pixels to the right (or left if negative). If the second
           value is non-zero the menu is moved by that many percent of the parent menu’s width to
           the right or left.

           PopupActiveArea requires an integer value between 51 and 100. Normally, when the
           pointer is over a menu item with a sub menu and the pointer enters the area that
           starts at 75% of the menu width, the sub menu is shown immediately. This percentage
           can be changed with PopupActiveArea. Setting this value to 100 disables this kind of
           automatic popups altogether. The default value is restored if no or an invalid value
           is given.

           TitleWarp and !TitleWarp affect if the pointer warps to the menu title when a sub menu
           is opened or not. Note that regardless of this setting the pointer is not warped if
           the menu does not pop up under the pointer.

           TitleUnderlines0, TitleUnderlines1 and TitleUnderlines2 specify how many lines are
           drawn below a menu title.

           SeparatorsLong and SeparatorsShort set the length of menu separators. Long separators
           run from the left edge all the way to the right edge. Short separators leave a few
           pixels to the edges of the menu.

           TrianglesSolid and TrianglesRelief affect how the small triangles for sub menus is
           drawn. Solid triangles are filled with a color while relief triangles are hollow.

           DoubleClickTime requires one numeric argument. This value is the time in milliseconds
           between two mouse clicks in a menu to be considered as a double click. The default is
           450 milliseconds. If the argument is omitted the double click time is reset to this
           default.

           SidePic takes the name of an image file as an argument. The picture is drawn along the
           left side of the menu. The SidePic option can be overridden by a menu specific side
           pixmap (see AddToMenu). If the file name is omitted an existing side pixmap is removed
           from the menu style.

           SideColor takes the name of an X11 color as an argument. This color is used to color
           the column containing the side picture (see above). The SideColor option can be
           overridden by a menu specific side color (see AddToMenu). If the color name is omitted
           the side color option is switched off.

           PopupAsRootMenu, PopupAsSubmenu, PopupIgnore and PopupClose change the behavior when
           you click on a menu item that opens a sub menu. With PopupAsRootMenu the original menu
           is closed before the sub menu appears, with PopupAsSubmenu it is not, so you can
           navigate back into the parent menu. Furthermore, with PopupAsSubmenu the sub menu is
           held open (posted) regardless of where you move the mouse. Depending on your menu
           style this may simplify navigating through the menu. Any keystroke while a menu is
           posted reverts the menu back to the normal behavior. With PopupClose the menu is
           closed when a sub menu item is activated, and the menu stays open if PopupIgnore is
           used (even if the menu was invoked with the Popup command). PopupAsSubmenu is the
           default.

           RemoveSubmenus instructs fvwm to remove sub menu when you move back into the parent
           menu. With HoldSubmenus the sub menu remains visible. You probably want to use
           HoldSubmenus if you are using the PopupDelayed style. RemoveSubmenus affects menu
           navigation with the keyboard.

           SelectOnRelease takes an optional key name as an argument. If the given key is
           released in a menu using this style, the current menu item is selected. This is
           intended for WindowList navigation. 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. To disable this behavior, omit the key name.

           Note: Some X servers do not support KeyRelease events. SelectOnRelease does not work
           on such a machine.

           ItemFormat takes a special string as its argument that determines the layout of the
           menu items. Think of the format string as if it were a menu item. All you have to do
           is tell fvwm where to place the different parts of the menu item (i.e. the labels, the
           triangle denoting a sub menu, the mini icons and the side pic) in the blank area. The
           string consists of spaces,

           characters and formatting directives beginning with '%'. Any invalid characters and
           formatting directives are silently ignored:

           %l, %c and %r
               Insert the next item label. Up to three labels can be used. The item column is
               left-aligned (%l), centered (%c) or right-aligned (%r).

           %i
               Inserts the mini icon.

           %> and %<
               Insert the sub menu triangle pointing either to the right (%>) or to the left
               (%<).

           %|
               The first %| denotes the beginning of the area that is highlighted either with a
               background color or a relief (or both). The second %| marks the end of this area.
               %| can be used up to twice in the string. If you do not add one or both of them,
               fvwm sets the margins to the margins of the whole item (not counting the side
               picture).

           %s
               Places the side picture either at the beginning or the end of the menu. This
               directive may be used only once and only as the first or last in the format
               string. If the %s is not at the beginning of the string, menus are not drawn
               properly.

           Space, Tab, %Space and %Tab
               Add gap of one space, or a tab, using the width of the menu font. When using a
               tab, the size of the gap can be one to 8 spaces since the tab position is a
               multiple of 8 from the edge of the menu. The whole string must be quoted if spaces
               or tabs are used.

           %p
               Like Space and Tab %p inserts an empty area into the item, but with better control
               of its size (see below).

           You can define an additional space before and after each of the objects like this

               %left.rightp

           This means: if the object is defined in the menu (e.g. if it is %s and you use a side
           picture, or it is %l for the third column and there are items defined that actually
           have a third column), then add left pixels before the object and right pixels after
           it. You may leave out the left or the .right parts if you do not need them. All values
           up to the screen width are allowed. Even negative values can be used with care. The p
           may be replaced with any other formatting directives described above.

           Note: Only items defined in the format string are visible in the menus. So if you do
           not put a %s in there you do not see a side picture, even if one is specified.

           Note: The SubmenusLeft style changes the default ItemFormat string, but if it was set
           manually it is not modified.

           Note: If any unformatted title of the menu is wider than the widest menu item, the
           spaces between the different parts of the menu items are enlarged to match the width
           of the title. Leading left aligned objects in the format string (%l, %i, %<, first %|)
           stick to the left edge of the menu and trailing right aligned objects (%r, %i, %>,
           second %|) stick to the right edge. The gaps between the remaining items are enlarged
           equally.

           Examples:

               MenuStyle * ItemFormat "%.4s%.1|%.5i%.5l%.5l%.5r%.5i%2.3>%1|"

           Is the default string used by fvwm: (side picture + 4 pixels gap) (beginning of the
           hilighted area + 1 pixel gap) (mini icon + 5p) (first column left aligned + 5p)
           (second column left aligned + 5p) (third column right aligned + 5p) (second mini icon
           + 5p) (2p + sub menu triangle + 3p) (1p + end of hilighted area).

               MenuStyle * ItemFormat "%.1|%3.2<%5i%5l%5l%5r%5i%1|%4s"

           Is used by fvwm with the SubmenusLeft option below.

           VerticalItemSpacing and VerticalTitleSpacing control the vertical spacing of menu
           items and titles like ItemFormat controls the horizontal spacing. Both take two
           numeric arguments that may range from -100 to +100. The first is the gap in pixels
           above a normal menu item (or a menu title), the second is the gap in pixels below it.
           Negative numbers do not make much sense and may screw up the menu completely. If no
           arguments are given or the given arguments are invalid, the built-in defaults are
           used: one pixel above the item or title and two below.

           VerticalMargins can be used to add some padding at the top and bottom of menus. It
           takes two numeric arguments that must be positive integers (or zero). If the number of
           arguments or its values are incorrect, fvwm defaults both to 0, which means no padding
           at all. If the values are correct, the first one is used for the top margin, and the
           second one is used for the bottom margin.

           SubmenusLeft mirrors the menu layout and behavior. Sub menus pop up to the left, the
           sub menu triangle is drawn left and the mini icon and side picture are drawn at the
           right side of the menu. The default is SubmenusRight. The position hints of a menu are
           also affected by this setting, i.e. position hints using item or menu as context
           rectangle and position hints using m offsets.

           AutomaticHotkeys and !AutomaticHotkeys control the menu’s ability to automatically
           provide hot-keys on the first character of each menu item’s label. This behavior is
           always overridden if an explicit hot-key is assigned in the AddToMenu command.

           UniqueHotkeyActivatesImmediate and !UniqueHotkeyActivatesImmediate controls how menu
           items are invoked when used with hotkeys. By default, if a given menu entry only has
           one completeable match for a given hotkey, the action for that menu entry is invoked
           and the menu is closed. This is due to the UniqueHotkeyActivatesImmediate option.
           However, the menu can be told to remain open, waiting for the user to invoke the
           selected item instead when there is only one matched item for a given hotkey, by using
           the !UniqueHotkeyActivatesImmediate option.

           MouseWheel controls the ability to scroll the menu using a mouse wheel. It takes one
           argument, that can be one of ScrollsPointer, ScrollsMenu, ScrollsMenuBackwards or
           ActivatesItem. ScrollsPointer makes the mouse wheel scroll the pointer over a menu.
           This is the default. ScrollsMenu and ScrollsMenuBackwards scroll the menu beneath the
           pointer. ActivatesItem disables scrolling by mouse wheel and makes the use of a mouse
           wheel act as if the menu was clicked. If no argument is supplied the default setting
           is restored.

           ScrollOffPage allows a menu to be scrolled out of the visible area if MouseWheel is
           set to ScrollsMenu or ScrollsMenuBackwards. This is the default. The opposite,
           !ScrollOffPage disables this behaviour.

           TrianglesUseFore draws sub menu triangles with the foreground color of the menu
           colorset (normally drawn with the hilight color). !TrianglesUseFore disables this
           behaviour.

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 commandsMiscellaneous commandsCommands affecting window movement and placementCommands for focus and mouse movementCommands controlling window stateCommands for mouse and key bindingsThe Style command (controlling window styles)Other commands controlling window stylesCommands controlling the virtual desktopCommands for user functions and shell commandsConditional commandsModule commandsQuit, restart and session management commandsColorsetsColor 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.

       ColorLimit limit
           This command is obsolete. See the --color-limit option to fvwm.

       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.

       HilightColor textcolor backgroundcolor
           This command is obsoleted by the Style options HilightFore and HilightBack. Please use

               Style * HilightFore textcolor, HilightBack backgroundcolor

           instead.

       HilightColorset [num]
           This command is obsoleted by the Style option HilightColorset. Please use

               Style * HilightColorset num

           instead.

       IconFont [fontname]
           This command is obsoleted by the Style option IconFont. Please use

               Style * IconFont fontname

           instead.

       IconPath path
           This command is obsolete. Please use ImagePath instead.

       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

           Note: if the FvwmM4 module is used to parse your config files, then m4 may want to
           mangle the word "include" which frequently shows up in the ImagePath command. To fix
           this one may add

               undefine(`include')

           prior to the ImagePath command, or better: use the -m4-prefix option to force all m4
           directives to have a prefix of "m4_" (see the FvwmM4 man page).

       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.

       PixmapPath path
           This command is obsolete. Please use ImagePath instead.

       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

           style which prints information on fvwm styles. verbose can be 1.

           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.

       WindowFont [fontname]
           This command is obsoleted by the Style option Font. Please use

               Style * Font fontname

           instead.

       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.

           (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

       HideGeometryWindow [Never | Move | Resize]
           This command has been depreciated and is now obsolete. Use GeometryWindow Hide
           instead.

       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 [Warp] [ewmhiwa] [snap type] [layers min max] 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. 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 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] [w | m]x[p | w] [w | m]y[p | w] [Warp] [ewmhiwa]

           This will move the window to the x and y position (see below). By default, the EWMH
           working area is honoured. If he trailing option ewmhiwa is given, then the window
           position will ignore the working area (such as ignoring any values set via
           EwmhBaseStruts). 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.

           The positional arguments x and y can specify an absolute or relative position from
           either the left/top or right/bottom of the screen. By default, the numeric value given
           is interpreted as a percentage of the screen 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
           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.
           MoveToDesk is a replacement for the obsolete WindowsDesk command, which can no longer
           be used.

       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.

       SnapAttraction [proximity [behaviour] [Screen]]
           The SnapAttraction command is obsolete. It has been replaced by the Style command
           option SnapAttraction.

       SnapGrid [x-grid-size y-grid-size]
           The SnapGrid command is obsolete. It has been replaced by the Style command option
           SnapGrid.

       WindowsDesk arg1 [arg2]
           Moves the selected window to another desktop.

           This command has been removed and must be replaced by MoveToDesk, the arguments for
           which are the same as for the GotoDesk command.

                +
               *Important*

           You cannot simply change the name of the command: the syntax has changed. If you used:

               WindowsDesk n

           to move a window to desk n, you have to change it to:

               MoveToDesk 0 n

       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
       CursorMove horizontal[p] vertical[p]
           Moves the mouse pointer by horizontal pages in the X direction and vertical pages in
           the Y direction. Either or both entries may be negative. CursorMove can only move the
           mouse cursor to a relative position. To move the mouse cursor to an absolute position,
           see WarpToWindow. Both horizontal and vertical values are expressed in percent of
           pages, so

               CursorMove 100 100

           means to move down and right by one full page.

               CursorMove 50 25

           means to move right half a page and down a quarter of a page. Alternatively, the
           distance can be specified in pixels by appending a 'p' to the horizontal and/or
           vertical specification. For example

               CursorMove -10p -10p

           means move ten pixels up and ten pixels left. The CursorMove function should not be
           called from pop-up menus.

       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 on screen 1:

               WindowId root 1 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 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. 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.

       WindowShadeAnimate [steps [p]]
           This command is obsolete. Please use the WindowShadeSteps option of the Style command
           instead.

   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 Window Styles
       For readability, the commands in this section are not sorted alphabetically. The
       description of the Style command can be found at the end of this section.

       FocusStyle stylename options
           works exactly like the Style command, but accepts only the focus policy related styles
           beginning with "FP". The prefix can be removed, but at the cost of a little bit of
           time. FocusStyle is meant to make the configuration file more readable. Example:

               FocusStyle * EnterToFocus, !LeaveToUnfocus

           is equivalent to

               Style * FPEnterToFocus, !FPLeaveToUnfocus

       DestroyStyle style
           deletes the style named style. The changes take effect immediately. Note that style is
           not a wild-carded search string, but rather a case-sensitive string that should
           exactly match the original Style command.

           Destroying style "*" can be done, but isn’t really to be recommended. For example:

               DestroyStyle Application*

           This removes all settings for the style named "Application*", NOT all styles starting
           with "Application".

       DestroyWindowStyle
           deletes the styles set by the WindowStyle command on the selected window. The changes
           take effect immediately.

       UpdateStyles
           All pending updates of all windows' styles and looks are applied immediately. E.g. if
           Style, WindowStyle or TitleStyle commands were issued inside a fvwm function.

       Style stylename options ...
           The Style command is used to set attributes of a window to values other than the
           default or to set the window manager default styles.

           stylename can be a window’s name, class, visible name, or resource string. It may
           contain the wildcards '' and '?', which are matched in the usual Unix filename manner.
           Multiple style options in a single *Style command are read from left to right as if
           they were issued one after each other in separate commands. A given style always
           overrides all conflicting styles that have been issued earlier (or further left on the
           same style line).

           Note: windows that have no name (WM_NAME) are given a name of "Untitled", and windows
           that do not have a class (WM_CLASS, res_class) are given class "NoClass" and those
           that do not have a resource (WM_CLASS, res_name) are given resource "NoResource".

           If a window has the resource "fvwmstyle" set, the value of that resource is used in
           addition to any window names when selecting the style.

           options is a comma separated list containing one or more of the following keywords.
           Each group of style names is separated by slashes ('/'). The last style in these
           groups is the default. BorderWidth, HandleWidth, !Icon / Icon, MiniIcon, IconBox,
           IconGrid, IconFill, IconSize, !Title / Title, TitleAtBottom / TitleAtLeft /
           TitleAtRight / TitleAtTop, LeftTitleRotatedCW / LeftTitleRotatedCCW,
           RightTitleRotatedCCW / RightTitleRotatedCW, TopTitleRotated / TopTitleNotRotated,
           BottomTitleRotated / BottomTitleNotRotated, !UseTitleDecorRotation /
           UseTitleDecorRotation, StippledTitle / !StippledTitle, StippledIconTitle /
           !StippledIconTitle, IndexedWindowName / ExactWindowName, IndexedIconName /
           ExactIconName, TitleFormat / IconTitleFormat / !Borders / Borders, !Handles / Handles,
           WindowListSkip / WindowListHit, CirculateSkip / CirculateHit, CirculateSkipShaded /
           CirculateHitShaded, CirculateSkipIcon / CirculateHitIcon, Layer, StaysOnTop /
           StaysOnBottom / StaysPut, Sticky / Slippery, StickyAcrossPages / !StickyAcrossPages,
           StickyAcrossDesks / !StickyAcrossDesks, !StickyStippledTitle / StickyStippledTitle,
           !StickyStippledIconTitle / StickyStippledIconTitle, StartIconic / StartNormal,
           Colorset, HilightColorset, BorderColorset, HilightBorderColorset, IconTitleColorset,
           HilightIconTitleColorset, IconBackgroundColorset, IconTitleRelief,
           IconBackgroundRelief, IconBackgroundPadding, Font, IconFont, StartsOnDesk /
           StartsOnPage / StartsAnyWhere, StartsOnScreen, StartShaded / !StartShaded,
           ManualPlacementHonorsStartsOnPage / ManualPlacementIgnoresStartsOnPage,
           CaptureHonorsStartsOnPage / CaptureIgnoresStartsOnPage, RecaptureHonorsStartsOnPage /
           RecaptureIgnoresStartsOnPage, StartsOnPageIncludesTransients /
           StartsOnPageIgnoresTransients, IconTitle / !IconTitle, MwmButtons / FvwmButtons,
           MwmBorder / FvwmBorder, MwmDecor / !MwmDecor, MwmFunctions / !MwmFunctions,
           HintOverride / !HintOverride, !Button / Button, ResizeHintOverride /
           !ResizeHintOverride, OLDecor / !OLDecor, StickyIcon / SlipperyIcon,
           StickyAcrossPagesIcon / !StickyAcrossPagesIcon, StickyAcrossDesksIcon /
           !StickyAcrossDesksIcon, ManualPlacement / CascadePlacement / MinOverlapPlacement /
           MinOverlapPercentPlacement / TileManualPlacement / TileCascadePlacement /
           PositionPlacement, MinOverlapPlacementPenalties, MinOverlapPercentPlacementPenalties,
           DecorateTransient / NakedTransient, DontRaiseTransient / RaiseTransient,
           DontLowerTransient / LowerTransient, DontStackTransientParent / StackTransientParent,
           SkipMapping / ShowMapping, ScatterWindowGroups / KeepWindowGroupsOnDesk, UseDecor,
           UseStyle, !UsePPosition / NoPPosition / UsePPosition, !UseUSPosition, NoUSPosition /
           UseUSPosition, !UseTransientPPosition, NoTransientPPosition / UseTransientPPosition,
           !UseTransientUSPosition / NoTransientUSPosition / UseTransientUSPosition,
           !UseIconPosition / NoIconPosition / UseIconPosition, Lenience / !Lenience,
           ClickToFocus / SloppyFocus / MouseFocus|FocusFollowsMouse / NeverFocus,
           ClickToFocusPassesClickOff / ClickToFocusPassesClick, ClickToFocusRaisesOff /
           ClickToFocusRaises, MouseFocusClickRaises / MouseFocusClickRaisesOff, GrabFocus /
           GrabFocusOff, GrabFocusTransientOff / GrabFocusTransient, FPFocusClickButtons,
           FPFocusClickModifiers, !FPSortWindowlistByFocus / FPSortWindowlistByFocus,
           FPClickRaisesFocused / !FPClickRaisesFocused, FPClickDecorRaisesFocused /
           !FPClickDecorRaisesFocused, FPClickIconRaisesFocused / !FPClickIconRaisesFocused,
           !FPClickRaisesUnfocused / FPClickRaisesUnfocused, FPClickDecorRaisesUnfocused /
           !FPClickDecorRaisesUnfocused, FPClickIconRaisesUnfocused /
           !FPClickIconRaisesUnfocused, FPClickToFocus / !FPClickToFocus, FPClickDecorToFocus /
           !FPClickDecorToFocus, FPClickIconToFocus / !FPClickIconToFocus, !FPEnterToFocus /
           FPEnterToFocus, !FPLeaveToUnfocus / FPLeaveToUnfocus, !FPFocusByProgram /
           FPFocusByProgram, !FPFocusByFunction / FPFocusByFunction, FPFocusByFunctionWarpPointer
           / !FPFocusByFunctionWarpPointer, FPLenient / !FPLenient, !FPPassFocusClick /
           FPPassFocusClick, !FPPassRaiseClick / FPPassRaiseClick, FPIgnoreFocusClickMotion /
           !FPIgnoreFocusClickMotion, FPIgnoreRaiseClickMotion / !FPIgnoreRaiseClickMotion,
           !FPAllowFocusClickFunction / FPAllowFocusClickFunction, !FPAllowRaiseClickFunction /
           FPAllowRaiseClickFunction, FPGrabFocus / !FPGrabFocus, !FPGrabFocusTransient /
           FPGrabFocusTransient, FPOverrideGrabFocus / !FPOverrideGrabFocus, FPReleaseFocus /
           !FPReleaseFocus, !FPReleaseFocusTransient / FPReleaseFocusTransient,
           FPOverrideReleaseFocus / !FPOverrideReleaseFocus, StartsLowered / StartsRaised,
           IgnoreRestack / AllowRestack, FixedPosition / VariablePosition, FixedUSPosition /
           VariableUSPosition, FixedPPosition / VariablePPosition, FixedSize / VariableSize,
           FixedUSSize / VariableUSSize, FixedPSize / VariablePSize, !Closable / Closable,
           !Iconifiable / Iconifiable, !Maximizable / Maximizable, !AllowMaximizeFixedSize /
           AllowMaximizeFixedSize, IconOverride / NoIconOverride / NoActiveIconOverride,
           DepressableBorder / FirmBorder, MinWindowSize, MaxWindowSize, IconifyWindowGroups /
           IconifyWindowGroupsOff, ResizeOpaque / ResizeOutline, BackingStore / BackingStoreOff /
           BackingStoreWindowDefault, Opacity / ParentalRelativity, SaveUnder / SaveUnderOff,
           WindowShadeShrinks / WindowShadeScrolls, WindowShadeSteps, WindowShadeAlwaysLazy /
           WindowShadeBusy / WindowShadeLazy, EWMHDonateIcon / EWMHDontDonateIcon,
           EWMHDonateMiniIcon / EWMHDontDonateMiniIcon, EWMHMiniIconOverride /
           EWMHNoMiniIconOverride, EWMHUseStackingOrderHints / EWMHIgnoreStackingOrderHints,
           EWMHIgnoreStateHints / EWMHUseStateHints, EWMHIgnoreStrutHints / EWMHUseStrutHints,
           EWMHIgnoreWindowType / !EWMHIgnoreWindowType, EWMHMaximizeIgnoreWorkingArea /
           EWMHMaximizeUseWorkingArea / EWMHMaximizeUseDynamicWorkingArea,
           EWMHPlacementIgnoreWorkingArea / EWMHPlacementUseWorkingArea /
           EWMHPlacementUseDynamicWorkingArea, MoveByProgramMethod, Unmanaged, State, SnapGrid,
           SnapAttraction, EdgeMoveDelay, EdgeResizeDelay. EdgeMoveResistance, InitialMapCommand

           In the above list some options are listed as style-option/opposite-style-option. The
           opposite-style-option for entries that have them describes the fvwm default behavior
           and can be used if you want to change the fvwm default behavior.

           Focus policy
               ClickToFocus instructs fvwm to give the focus to a window when it is clicked in.
               The default MouseFocus (or its alias FocusFollowsMouse) tells fvwm to give a
               window the focus as soon as the pointer enters the window, and take it away when
               the pointer leaves the window. SloppyFocus is similar, but doesn’t give up the
               focus if the pointer leaves the window to pass over the root window or a
               ClickToFocus window (unless you click on it, that is), which makes it possible to
               move the mouse out of the way without losing focus. A window with the style
               NeverFocus never receives the focus. This is useful for modules like FvwmButtons.
               for example. Note: Once any of the "FP..." styles has been used, the defaults that
               come with the basic focus policies are not restored when the latter are used
               again. For example, once !FPGrabFocus has been used, using ClickToFocus does not
               restore FPGrabFocus.

               The focus model can be augmented with several additional options. In fvwm-2.5.3
               and later, there are a large number of advanced options beginning with "FP" or
               "!FP". These options shall replace the older options one day and are described
               first. Using any of these new options may limit compatibility with older releases.
               In general, options beginning with "FP" turn a feature on, while those beginning
               with "!FP" turn it off.

           Focusing the window
               With FPEnterToFocus, when the pointer enters a window it receives focus.

               With FPLeaveToUnfocus a window loses focus when the pointer leaves it.

               With FPClickToFocus, FPClickDecorToFocus or FPClickIconToFocus, a window receives
               focus when the inside of the window or the decorations or its icon is clicked.

               The FPFocusByProgram style allows windows to take the focus themselves.

               The !FPFocusByFunction style forbids that a window receives the focus via the
               Focus and FlipFocus commands.

               The FPFocusByFunctionWarpPointer style controls if the pointer is warped to a
               selected window when the Focus command is used.

               FPLenient allows focus on windows that do not want it, like FvwmPager or xclock.

               The FPFocusClickButtons style takes a list of mouse buttons that can be clicked to
               focus or raise a window when the appropriate style is used. The default is to use
               the first three buttons ("123").

               The FPFocusClickModifiers style takes a list of modifier keys just like the Key
               command. The exact combination of modifier keys must be pressed for the click to
               focus or raise a window to work. The default is to use no modifiers ("N").

               With the FPPassFocusClick style, the click that was used to focus a window is
               passed to the application.

               With the FPAllowFocusClickFunction style, the click that was used to focus a
               window can also trigger a normal action that was bound to the window with the
               Mouse command).

               If the FPIgnoreFocusClickMotion style is used, clicking in a window and then
               dragging the pointer with the button held down does not count as the click to
               focus the window. Instead, the application processes these events normally. This
               is useful to select text in a terminal window with the mouse without raising the
               window. However, mouse bindings on the client window are not guaranteed to work
               anymore (see Mouse command). This style forces the initial click to be passed to
               the application. The distance that the pointer must be moved to trigger this is
               controlled by the MoveThreshold command.

               The FPSortWindowlistByFocus and !FPSortWindowlistByFocus styles control whether
               the internal window list is sorted in the order the windows were focused or in the
               order they were created. The latter is the default for ClickToFocus and
               SloppyFocus.

               Clicking the window to raise

               The styles FPClickRaisesFocused, FPClickDecorRaisesFocused and
               FPClickIconRaisesFocused allow one to raise the window when the interior or the
               decorations or the icon of the window is clicked while the window is already
               focused.

               The styles FPClickRaisesUnfocused, FPClickDecorRaisesUnfocused and
               FPClickIconRaisesUnfocused allow one to raise the window when the interior or the
               decorations or the icon of the window is clicked while the window is not yet
               focused.

               With the FPPassRaiseClick style, the click that was used to raise the window is
               passed to the application.

               With the FPAllowRaiseClickFunction style, the click that was used to raise the
               window can also trigger a normal action that was bound to the window with the
               Mouse command.

               If the FPIgnoreRaiseClickMotion style is used, clicking in a window and then
               dragging the pointer with the button held down does not count as the click to
               raise the window. Instead, the application processes these events normally. This
               is useful to select text in a terminal window with the mouse without raising the
               window. However, mouse bindings on the client window are not guaranteed to work
               anymore (see Mouse command. Note that this style forces that the initial click is
               passed to the application. The distance that the pointer must be moved to trigger
               this is controlled by the MoveThreshold command.

               Grabbing the focus when a new window is created

               New normal or transient windows with the FPGrabFocus or FPGrabFocusTransient style
               automatically receive the focus when they are created. FPGrabFocus is the default
               for windows with the ClickToFocus style. Note that even if these styles are
               disabled, the application may take the focus itself. Fvwm can not prevent this.

               The OverrideGrabFocus style instructs fvwm to never take away the focus from such
               a window via the GrabFocus or GrabFocusTransient styles. This can be useful if you
               like to have transient windows receive the focus immediately, for example in a web
               browser, but not while you are working in a terminal window or a text processor.

               The above three styles are accompanied by FPReleaseFocus, FPReleaseFocusTransient
               and FPOverrideReleaseFocus. These control if the focus is returned to another
               window when the window is closed. Otherwise no window or the window under the
               pointer receives the focus.

               ClickToFocusPassesClickOff and ClickToFocusPassesClick controls whether a mouse
               click to focus a window is sent to the application or not. Similarly,
               ClickToFocusRaisesOff/MouseFocusClickRaisesOff and
               ClickToFocusRaises/MouseFocusClickRaises control if the window is raised (but
               depending on the focus model).

               Note: in fvwm versions prior to 2.5.3, the "Click..." options applied only to
               windows with ClickToFocus while the "Mouse..." options applied to windows with a
               different focus policy. This is no longer the case.

               The old GrabFocus style is equivalent to using FPGrabFocus
               FPReleaseFocus.

               The old GrabFocusTransient style is equivalent to using FPGrabFocusTransient +
               FPReleaseFocusTransient.

               Lenience is equivalent to the new style FPLenient.

       Window title
           The Title and !Title options determine whether the window is decorated with a
           title-bar. By default all windows have a title-bar. NoTitle is equivalent to !Title
           but is deprecated.

           Windows with the TitleAtBottom, TitleAtLeft or TitleAtRight style have a title-bar
           below, to the left or to the right of the window instead of above as usual. The
           TitleAtTop style restores the default placement. Even if the window has the !Title
           style set, this affects the WindowShade command. Please check the WindowShade command
           for interactions between that command and these styles. Titles on the left or right
           side of the windows are augmented by the following styles:

           Normally, the text in titles on the left side of a window is rotated counterclockwise
           by 90 degrees from the normal upright position and 90 degrees clockwise for titles on
           the right side. It can also be rotated in the opposite directions with
           LeftTitleRotatedCW if TitleAtLeft is used, and with RightTitleRotatedCCW if
           TitleAtRight is used. The defaults can be restored with LeftTitleRotatedCCW and
           RightTitleRotatedCW. A normal horizontal text may be rotated as well with
           TopTitleRotated if TitleAtTop is used, and with BottomTitleRotated if TitleAtBottom is
           used. The defaults can be restored with TopTitleNotRotated and BottomTitleNotRotated.

           By default the title bar decoration defined using the TitleStyle command is rotated
           following the title text rotation (see the previous paragraph). This can be disabled
           by using the !UseTitleDecorRotation style. UseTitleDecorRotation reverts back to the
           default.

           With the StippledTitle style, titles are drawn with the same effect that is usually
           reserved for windows with the Sticky, StickyAcrossPages or StickyAcrossDesks style.
           !StippledTitle reverts back to normal titles. StippledTitleOff is equivalent to
           !StippledTitle but is deprecated.

           Colorset takes the colorset number as its sole argument and overrides the colors set
           by Color. Instead, the corresponding colors from the given colorset are used. Note
           that all other features of a colorset are not used. Use the Colorset decoration style
           in the TitleStyle and ButtonStyle command for that. To stop using the colorset, the
           colorset number is omitted.

           BorderColorset takes eight positive integers as its arguments and will apply the given
           colorsets to the eight individual components of the window border.

           For backwards compatibility, if one integer is supplied, that is applied to all window
           border components.

           The border is split up into the following definitions, and is the same order as the
           colorsets which will be applied to the border.

                   North, North East, East, South East, South, South West, West, North West

           North, East, South, and West refer to the top, left, bottom, and right sides of the
           window border.

           NE, SE, SW, and NW refer to the window handles.

           NOTE: due to how window handles are rendered, there is no way to make one complete
           edge of a window the same color as defined by either North, South, East, or West.

           The HilightBorderColorset style option works the same as BorderColorset but is used
           when the window has the focus.

           !IconTitle disables displaying icon labels while the opposite style IconTitle enables
           icon labels (default behaviour). NoIconTitle is equivalent to !IconTitle but is
           deprecated.

           IconTitleColorset takes the colorset number as its sole argument and overrides the
           colors set by Color or Colorset. To stop using this colorset, the argument is omitted.

           HilightIconTitleColorset takes the colorset number as its sole argument and overrides
           the colors set by HilightColor or HilightColorset. To stop using this colorset, the
           argument is omitted.

           IconBackgroundColorset takes the colorset number as its sole argument and uses it to
           set a background for the icon picture. By default the icon picture is not drawn onto a
           background image. To restore the default, the argument is omitted.

           IconTitleRelief takes one numeric argument that may be between -50 and +50 pixels and
           defines the thickness of the 3D relief drawn around the icon title. With negative
           values the icon title gets a pressed in look. The default is 2 and it is restored if
           the argument is omitted.

           IconBackgroundRelief takes one numeric argument that may be between -50 and +50 pixels
           and defines the thickness of the 3D relief drawn around the icon picture background
           (if any). With negative values the icon background gets a pressed in look. The default
           is 2 and it is restored if the argument is omitted.

           IconBackgroundPadding takes one numeric argument that may be between 0 and 50 pixels
           and defines the amount of free space between the relief of the icon background picture
           (if any) and the icon picture. The default is 2 and it is restored if the argument is
           omitted.

           The Font and IconFont options take the name of a font as their sole argument. This
           font is used in the window or icon title. By default the font given in the DefaultFont
           command is used. To revert back to the default, use the style without the name
           argument. These styles replace the older WindowFont and IconFont commands.

           The deprecated IndexedWindowName style causes fvwm to use window titles in the form

               name (i)

           where name is the exact window name and i is an integer which represents the i th
           window with name as window name. This has been replaced with:

               TitleFormat %n (%t)

           ExactWindowName restores the default which is to use the exact window name. Deprecated
           in favour of:

               TitleFormat %n

           IndexedIconName and ExactIconName work the same as IndexedWindowName and
           ExactWindowName styles but for the icon titles. Both are deprecated in favour of:

               IconTitleFormat %n (%t)
               IconTitleFormat %n

           TitleFormat describes what the visible name of a window should look like, with the
           following placeholders being valid:

           %n
               Insert the window’s name.

           %i
               Insert the window’s icon name.

           %c
               Insert the window’s class name.

           %r
               Insert the window’s resource name.

           %t
               Insert the window count.

           %I
               Insert the window ID.

           %%
               Insert a literal '%' character.

               Any amount of whitespace may be used, along with other characters to make up the
               string — but a valid TitleFormat string must contain at least one of the
               placeholders mentioned. No quote stripping is performed on the string, so for
               example the following is printed verbatim:

                   TitleFormat " %n " -> [%t] ->      [%c]

               Note: It’s perfectly possible to use a TitleFormat which can result in wiping out
               the visible title altogether. For example:

                   TitleFormat %z

           Simply because the placeholder '%z' isn’t supported. This is not a bug but rather a
           facet of how the formatting parser works.

           + IconTitleFormat describes what the visible icon name of a window should look like,
           with the options being the same as TitleFormat.

       Title buttons
           Button and !Button take a numeric argument which is the number of the title-bar button
           which is to be shown or omitted. NoButton is equivalent to !Button but is deprecated.

           MwmButtons makes the Maximize button look pressed-in when the window is maximized. See
           the MwmDecorMax flag in ButtonStyle for more information. To switch this style off
           again, use the FvwmButtons style.

       Borders
           !Borders suppresses the window border (but not the title) completely. The Borders
           style enables them again. Without borders, all other styles affecting window borders
           are meaningless.

           MwmBorder makes the 3D bevel more closely match Mwm’s. FvwmBorder turns off the
           previous option.

           With the !Handles style, the window does not get the handles in the window corners
           that are commonly used to resize it. With !Handles, the width from the BorderWidth
           style is used. By default, or if Handles is specified, the width from the HandleWidth
           style is used. NoHandles is equivalent to !Handles but is deprecated.

           HandleWidth takes a numeric argument which is the width of the border to place the
           window if it does have resize-handles. Using HandleWidth without an argument restores
           the default.

           BorderWidth takes a numeric argument which is the width of the border to place the
           window if it does not have resize-handles. It is used only if the !Handles style is
           specified too. Using BorderWidth without an argument restores the default.

           DepressableBorder makes the border parts of the window decoration look sunken in when
           a button is pressed over them. This can be disabled again with the FirmBorder style.

       Icons, shading, maximizing, movement, resizing
           Icon takes an (optional) unquoted string argument which is the icon bitmap or pixmap
           to use. Icons specified this way override pixmap icons, but not icon windows or the
           ewmh icon, provided by the client in the application (with the WM_HINTS property or
           with the ewmh NET_WM_ICON property). The _IconOverride style changes the behavior to
           override any client-provided icons; the NoIconOverride style changes the behavior to
           not override any client-provided icons; the default overriding behavior can be
           activated with the NoActiveIconOverride style. With this style, fvwm uses application
           provided icons if the icon is changed but uses the icon provided in the configuration
           file until then.

           There is one exception to these rules, namely

               Style * Icon unknown.xpm

           doesn’t force the unknown.xpm icon on every window, it just sets the default icon like
           the DefaultIcon command. If you really want all windows to have the same icon, you can
           use

               Style ** Icon unknown.xpm

           If the NoIcon attribute is set then the specified window simply disappears when it is
           iconified. The window can be recovered through the window-list. If Icon is set without
           an argument then the NoIcon attribute is cleared but no icon is specified. An example
           which allows only the FvwmPager module icon to exist:

               Style * NoIcon
               Style FvwmPager Icon

           IconBox takes no argument, four numeric arguments (plus optionally a screen
           specification), an X11 geometry string or the string "none":

               IconBox [screen scr-spec] l t r b

           or

               IconBox geometry

           Where l is the left coordinate, t is the top, r is right and b is bottom. Negative
           coordinates indicate distance from the right or bottom of the screen. If the first
           argument is the word screen, the scr-spec argument specifies the RandR screen on which
           the IconBox is defined ´or the additional 'w' for the screen where the window center
           is located. This is only useful with multiple screens. The "l t r b" specification is
           more flexible than an X11 geometry. For example:

               IconBox -80 240 -1 -1

           defines a box that is 80 pixels wide from the right edge, 240 pixels down from the
           top, and continues to the bottom of the screen.

           Perhaps it is easier to use is an X11 geometry string though:

               IconBox 1000x70-1-1

           places an 1000 by 70 pixel icon box on the bottom of the screen starting in the lower
           right hand corner of the screen. One way to figure out a geometry like this is to use
           a window that resizes in pixel increments, for example, xv. Then resize and place the
           xv window where you want the iconbox. Then use FvwmIdent to read the windows geometry.
           The icon box is a region of the screen where fvwm attempts to put icons for any
           matching window, as long as they do not overlap other icons. Multiple icon boxes can
           be defined as overflow areas. When the first icon box is full, the second one is
           filled. All the icon boxes for one style must be defined in one Style command. For
           example:

               Style * IconBox -80 240 -1 -1, \
                 IconBox 1000x70-1-1

           A Style command with the IconBox option replaces any icon box defined previously by
           another Style command for the same style. That’s why the backslash in the previous
           example is required.

           Note: The geometry for the icon box command takes the additional screen specifier "@w"
           in case RandR isused. This designates the screen where the window center is located.
           The additional screen specifier is not allowed anywhere else.

           If you never define an icon box, or you fill all the icon boxes, fvwm has a default
           icon box that covers the screen, it fills top to bottom, then left to right, and has
           an 80x80 pixel grid. To disable all but the default icon box you can use IconBox
           without arguments in a separate Style command. To disable all icon boxes including the
           default icon box, the argument "none" can be specified.

           Hint: You can auto arrange your icons in the icon box with a simple fvwm function. Put
           the "DeiconifyAndRearrange" function below in your configuration file:

               AddToFunc DeiconifyAndRearrange
                + C Iconify off
                + C All (CurrentPage, Iconic) PlaceAgain Icon

           And then replace all places where you call the Iconify command to de-iconify an icon
           with a call to the new function. For example replace

               AddToFunc IconFunc
                + C Iconify off
                + M Raise
                + M Move
                + D Iconify off

               Mouse 1 I A Iconify off

           with

               AddToFunc IconFunc
                + C DeiconifyAndRearrange
                + M Raise
                + M Move
                + D DeiconifyAndRearrange

               Mouse 1 I A DeiconifyAndRearrange

           IconGrid takes 2 numeric arguments greater than zero.

               IconGrid x y

           Icons are placed in an icon box by stepping through the icon box using the x and y
           values for the icon grid, looking for a free space. The default grid is 3 by 3 pixels
           which gives a tightly packed appearance. To get a more regular appearance use a grid
           larger than your largest icon. Use the IconSize argument to clip or stretch an icon to
           a maximum size. An IconGrid definition must follow the IconBox definition that it
           applies to:

               Style * IconBox -80x240-1-1, IconGrid 90 90

           IconFill takes 2 arguments.

               IconFill Bottom Right

           Icons are placed in an icon box by stepping through the icon box using these arguments
           to control the direction the box is filled in. By default the direction is left to
           right, then top to bottom. This would be expressed as:

               IconFill left top

           To fill an icon box in columns instead of rows, specify the vertical direction (top or
           bottom) first. The directions can be abbreviated or spelled out as follows: "t",
           "top", "b", "bot", "bottom", "l", "lft", "left", "r", "rgt", "right". An IconFill
           definition must follow the IconBox definition that it applies to:

               Style * IconBox -80x240-1-1, IconFill b r

           IconSize sets limits on the size of an icon image. Both user-provided and
           application-provided icon images are affected.

               IconSize [ width height [ maxwidth maxheight ] ]

           All arguments are measured in pixels. When all four arguments are passed to IconSize,
           width and height represent the minimum size of an icon, and maxwidth and maxheight
           represent the maximum size of an icon. Icon images that are smaller than the minimum
           size are padded. Icon images that are bigger than the maximum size are clipped.

           If only two arguments are passed to IconSize, width and height represent the absolute
           size of an icon. Icons covered by this style are padded or clipped to achieve the
           given size.

           If no arguments are specified, the default values are used for each dimension. This
           effectively places no limits on the size of an icon.

           The value of "-1" can be used in place of any of the arguments to specify the default
           value for that dimension.

           In addition to the numeric arguments, 1 additional argument can be "Stretched",
           "Adjusted", or "Shrunk".

           Note that module provided icon managers are not affected by this style.

           MiniIcon specifies a pixmap to use as the miniature icon for the window. This
           miniature icon can be drawn in a title-bar button (see ButtonStyle), and can be used
           by various fvwm modules (FvwmIconMan and FvwmPager). It takes the name of a pixmap as
           an argument.

           WindowShadeShrinks and WindowShadeScrolls control if the contents of a window that is
           being shaded with the WindowShade command are scrolled (default) or if they stay in
           place. The shrinking mode is a bit faster

           The WindowShadeSteps option selects the number of steps for animation when shading a
           window with WindowShade. It takes one number as its argument. If the number has a
           trailing 'p' it sets the number of pixels to use as the step size instead of a fixed
           number of steps. 0 disables the animation. This happens too if the argument is omitted
           or invalid.

           The WindowShade command has two modes of operation: busy and lazy shading. Busy
           shading can be 50% slower than lazy shading, but the latter can look strange under
           some conditions, for example, if the window borders, buttons or the title are filled
           with a tiled pixmap. Also, the window handles are not drawn in lazy mode and the
           border relief may only be drawn partially right before the window reaches the shaded
           state or tight after leaves the unshaded state. By default, fvwm uses lazy mode if
           there are no bad visual effects (not counting the window handles) and busy mode
           otherwise. Use the WindowShadeAlwaysLazy or WindowShadeBusy to force using the lazy or
           busy mode. The default setting is restored with WindowShadeLazy.

           ResizeOpaque instructs fvwm to resize the corresponding windows with their contents
           visible instead of using an outline. Since this causes the application to redraw
           frequently it can be quite slow and make the window flicker excessively, depending on
           the amount of graphics the application redraws. The ResizeOutline style (default)
           negates the ResizeOpaque style. Many applications do not like their windows being
           resized opaque, e.g. XEmacs, Netscape or terminals with a pixmap background. If you do
           not like the result, do not use the ResizeOpaque style for these windows. To exempt
           certain windows from opaque resizing you could use these lines in your configuration
           file:

               Style * ResizeOpaque
               Style rxvt ResizeOutline
               Style emacs ResizeOutline

           Sticky makes the window sticky, i.e. it is always visible on each page and each desk.
           The opposite style, Slippery reverts back to the default.

           StickyIcon makes the window sticky when it’s iconified. It de-iconifies on top the
           active desktop. SlipperyIcon reverts back to the default.

           StickyAcrossPages and StickyAcrossPagesIcon work like Sticky and StickyIcon, but stick
           the window only across pages, not desks while StickyAcrossDesks and
           StickyAcrossDesksIcon works the other way round.

           Windows that have been marked as Sticky or StickyAcrossDesks or StickyAcrossPages will
           have stipples drawn on the titlebar. This can be negated with the !StickyStippledTitle
           style. The style StickyStippledTitle puts back the stipples where that window has also
           been marked as Sticky. Note that this is the default style for Sticky windows. Sticky
           icons will have stipples drawn on the icon title. This can be disabled in the same way
           with the !StickyStippledIconTitle style.

           Windows with the StartIconic style are shown as icons initially. Note that some
           applications counteract that by deiconifying themselves. The default is to not iconify
           windows and can be set with the StartNormal style.

           StickyIcon makes the window sticky when it’s iconified. It de-iconifies on top the
           active desktop. SlipperyIcon reverts back to the default.

           StickyIconPage works like StickyIcon, but sticks the icon only across pages, not desks
           while StickyIconDesk works the other way round.

           StippledIconTitle works like StippledTitle in that it draws stipples on the titles of
           icons but doesn’t make the icon sticky.

           IgnoreRestack makes fvwm ignore attempts of clients to raise or lower their own
           windows. By default, the opposite style, AllowRestack is active.

           FixedPosition and FixedUSPosition make fvwm ignore attempts of the user to move the
           window. It is still possible to move the window by resizing it. To allow the user to
           move windows, use the VariablePosition or VariableUSPosition style.

           FixedSize and FixedUSSize make fvwm ignore attempts of the user to resize the window.
           To allow the user to resize windows, use the VariableSize or VariableUSSize style.

           FixedPPosition and FixedPSize make fvwm ignore attempts of the program to move or
           resize its windows. To allow this kind of actions, use the VariablePPosition or
           VariablePSize style. These styles may sometimes affect the initial placement and
           dimensions of new windows (depending on the application). If windows are created at
           strange places, try either the VariablePPosition or !UsePPosition styles. The
           FixedPSize style may screw up window dimensions for some applications. Do Not use this
           style in this case.

           MoveByProgramMethod affects how fvwm reacts to requests by the application to move its
           windows. By default, fvwm tries to detect which method to use, but it sometimes
           detects the wrong method. You may come across a window that travels across the screen
           by a few pixels when the application resizes it, moves to a screen border with the
           frame decorations off screen, that remembers its position for the next time it starts
           but appears in a slighly shifted position, or that attepmts to become full screen but
           has the. Try out both options, UseGravity and IgnoreGravity on the window (and that
           window only) and see if that helps. By default, fvwm uses the AutoDetect method. Once
           the method was detected, it is never changed again. As long as fvwm can not detect the
           proper method, it uses IgnoreGravity. To force fvwm to retry the detection, use one of
           the other two options first and then use AutoDetect again.

           Note: This option was introduced to alleviate a problem with the ICCCM specification.
           The ICCCM clearly states that the UseGravity option should be used, but traditionally
           applications ignored this rule.

           Closable enables the functions Close, Delete and Destroy to be performed on the
           windows. This is on by default. The opposite, !Closable, inhibits the window to be
           closed.

           Iconifiable enables the function Iconify to be performed on the windows. This is on by
           default. The opposite, !Iconifiable, inhibits the window from being iconified.

           Maximizable enables the function Maximize to be performed on the windows. This is on
           by default. The opposite, !Maximizable, inhibits the window from being maximized.

           AllowMaximizeFixedSize enables the function Maximize to be performed on windows that
           are not resizable, unless maximization has been disabled either using the style
           !Maximizable or through WM hints. This is on by default. The opposite,
           !AllowMaximizeFixedSize, inhibits all windows that are not resizable from being
           maximized.

           ResizeHintOverride instructs fvwm to ignore the program supplied minimum and maximum
           size as well as the resize step size (the character size in many applications). This
           can be handy for broken applications that refuse to be resized. Do not use it if you
           do not need it. The default (opposite) style is NoResizeOverride.

           MinWindowSize [ width [ p | c ] height [ p | c ] ] Tells fvwm the minimum width and
           height of a window. The values are the percentage of the total screen area. If the
           letter 'p' is appended to either of the values, the numbers are interpreted as pixels.
           If the letter 'c' is appended to either of the values, the numbers are in terms of the
           client window’s size hints, which can be useful for windows such as terminals to
           specify the number of rows or columns. This command is useful to deal with windows
           that freak out if their window becomes too small. If you omit the parameters or their
           values are invalid, both limits are set to 0 pixels (which is the default value).

           MaxWindowSize [ width [ p | c ] height [ p | c ] ] Tells fvwm the maximum width and
           height of a window. The values are the percentage of the total screen area. If the
           letter 'p' is appended to either of the values, the numbers are interpreted as pixels.
           If the letter 'c' is appended to either of the values, the numbers are in terms of the
           client window’s size hints, which can be useful for windows such as terminals to
           specify the number of rows or columns. This command is useful to force large
           application windows to be fully visible. Neither height nor width may be less than 100
           pixels. If you omit the parameters or their values are invalid, both limits are set to
           32767 pixels (which is the default).

           With IconifyWindowGroups all windows in the same window group are iconified and
           deiconified at once when any window in the group is (de)iconified. The default is
           IconifyWindowGroupsOff, which disables this behavior. Although a number of
           applications use the window group hint, it is rarely used in a proper way, so it is
           probably best to use IconifyWindowGroups only for selected applications.

           The option SnapAttraction affects interactive window movement: If during an
           interactive move the window or icon comes within proximity pixels of another the
           window or icon, it is moved to make the borders adjoin. The default of 0 means that no
           snapping happens. Calling this command without arguments turns off snap attraction and
           restores the default behavior. Please refer also to the SnapGrid option.

           The second argument optional and may be set to one of the five following values: With
           All both icons and windows snap to other windows and other icons. SameType lets
           windows snap only to windows, and icons snap only to icons. With Windows windows snap
           only to other windows. Similarly with Icons icons snap only to other icons. With None
           no snapping takes place. This option can be useful in conjunction with the thirs
           argument if you only want to snap against the screen edges. The default behavior is
           All.

           The third and last optional argument may be set to one of the four following values:

           •   With Screen the already snapping icons or windows, which is controlled by the
               second argument, will snap now also to the screen edges.

           •   ScreenWindows snaps only windows to the screen edges.

           •   ScreenIcons snaps only icons to the screen edges.

           •   ScreenAll snaps windows and icons to the screen edges.

       The option SnapGrid defines an invisible grid on the screen. During an interactive move a
       window or icon is positioned such that its location (top left corner) is coincident with
       the nearest grid point. The default x-grid-size and y-grid-size setting are both 1, which
       is effectively no grid all.

       An interactive move with both SnapGrid and SnapAttraction results in the window being
       moved to be adjacent to the nearest window border (if within snap proximity) or grid
       position. The window moves the shortest distance possible to satisfy both SnapGrid and
       SnapAttraction. Note that the x and y coordinates are not coupled. For example, a window
       may snap to another window on the x axis while snapping to a grid point on the y axis.
       Using this style without arguments reinstates the default settings.

       The styles EdgeMoveDelay and EdgeResizeDelay define how hard it is to change the desktop
       viewport by moving or resizing a window 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. The command EdgeScroll determines how far the viewport is scrolled. If -1 is
       given as the delay, page flipping is disabled completely. The defaults are no delay for
       moving (0) and no flipping for resizing (-1). Using these styles without any argument
       restores the default settings. Note that, with

           EdgeScroll 0 0

       it is still possible to move or resize windows across the edge of the current screen. See
       also EdgeThickness.

       The option EdgeMoveResistance makes it easier to place a window directly adjacent to a
       RandR screen’s edge. It takes one or two parameters. The first parameter tells how many
       pixels over an outside edge of the screen a window’s edge must move before it actually
       moves partially off the screen. The optional second parameter does the same as the first,
       but for inside edges (shared edge between two RandR monitors). If omitted, there is no
       resistance between inside edges. Note that the center of the window being moved determines
       the screen on which the window should be kept. Both values are 0 (no resistance) by
       default. To restore the defaults, the option EdgeMoveResistance can be used without any
       parameters.

       The option InitialMapCommand allows for any valid fvwm command or function to run when the
       window is initially mapped by fvwm. Example:

           Style MyWindow StartsOnPage 0 0, InitialMapCommand Iconify

       This would hence place the window called MyWindow on page 0 0 for the current desk, and
       immediately run the Iconify command on that window.

       Note that should InitialMapCommand be used as a global option for all windows, but there
       is a need that some windows should not have this command applied, then an action of Nop
       can be used on those windows, as in the following example:

           Style * InitialMapCommand Iconify
           Style XTeddy InitialMapCommand Nop

       Window Manager placement
           Applications can place windows at a particular spot on the screen either by window
           manager hints or a geometry specification. When they do neither, then the window
           manager steps in to find a place for the window. Fvwm knows several ways to deal with
           this situation. The default is TileCascadePlacement.

           PositionPlacement [Center|UnderMouse|move-arguments] When used without an argument,
           new windows are placed in the top left corner of the display. With the argument
           Center, all new window appear at the center of the screen, and with UnderMouse,
           windows are centered under the mouse pointer where possible. If the window is unable
           to fit on the screen because the pointer is at the edge of the screen, then the window
           is forced on-screen using this option. If any other move-arguments are given, they are
           interpreted exactly as the Move command does (with the exception that references to
           the current window position do not work as the window has not been placed yet).

           CascadePlacement automatically place new windows in a cascading fashion.

           TileCascadePlacement automatically places new windows in a smart location - a location
           in which they do not overlap any other windows on the screen. If no such position can
           be found CascadePlacement is used as a fall-back method.

           TileManualPlacement This is the same as TileCascadePlacement, but uses ManualPlacement
           as the fall-back method.

           MinOverlapPlacement automatically places new windows in a location in which the
           overlapping area in pixels of other windows is minimized. By default this placement
           policy tries to avoid overlapping icons and windows on higher layers. This can be
           configured with the MinOverlapPlacementPenalties style.

           MinOverlapPercentPlacement is similar to MinOverlapPlacement but tries to minimize the
           overlapped percentages of other windows instead of the overlapped area in pixels. This
           placement policy tries to avoid covering other windows completely and tries even
           harder not to cover small windows. This can be configured with the
           MinOverlapPlacementPenalties and MinOverlapPercentPlacementPenalties styles.

           MinOverlapPlacementPenalties takes at most 6 positive or null decimal arguments:

               normal ontop icon sticky below strut

           if trailing arguments are missing the default is used which is:

               1 5 10 1 0.05 50

           To reset this style to the default values, prefix it with a '!'. This style configures
           the MinOverlapPlacement and MinOverlapPercentPlacement placement policy. The normal
           factor affects normal windows, the ontop factor affects windows with a greater layer
           than the window being placed, the icon factor affects icons, the sticky factor affects
           sticky windows, the below factor affects windows with a smaller layer than the window
           being placed, the strut factor affects the complement of the EWMH working area if the
           window being placed has the EWMHPlacementUseWorkingArea style and windows with an EWMH
           strut hint (i.e., a "please do not cover me" hint) if the window being placed has the
           EWMHPlacementUseDynamicWorkingArea style. These factors represent the amount of area
           that these types of windows (or area) are counted as, when a new window is placed. For
           example, by default the area of ontop windows is counted 5 times as much as normal
           windows. So MinOverlapPlacement and MinOverlapPercentPlacement covers 5 times as much
           area of another window before it will cover an ontop window. To treat ontop windows
           the same as other windows, set this to 1. To really, really avoid putting windows
           under ontop windows, set this to a high value, say 1000. This style affects the window
           already mapped and not the window which is currently placed. There is one exception to
           this rule: in the case of the window being placed has the EWMHPlacementUseWorkingArea
           style the strut factor affects the placed window.

           MinOverlapPercentPlacementPenalties takes at most 4 positive or null integer
           arguments:

               cover_100 cover_95 cover_85 cover_75

           if trailing arguments are missing the defaults are used which are:

               12 6 4 1

           To reset this style to the default values, prefix it with a '!'. This style affects
           the MinOverlapPercentPlacement placement policy and is similar to the
           MinOverlapPlacementPenalties style. The cover_xx factor is used when the window being
           placed covers at least xx percent of the window. This factor is added to the factor
           determined by the MinOverlapPlacementPenalties style.

           ManualPlacement (aka active placement). The user is required to place every new window
           manually. The window only shows as a rubber band until a place is selected manually.
           The window is placed when a mouse button or any key except Escape is pressed. Escape
           aborts manual placement which places the window in the top left corner of the screen.
           If mouse button 2 is pressed during the initial placement of a window (respectively
           Shift and mouse button 1 in case Mwm emulation has been enabled with the Emulate
           command), the user is asked to resize the window too.

           It is possible to define buttons usable to place windows with the Move command and the
           special context 'P' for placement (see Move command). However, you can’t redefine the
           way to also resize the window other than the way it is affected by the Emulate
           command. The button used for placing the window can be checked with the PlacedByButton
           condition (see Current command).

           Example:

               Style * ManualPlacement

               *FvwmEvent: PassID
               *FvwmEvent: add_window GrowDownFunc
               AddToFunc StartFunction
               + I FvwmEvent

               AddToFunc GrowDownFunc
               + I windowid $0 (PlacedByButton 3) \
               Resize bottomright keep -0p

           Now, whenever a window is created and the user presses button 3 to finish initial
           placement, the window is automatically enlarged until it hits the bottom screen
           border.

           Old placement styles DumbPlacement / SmartPlacement / SmartPlacementOff,
           CleverPlacement / CleverPlacementOff, ActivePlacement / RandomPlacement,
           ActivePlacementsHonorsStartsOnPage / ActivePlacementsHonorsStartsOnPageOff are still
           supported but will be removed in the future. The old and new styles can be translated
           according to the following table:

               Style * DumbPlacement, RandomPlacement
               -->
               Style * CascadePlacement

               Style * DumbPlacement, ActivePlacement
               -->
               Style * ManualPlacement

               Style * SmartPlacement, \
               RandomPlacement, CleverPlacementOff
               -->
               Style * TileCascadePlacement

               Style * SmartPlacement, \
               ActivePlacement, CleverPlacementOff
               -->
               Style * TileManualPlacement

               Style * SmartPlacement, CleverPlacement
               -->
               Style * MinOverlapPlacement

               Style * SmartPlacement, \
               ActivePlacement, CleverPlacement
               -->
               Style * MinOverlapPercentPlacement

               Style * ActivePlacementsHonorsStartsOnPage
               -->
               Style * ManualPlacementsHonorsStartsOnPage

               Style * ActivePlacementsHonorsStartsOnPageOff
               -->
               Style * ManualPlacementsHonorsStartsOnPageOff

       Placement policy options and window stacking
           !UsePPosition instructs fvwm to ignore the program specified position (PPosition hint)
           when adding new windows. Using PPosition is required for some applications, but if you
           do not have one of those it’s a real headache. Many programs set PPosition to
           something obnoxious like 0,0 (upper left corner). Note: !UsePPosition is equivalent to
           the deprecated option !UsePPosition

           !UseUSPosition works like !UsePPosition but applies suppresses using the user
           specified position indicated by the program (USPosition hint). It is generally a bad
           thing to override the user’s choice, but some applications misuse the USPosition hint
           to force their windows to a certain spot on the screen without the user’s consent.
           Note: !UseUSPosition is equivalent to the deprecated option !USPosition

           NoUseTransientPPosition and UseTransientPPosition work like !UsePPosition and
           UsePPosition but apply only to transient windows. Note: !UseTransientPPosition is
           equivalent to the deprecated option !TransientPPosition

           NoUseIconPosition instructs fvwm to ignore the program specified icon position
           (IconPosition hint) when iconifying the window. Note: !UseIconPosition is equivalent
           to the deprecated option !IconPosition

           StartsOnDesk takes a numeric argument which is the desktop number on which the window
           should be initially placed. Note that standard Xt programs can also specify this via a
           resource (e.g. "-xrm '*Desk: 1'").

           StartsOnPage takes 1, 2, or 3 numeric arguments. If one or three arguments are given,
           the first (or only) argument is the desktop number. If three arguments are given, the
           2nd and 3rd arguments identify the x,y page position on the virtual window. If two
           arguments are given, they specify the page position, and indicate no desk preference.
           If only one argument is given, StartsOnPage functions exactly like StartsOnDesk. For
           those standard Xt programs which understand this usage, the starting desk/page can
           also be specified via a resource (e.g., "-xrm '*page: 1 0 2'"). StartsOnPage in
           conjunction with SkipMapping is a useful technique when you want to start an app on
           some other page and continue with what you were doing, rather than waiting for it to
           appear.

           StartsOnScreen takes one argument. It must be a valid RandR name. A new window is
           placed on the specified screen. The default is to place windows on the screen that
           contains the mouse pointer at the time the window is created. However, those windows
           which are not placed by fvwm (i.e., those with a USPosition hint from a user specified
           geometry) are normally placed in a position relative to all identified screens.

           StartsOnPageIncludesTransients causes the StartsOnPage style to be applied even for
           transient windows. This is not usually useful, since transients are usually pop ups
           that you want to appear in your visible viewport; but occasionally an application uses
           a transient for something like a startup window that needs to be coerced into place.

           ManualPlacementIgnoresStartsOnPage suppresses StartsOnPage or StartsOnDesk placement
           in the event that both ManualPlacement and SkipMapping are in effect when a window is
           created. This prevents you from interactively placing a window and then wondering
           where it disappeared to, because it got placed on a different desk or page.
           ManualPlacementHonorsStartsOnPage allows this to happen anyway. The option has no
           effect if SkipMapping is not in effect, because fvwm switches to the proper desk/page
           to perform interactive placement. The default is ManualPlacementIgnoresStartsOnPage;
           ManualPlacementHonorsStartsOnPage matches the way the old StartsOnDesk style used to
           handle the situation.

           CaptureHonorsStartsOnPage causes the initial capture (of an already existing window)
           at startup to place the window according to the StartsOnPage and StartsOnScreen desk,
           page and screen specification. CaptureIgnoresStartsOnPage causes fvwm to ignore these
           settings (including StartsOnDesk) on initial capture. The default is
           CaptureIgnoresStartsOnPage.

           RecaptureHonorsStartsOnPage causes a window to be placed according to, or revert to,
           the StartsOnPage and StartsOnScreen desk, page and screen specification on Restart.
           RecaptureIgnoresStartsOnPage causes fvwm to respect the current window position on
           Restart. The default is RecaptureIgnoresStartsOnPage.

           Layer accepts one optional argument: a non-negative integer. This is the layer the
           window is put in. If no argument is given, any previously set value is deleted and the
           default layer is implied.

           StaysOnTop puts the window in the top layer. This layer can be changed by the command
           DefaultLayers; the default is 6.

           StaysPut puts the window in the put layer. This layer can be changed by the command
           DefaultLayers; the default is 4.

           StaysOnBottom puts the window in the bottom layer. This layer can be changed by the
           command DefaultLayers; the default is 2.

           StartsLowered instructs fvwm to put the window initially at the bottom of its layer
           rather than the default StartsRaised.

           StartShaded tells fvwm to shade the window. An optional direction argument may be
           given, which can be one of "North", "South", "West", "East", "NorthWest", "NorthEast",
           "SouthWest", "SouthEast" or if no direction is given, the default is to shade north.

           SkipMapping tells fvwm not to switch to the desk the window is on when it gets mapped
           initially (useful with StartsOnDesk or StartsOnPage).

           KeepWindowGroupsOnDesk makes new windows that have the window group hint set appear on
           the same desk as the other windows of the same group. Since this behavior may be
           confusing, the default setting is ScatterWindowGroups. The window group hint is
           ignored when placing windows in this case.

       Transient windows
           DecorateTransient causes transient windows, which are normally left undecorated, to be
           given the usual fvwm decorations (title bar, buttons, etc.). Note that some pop-up
           windows, such as the xterm menus, are not managed by the window manager and still do
           not receive decorations. NakedTransient (the default) causes transient windows not to
           be given the standard decorations. You can only bind keys or mouse buttons to the
           sides and the client part of an undecorated window ('S' and ´W' contexts in bindings,
           see Mouse and Key commands).

           A window with the RaiseTransient style that has transient windows raises all its
           transients when it is raised. The DontRaiseTransient style disables this behavior. All
           windows are then treated as if they had no transients.

           A window with the LowerTransient style that has transient windows lowers all its
           transients when it is lowered. The DontLowerTransient style disables this behavior.
           All windows are then treated as if they had no transients.

           The StackTransientParent style augments RaiseTransient and LowerTransient styles.
           Raising a window with StackTransientParent style transfers the raise action to the
           main window if the window being raised is a transient and its main window has
           RaiseTransient style; this effect makes raise on a transient act just like raise on
           its main - the whole group is raised. Similar behavior holds for lowering a whole
           group of transients when the main has LowerTransient style. DontStackTransientParent
           turns this behavior off. (Dont)StackTransientParent has no effect if RaiseTransient
           and LowerTransient are not used.

           A reasonable emulation of Motif raise/lower on transients is possible like this

               Style * RaiseTransient
               Style * LowerTransient
               Style * StackTransientParent

       Extended Window Manager Hints styles
           To understand the used terminology in this sub section, please read the Extended
           Window Manager Hints section.

           EWMHDonateIcon instructs fvwm to set the application ewmh icon hint with the icon that
           is used by fvwm if the application does not provide such hint (and if the icon used by
           fvwm is not an icon window). EWMHDonateMiniIcon does the same thing for mini icons.
           This allows compliant pager, taskbar, iconbox ...etc to display the same (mini) icons
           as fvwm. Note that on some hardware (e.g., 8-bit displays) these styles can slow down
           window mapping and that in general only one of these styles is needed by a compliant
           application. EWMHDontDonateIcon and EWMHDontDonateMiniIcon restore the defaults which
           are to not set any ewmh (mini) icons hints.

           By default, if an application provides an ewmh icon hint of small size (i.e., height
           and width less than or equal to 22), then fvwm uses this icon as its mini icon.
           EWMHMiniIconOverride instructs fvwm to ignore ewmh icons and to use the mini icon
           provided by the MiniIcon style. EWMHNoMiniIconOverride restores the default.

           EWMHUseStackingOrderHints causes fvwm to use EWMH hints and respect EWMH hints which
           change the window layer. EWMHIgnoreStackingOrderHints causes fvwm to ignore EWMH layer
           hints.

           An application can ask for some reserved space on the desktop by a hint. In the EWMH
           terminology such a hint is called a strut and it is used to compute the working area
           and may be used for window placement and in the maximize command. EWMHIgnoreStrutHints
           causes fvwm to ignore such hints, as EWMHUseStrutHints, causes fvwm to use it which is
           the default.

           EWMHIgnoreStateHints causes fvwm to ignore initial EWMH state hints when a new window
           is mapped. The default EWMHUseStateHints causes fvwm to accept such hints.

           EWMHIgnoreWindowType causes fvwm to ignore EWMH window type specification. The default
           !EWMHIgnoreWindowType causes fvwm to style windows of specified types as such.

           EWMHMaximizeIgnoreWorkingArea causes fvwm to ignore the EWMH working area when it
           executes a Maximize command. With EWMHMaximizeUseWorkingArea the EWMH working area is
           used as with EWMHMaximizeUseDynamicWorkingArea the EWMH dynamic working area is used
           (the default).

           EWMHPlacementIgnoreWorkingArea causes fvwm to ignore the EWMH working area when it
           places (or places again) a window. With EWMHPlacementUseWorkingArea the EWMH working
           area is taken in account as with EWMHPlacementUseDynamicWorkingArea the EWMH dynamic
           working area is taken in account (the default). Note that with the MinOverlapPlacement
           and MinOverlapPercentPlacement placement policy, the way the EWMH (dynamic) working
           area is taken in account is configurable with the MinOverlapPlacementPenalties style.

       Miscellaneous
           The BackingStore, BackingStoreOff and BackingStoreWindowDefault determine if the X
           server uses backing store for the window or not. BackingStore means that the X server
           tries to keep the obscured parts of a window in memory. This is usually slower if the
           client runs on the same machine as the X server, but can be much faster if the
           connection is slow (see also SaveUnder below). BackingStoreOff disables backing store
           for the window. By default, fvwm does not enable or disable backing store itself but
           leaves is as the window requested it. To revert back to the application’s choice, use
           the BackingStoreWindowDefault style.

           Note: This style is useless if the X server does not allow backing store.

           SaveUnder enables the corresponding window attribute in the X server. For a window
           using this style, the X server tries to store the graphics below it in memory which is
           usually slower if the client runs on the same machine as the X server. SaveUnder may
           speed up fvwm if the connection to the X server is slow (e.g. over a modem link). To
           disable save under, use the SaveUnderOff style. This is the default. See also
           BackingStore above.

           Note: This style is useless if the X server does not allow save under.

           ParentalRelativity enables clients that use a background pixmap of type ParentRelative
           to achieve transparency. Fvwm modules that support transparent colorsets require this
           setting. Opacity is the default and should be used for all non-transparent clients for
           better performance.

           MwmDecor makes fvwm attempt to recognize and respect the mwm decoration hints that
           applications occasionally use. To switch this style off, use the NoDecorHint style.

           MwmFunctions makes fvwm attempt to recognize and respect the mwm prohibited operations
           hints that applications occasionally use. HintOverride makes fvwm shade out operations
           that mwm would prohibit, but it lets you perform the operation anyway. NoFuncHint
           allows turns off the mwm hints completely.

           OLDecor makes fvwm attempt to recognize and respect the olwm and olvwm hints that many
           older XView and OLIT applications use. Switch this option off with NoOLDecor.

           UseDecor This style is deprecated and will be removed in the future. There are plans
           to replace it with a more flexible solution in fvwm-3.0.

           UseDecor accepts one argument: the name of a decor created with AddToDecor. If no
           decor name is specified, the "Default" decor is used. Windows do not actually contain
           decors, but are always assigned to one. If the decor is later modified with
           AddToDecor, the changes are visible for all windows which are assigned to it. The
           decor for a window can be reassigned with ChangeDecor.

           UseStyle This style is deprecated and will be removed in the future. There are plans
           to replace it with a more flexible solution in fvwm-3.0.

           UseStyle takes one arg, which is the name of another style. That way you can have
           unrelated window names easily inherit similar traits without retyping. For example:

               Style rxvt UseStyle XTerm

           Warning: If a style is built from one or more parent styles and the parent styles are
           changed, the derived style is not modified. To achieve this you have to issue the
           UseStyle line again.

           Unmanaged Windows with the Unmanaged style option are ignored by fvwm. They are not
           decorated, can not be moved or resized, etc. You probably want to use Bugopts
           RaiseOverUnmanaged too. This option can be turned off with the !Unmanaged style.

           State sets the initial value of one of the 32 user defined states which are associated
           with each window. The state number ranges from 0 to 31 and must be given as an
           argument. The states have no meaning in fvwm, but they can be checked in conditional
           commands like Next with the State condition and manipulated with the State command.

               # turn on state 11 for xterms ...
               Style xterm State 11
               # ... but not for rxvts.
               Style rxvt !State 11

           Windows with the WindowListSkip styles do not appear in the menu that is created with
           the WindowList command or the lists shown in modules like FvwmIconMan. In the modules,
           the style can usually be ignored with an option. Please refer to the man page of the
           module in question for further information. To disable this feature, use the default
           style WindowListHit.

           The styles CirculateSkip and CirculateHit control whether the window is considered by
           conditional commands, for example Next, Prev or All. Windows with CirculateSkip, are
           never selected by conditional commands. However, the styles can be overridden
           explicitly in the condition with the CirculateHit, CirculateHitIcon or
           CirculateHitShaded conditions, and some conditional commands, e.g. Current and All, do
           this by default. The styles CirculateSkipIcon, CirculateHitIcon, CirculateSkipShaded
           and CirculateHitShaded work like CirculateSkip and CirculateHit but apply only to
           iconic or shaded windows. Note: if multiple ...Skip... options are combined, windows
           are only selected if they match none of the given conditions. So, with

               Style * CirculateSkipIcon, CirculateSkipShaded

           only windows that are neither iconic nor shaded are selected. Note: For historical
           reasons, the conditional commands understand the names of these styles as condition
           names. Take care not to confuse them.

       Examples

           # Change default fvwm behavior to no title-
           # bars on windows! Also define a default icon.

           Style *       !Title,                      \
                         Icon unknown1.xpm,           \
                         BorderWidth 4,               \
                         HandleWidth 5

           # now, window specific changes:
           Style Fvwm* !Handles, Sticky,              \
                       WindowListSkip,                \
                       BorderWidth 0
           Style FvwmPager   StaysOnTop, BorderWidth 0
           Style *lock       !Handles, Sticky,        \
                             StaysOnTop, WindowListSkip
           Style xbiff       Sticky, WindowListSkip
           Style FvwmButtons !Handles, Sticky,        \
                             WindowListSkip
           Style sxpm        !Handles

           # Put title-bars back on xterms only!
           Style xterm     Title, Color black/grey

           Style rxvt        Icon term.xpm
           Style xterm       Icon rterm.xpm
           Style xcalc       Icon xcalc.xpm
           Style xbiff       Icon mail1.xpm
           Style xmh         Icon mail1.xpm,         \
                             StartsOnDesk 2
           Style xman        Icon xman.xpm
           Style matlab      Icon math4.xpm,         \
                             StartsOnDesk 3
           Style xmag        Icon magnifying_glass2.xpm
           Style xgraph      Icon graphs.xpm
           Style FvwmButtons Icon toolbox.xpm
           Style Maker       StartsOnDesk 1
           Style signal      StartsOnDesk 3

           # Fire up Netscape on the second desk, in the
           # middle of my 3x3 virtual desktop, and do not
           # bother me with it...
           Style Netscape* SkipMapping,              \
                     StartsOnPage 1 1 1

       Note that all properties for a window are or’ed together. In the above example "FvwmPager"
       gets the property StaysOnTop via an exact window name match but also gets !Handles, Sticky
       and WindowListSkip by a match to "Fvwm*". It gets !Title by virtue of a match to "*". If
       conflicting styles are specified for a window, then the last style specified is used.

       WindowStyle options
           sets attributes (styles) on the selected window. The options are exactly the same as
           for the Style command.

   Window Styles
       AddButtonStyle button [state] [style] [-- [!]flag ...]
           Adds a button style to button. button can be a button number, or one of "All", "Left"
           or "Right". state can be "ActiveUp", "ActiveDown", "InactiveUp" or "InactiveDown", or
           "Active" (the same as both "ActiveUp" and "ActiveDown") or "Inactive" (the same as
           both "InactiveUp" and "InactiveDown") or any of these 6 with "Toggled" prepended. The
           "Active" states apply to the focused window, the "Inactive" ones apply to all other
           windows. The "Up" states apply to the non pressed buttons, the "Down" ones apply to
           pressed buttons. The "Toggled" prefix refers to maximized, shaded or sticky windows
           that have the corresponding MwmDecor... button style set. Additionally, the following
           shortcuts may be used: "AllNormal", "AllToggled", "AllActive", "AllInactive", "AllUp",
           "AllDown". They are actually different masks for 4 individual states from 8 total.
           These are supported too: "AllActiveUp", "AllActiveDown", "AllInactiveUp",
           "AllInactiveDown".

           If state is omitted, then the style is added to every state. If the style and flags
           are enclosed in parentheses, then multiple state definitions can be placed on a single
           line. Flags for additional button styles cannot be changed after definition.

           Buttons are drawn in the order of definition, beginning with the most recent button
           style, followed by those added with AddButtonStyle. To clear the button style stack,
           change style flags, or for descriptions of available styles and flags, see the
           ButtonStyle command.

           Examples:

               **ButtonStyle** 1 Pixmap led.xpm -- Top Left
               **ButtonStyle** 1 ActiveDown HGradient 8 grey black
               **ButtonStyle All** --  UseTitleStyle
               AddButtonStyle 1 \
                       ActiveUp (Pixmap a.xpm) \
                       ActiveDown (Pixmap b.xpm -- Top)
               AddButtonStyle 1 Vector 4 50x30@1 70x70@0 30x70@0 50x30@1

           Initially for this example all button states are set to a pixmap. The second line
           replaces the "ActiveDown" state with a gradient (it overrides the pixmap assigned to
           it in the line before, which assigned the same style to every state). Then, the
           UseTitleStyle flag is set for all buttons, which causes fvwm to draw any styles set
           with TitleStyle before drawing the buttons. Finally, AddButtonStyle is used to place
           additional pixmaps for both "ActiveUp" and "ActiveDown" states and a vector button
           style is drawn on top of all states.

       AddTitleStyle [state] [style] [-- [!]flag ...]
           Adds a title style to the title-bar. state can be "ActiveUp", "ActiveDown",
           "InactiveUp" or "InactiveDown", or "Active" (the same as both "ActiveUp" and
           "ActiveDown") or "Inactive" (the same as both "InactiveUp" and "InactiveDown") or any
           of these 6 with "Toggled" prepended. If state is omitted, then the style is added to
           every state. If the style and flags are enclosed in parentheses, then multiple state
           definitions can be placed on a single line. This command is quite similar to the
           AddButtonStyle command.

           Title-bars are drawn in the order of definition, beginning with the most recent
           TitleStyle, followed by those added with AddTitleStyle. To clear the title style
           stack, change style flags, or for the descriptions of available styles and flags, see
           the TitleStyle and ButtonStyle commands.

       AddToDecor decor
           This command is deprecated and will be removed in the future. There are plans to
           replace it with a more flexible solution in fvwm-3.0.

           Add or divert commands to the decor named decor. A decor is a name given to the set of
           commands which affect button styles, title-bar styles and border styles. If decor does
           not exist it is created; otherwise the existing decor is modified. Note: Earlier
           versions allowed to use the HilightColor, HilightColorset and WindowFont commands in
           decors. This is no longer possible. Please use the Style command with the Hilight...
           and Font options.

           New decors start out exactly like the "default" decor without any style definitions. A
           given decor may be applied to a set of windows with the UseDecor option of the Style
           command. Modifying an existing decor affects all windows which are currently assigned
           to it.

           AddToDecor is similar in usage to the AddToMenu and AddToFunc commands, except that
           menus and functions are replaced by ButtonStyle, AddButtonStyle, TitleStyle,
           AddTitleStyle and BorderStyle commands. Decors created with AddToDecor can be
           manipulated with ChangeDecor, DestroyDecor, UpdateDecor and the Style option.

           The following example creates a decor "FlatDecor" and style "FlatStyle". They are
           distinct entities:

               AddToDecor FlatDecor
               + ButtonStyle All Active (-- flat) Inactive (-- flat)
               + TitleStyle  -- flat
               + BorderStyle -- HiddenHandles NoInset

               Style FlatStyle \
                       UseDecor FlatDecor, HandleWidth 4, Colorset 0, HilightColorset 1

               Style xterm UseStyle FlatStyle

           An existing window’s decor may be reassigned with ChangeDecor. A decor can be
           destroyed with DestroyDecor.

               DestroyDecor FlatDecor
               AddToDecor FlatDecor ...

               Style FlatStyle UseDecor FlatDecor

           and now apply the style again:

               Style xterm UseStyle FlatStyle

       BorderStyle state [style] [-- [!]flag ...]
           Defines a border style for windows. state can be either "Active" or "Inactive". If
           state is omitted, then the style is set for both states. If the style and flags are
           enclosed in parentheses, then multiple state definitions can be specified per line.

           style is a subset of the available button styles, and can only be TiledPixmap (uniform
           pixmaps which match the bevel colors work best this way) or Colorset. If a '!' is
           prefixed to any flag, the behavior is negated. If style is not specified, then one can
           change flags without resetting the style.

           The HiddenHandles flag hides the corner handle dividing lines on windows with handles
           (this option has no effect for !Handles windows). By default, HiddenHandles is
           disabled.

           The NoInset flag supplements HiddenHandles. If given, the inner bevel around the
           window frame is not drawn. If HiddenHandles is not specified, the frame looks a little
           strange.

           Raised causes a raised relief pattern to be drawn (default). Sunk causes a sunken
           relief pattern to be drawn. Flat inhibits the relief pattern from being drawn.

           To decorate the active and inactive window borders with a textured pixmap, one might
           specify:

               BorderStyle Active TiledPixmap marble.xpm
               BorderStyle Inactive TiledPixmap granite.xpm
               BorderStyle Active -- HiddenHandles NoInset

           To clear the style for both states:

               BorderStyle Simple

           To clear for a single state:

               BorderStyle Active Simple

           To unset a flag for a given state:

               BorderStyle Inactive -- !NoInset

           title-bar buttons can inherit the border style with the UseBorderStyle flag (see
           ButtonStyle).

       ButtonState [ActiveDown bool] [Inactive bool] [InactiveDown bool]
           The ButtonState command controls which states of the window titles and title buttons
           are used. The default is to use all four states: "ActiveUp", "ActiveDown",
           "InactiveUp" and "InactiveDown" (see ButtonStyle and TitleStyle commands). The bool
           argument after the key word controls if the designated state is used ("True") or not
           ("False"). The bool flag is the same as other commands, and not limited to just "True"
           or "False"; "Yes" and "No" may also be used. The "ActiveUp" state cannot be
           deactivated. If no arguments are provided or the given arguments are invalid, the
           default is restored.

           If ActiveDown argument is "False", no different button style for the pressed down
           buttons used, instead "ActiveUp" state is used even when button is pressed.

           If Inactive argument is "False", focused and unfocused windows look similarly, the
           corresponding "Active" states are always used.

           If InactiveDown argument is "False" (only applied when Inactive is "True"), the
           pressed titles and title buttons in non-focused windows are drawn using "InactiveUp"
           or "ActiveUp" states depending on the values of the other key words.

       ButtonStyle button [state] [style] [-- [!]flag ...]
           Sets the button style for a title-bar button. button is the title-bar button number
           between 0 and 9, or one of "All", "Left", "Right", or "Reset". Button numbering is
           described in the Mouse command section. If the style and flags are enclosed in
           parentheses, then multiple state definitions can be specified per line.

           state refers to which button state should be set. Button states are defined as
           follows: "ActiveUp" and "ActiveDown" refer to the un-pressed and pressed states for
           buttons on active windows; while the "InactiveUp" and "InactiveDown" states denote
           buttons on inactive windows. The shortcut "Active" denotes both "ActiveUp" and
           "ActiveDown" states. Shortcut "Inactive" denotes both "InactiveUp" and "InactiveDown"
           states. The similar state names like just described, but with the "Toggled" prefix are
           used instead for title buttons which have one of the MwmDecorMax, MwmDecorShade,
           MwmDecorStick or MwmDecorLayer hints, if the window is maximized, shaded, sticky or
           placed on specific layer, respectively.

               AddToDecor Default
               + ButtonStyle 6                   \
                 Vector 4 50x25@1 85x75@0 15x75@0 50x25@1
               + ButtonStyle 6 ToggledActiveUp   \
                 Vector 4 50x75@0 85x25@1 15x25@0 50x75@0
               + ButtonStyle 6 ToggledActiveDown \
                 Vector 4 50x75@0 85x25@1 15x25@0 50x75@0
               + ButtonStyle 6 ToggledInactive   \
                 Vector 4 50x75@0 85x25@1 15x25@0 50x75@0
               + ButtonStyle 6 - MwmDecorShade
               Mouse 0 6 N WindowShade

           Additionally, the following shortcuts may be used: "AllNormal", "AllToggled",
           "AllActive", "AllInactive", "AllUp", "AllDown". They are actually different masks for
           4 individual states from 8 total. These are supported too: "AllActiveUp",
           "AllActiveDown", "AllInactiveUp", "AllInactiveDown".

           If state is specified, that particular button state is set. If state is omitted, every
           state is set. Specifying a style destroys the current style (use AddButtonStyle to
           avoid this).

           If style is omitted, then state-dependent flags can be set for the primary button
           style without destroying the current style. Examples (each line should be considered
           independent):

               ButtonStyle Left -- flat
               ButtonStyle All ActiveUp (-- flat) Inactive (-- flat)

           The first line sets every state of the left buttons to flat, while the second sets
           only the "ActiveUp" and "Inactive" states of every button to flat (only flags are
           changed; the buttons' individual styles are not changed).

           If you want to reset all buttons to their defaults:

               ButtonStyle Reset

           To reset the "ActiveUp" button state of button 1 to the default:

               ButtonStyle 1 ActiveUp Default

           To reset all button states of button 1 to the default of button number 2:

               ButtonStyle 1 Default 2

           For any button, multiple state definitions can be given on one line by enclosing the
           style and flags in parentheses. If only one definition per line is given the
           parentheses can be omitted.

           flags affect the specified state. If a '!' is prefixed to any flag, its behavior is
           negated. The available state-dependent flags for all styles are described here (the
           ButtonStyle entry deals with state-independent flags).

           Raised causes a raised relief pattern to be drawn.

           Sunk causes a sunken relief pattern to be drawn.

           Flat inhibits the relief pattern from being drawn.

           UseTitleStyle causes the given button state to render the current title style before
           rendering the buttons' own styles. The Raised, Flat and Sunk TitleStyle flags are
           ignored since they are redundant in this context.

           UseBorderStyle causes the button to inherit the decorated BorderStyle options.

           Raised, Sunk and Flat are mutually exclusive, and can be specified for the initial
           ButtonStyle only. UseTitleStyle and UseBorderStyle are also mutually exclusive (both
           can be off however). The default is Raised with both UseBorderStyle and UseTitleStyle
           left unset.

           Important

           for the "ActiveDown" and "InactiveDown" states: When a button is pressed, the relief
           is inverted. Because of this, to obtain the raised look in "ActiveDown" or
           "InactiveDown" states you must specify the opposite of the desired relief (i.e. Sunk
           for "ActiveDown" or "InactiveDown"). This behavior is consistent, but may seem
           confusing at first. The same applies to the "Toggled" states.

           Button styles are classified as non-destructive, partially destructive, or fully
           destructive. Non-destructive styles do not affect the image. Partially destructive
           styles can obscure some or all parts of the underlying image (i.e. Pixmap). Fully
           destructive styles obscure the entire underlying image (i.e. Solid or one of the
           gradient styles). Thus, if stacking styles with AddButtonStyle (or AddTitleStyle for
           title-bars), use care in sequencing styles to minimize redraw.

           The available styles are:

           Simple, Default, Solid, Colorset, Vector, ?Gradient, Pixmap, AdjustedPixmap,
           ShrunkPixmap, StretchedPixmap, TiledPixmap, MiniIcon

           The description of these styles and their arguments follow:

           The Simple style does nothing. There are no arguments, and this style is an example of
           a non-destructive button style.

           The Default style conditionally accepts one argument: a number which specifies the
           default button number to load. If the style command given is ButtonStyle or
           AddButtonStyle, the argument is optional (if given, it overrides the current button).
           If a command other than ButtonStyle or AddButtonStyle is used, the number must be
           specified.

           The Solid style fills the button with a solid color. The relief border color is not
           affected. The color is specified as a single argument. This style is fully
           destructive.

           The Colorset cs [alpha] style fills the button with the Colorset cs. The optional
           alpha argument is a percentage between 0 and 100. It causes fvwm to merge the colorset
           background onto the button using this percentage. If the percentage is 0 the colorset
           background is hidden and if it is 100 the colorset background is fully applied. The
           default is 100. So, the destructiveness depends on the alpha argument.

           The Vector num X[offsetp]xY[offsetp]@C ... style draws a line pattern. Since this is a
           standard button style, the keyword Vector is optional, num is a number of point
           specifications of the form X[offsetp]xY[offsetp]@C ... X and Y are point coordinates
           inside the button, given in percents (from 0 to 100). An optional absolute offset in
           pixels, can be given as "+<offset>p" for a positive or "-<offset>p" for a negative
           offset.

           C specifies a line color (0 - the shadow color, 1 - the highlight color, 2 - the
           background color, 3 - the foreground color, 4 - only move the point, do not draw). The
           first point color is not used. You can use up to 10000 points in a line pattern. This
           style is partially destructive.

           The specification is a little cumbersome:

               ButtonStyle 2 Vector 4 50x30@1 70x70@0 30x70@0 50x30@1

           then the button 2 decoration uses a 4-point pattern consisting of a line from
           (x=50,y=30) to (70,70) in the shadow color (@0), and then to (30,70) in the shadow
           color, and finally to (50,30) in the highlight color (@1). Is that too confusing? See
           the fvwm web pages for some examples with screenshots.

           A more complex example of Vector:

               ButtonStyle 8 Vector 10 45x65@2 45x75@3 \
               20x75@3 20x50@3 35x50@3 35x65@1 35x25@1 \
               75x25@1 75x65@0 35x65@0
               ButtonStyle 0 Vector 10 45x65@2 45x75@0 \
               20x75@0 20x50@1 45x50@1 45x65@0 75x65@3 \
               75x25@3 35x25@3 35x47@3

           The Gradient styles denote color gradients. Fill in the question mark with any one of
           the defined gradient types. Please refer to the Color Gradients section for a
           description of the gradient syntax. The gradient styles are fully destructive.

           The Pixmap style displays a pixmap. A pixmap should be specified as an argument. For
           example, the following would give button number 2 the same pixmap for all 4 states (2
           active and 2 inactive), and button number 4 all different pixmaps.

               ButtonStyle 2 Pixmap my_pixmap.xpm
               ButtonStyle 4 \
               ActiveUp (Pixmap activeup.xpm) \
               ActiveDown (Pixmap activedown.xpm) \
               Inactive (Pixmap inactiveup.xpm)
               ButtonStyle 4 \
               InactiveDown Pixmap inactivedown.xpm

           The pixmap specification can be given as an absolute or relative pathname (see
           ImagePath). If the pixmap cannot be found, the button style reverts to Simple. Flags
           specific to the Pixmap style are Left, Right, Top, and Bottom. These can be used to
           justify the pixmap (default is centered for both directions). Pixmap transparency is
           used for the color "None." This style is partially destructive.

           The AdjustedPixmap style is similar to the Pixmap style. But the image is resized to
           exactly fit the button.

           The ShrunkPixmap style is similar to the Pixmap style. But if the image is bigger than
           the button the image is resized to fit into the button.

           The StretchedPixmap style is similar to the Pixmap style. But if the image is smaller
           than the button the image is resized to cover the button.

           The TiledPixmap style accepts a pixmap to be tiled as the button background. One
           pixmap is specified as an argument. Pixmap transparency is not used. This style is
           fully destructive.

           The MiniIcon style draws the window’s miniature icon in the button, which is specified
           with the MiniIcon option of the Style command. This button style accepts no arguments.
           Example:

               Style *     MiniIcon mini-bx2.xpm
               Style xterm MiniIcon mini-term.xpm
               Style Emacs MiniIcon mini-doc.xpm

               ButtonStyle 1 MiniIcon

       ButtonStyle button - [!]flag ...
           Sets state-independent flags for the specified button. State-independent flags affect
           button behavior. Each flag is separated by a space. If a '!' is prefixed to the flag
           then the behavior is negated. The special flag Clear clears any existing flags.

           The following flags are usually used to tell fvwm which buttons should be affected by
           mwm function hints (see MwmFunctions option of the Style command. This is not done
           automatically since you might have buttons bound to complex functions, for instance.

           MwmDecorMenu should be assigned to title-bar buttons which display a menu. The default
           assignment is the leftmost button. When a window with the MwmFunctions Style option
           requests not to show this button, it is hidden.

           MwmDecorMin should be assigned to title-bar buttons which minimize or iconify the
           window. The default assignment is the second button over from the rightmost button.
           When a window with the MwmFunctions Style option requests not to show this button, it
           is hidden.

           MwmDecorMax should be assigned to title-bar buttons which maximize the window. The
           default assignment is the rightmost button. When a window with the MwmFunctions Style
           option requests not to show this button, it is hidden. When the window is maximized,
           the vector pattern on the button looks pressed in.

           MwmDecorShade should be assigned to title-bar buttons which shade the window (see
           WindowShade command). When the window is shaded, the vector pattern on the button
           looks pressed in.

           MwmDecorStick should be assigned to title-bar buttons which make the window sticky.
           When the window is sticky, the vector pattern on the button looks pressed in.

           The flag MwmDecorLayer layer should be assigned to title-bar buttons which place the
           window in the layer numbered layer. When the window is on that specific layer, the
           vector pattern on the button looks pressed in.

       ChangeDecor decor
           This command is deprecated and will be removed in the future. There are plans to
           replace it with a more flexible solution in fvwm-3.0.

           Changes the decor of a window to decor. decor is "Default" or the name of a decor
           defined with AddToDecor. If decor is invalid, nothing occurs. If called from somewhere
           in a window or its border, then that window is affected. If called from the root
           window the user is allowed to select the target window. ChangeDecor only affects
           attributes which can be set using the AddToDecor command.

               ChangeDecor CustomDecor1

       DestroyDecor [recreate] decor
           This command is deprecated and will be removed in the future. There are plans to
           replace it with a more flexible solution in fvwm-3.0.

           Deletes the decor defined with AddToDecor, so that subsequent references to it are no
           longer valid. Windows using this decor revert to the "Default" decor. The optional
           parameter recreate tells fvwm not to throw away the decor completely but to throw away
           only its contents. If the decor is created again later, windows do not use it before
           the UseDecor style is applied again unless the decor was destroyed with the recreate
           option. The decor named "Default" cannot be destroyed.

               DestroyDecor CustomDecor1

       TitleStyle [justification] [Height [num]] [MinHeight [num]]
           Sets attributes for the title-bar. Justifications can be Centered, RightJustified or
           LeftJustified. Height sets the title bar’s height to an amount in pixels. MinHeight
           sets the minimal height in pixels of the title bar. Defaults are Centered, the
           window’s font height and no minimal height. To reset the font height to the default
           value, omit the num argument after the Height keyword. The MinHeight height is reset
           by Height or if given with no argument. Example:

               TitleStyle LeftJustified Height 24

       TitleStyle [state] [style] [-- [!]flag ...]
           Sets the style for the title-bar. See also AddTitleStyle and ButtonStyle state can be
           one of "ActiveUp", "ActiveDown", "InactiveUp", or "InactiveDown". Shortcuts like
           "Active" and "Inactive" are allowed. The states with the "Toggled" prefix are allowed
           too, the title itself does not use "Toggled" states, but these states are used for the
           buttons with ButtonStyle UseTitleStyle. If state is omitted, then the style is added
           to every state. If parentheses are placed around the style and flags, then multiple
           state definitions can be given per line. style can be omitted so that flags can be set
           while not destroying the current style.

           If a '!' is prefixed to any flag, its behavior is negated. Valid flags for each state
           include Raised, Flat and Sunk (these are mutually exclusive). The default is Raised.
           See the note in ButtonStyle regarding the "ActiveDown" state. Examples:

               TitleStyle ActiveUp HGradient 16 navy black
               TitleStyle \
               ActiveDown (Solid red -- flat) \
               Inactive (TiledPixmap wood.xpm)
               TitleStyle \
               ActiveUp (-- Flat) \
               ActiveDown (-- Raised) \
               InactiveUp (-- Flat) \
               InactiveDown (-- Sunk)

           This sets the "ActiveUp" state to a horizontal gradient, the "ActiveDown" state to
           solid red, and the "Inactive" states to a tiled wood pixmap. Finally, "ActiveUp" and
           "InactiveUp" are set to look flat, while "ActiveDown" set to be sunk (the Raised flag
           for the "ActiveDown" state causes it to appear sunk due to relief inversion), and
           "InactiveDown" is set to look raised. An example which sets flags for all states:

               TitleStyle -- flat

           For a flattened look:

               TitleStyle -- flat
               ButtonStyle All Active (-- flat) Inactive (-- flat)

           TitleStyle accepts all the ButtonStyle styles and arguments:

           Simple, Default, Solid, Colorset, Vector, ?Gradient, Pixmap, AdjustedPixmap,
           ShrunkPixmap, StretchedPixmap, TiledPixmap, MiniIcon.

           See the ButtonStyle command for a description of all these styles and their arguments.

           In addition to these styles TitleStyle accepts a powerful MultiPixmap option. This
           allows you to specify different pixmaps, colorsets or colors for different parts of
           the titlebar. Some of them are tiled or stretched to fit a particular space; others
           are discrete "transition" images. The definable sections are:

           Main
               The full titlebar

           LeftMain
               Left of title text

           RightMain
               Right of title text

           UnderText
               Underneath title text

           LeftOfText
               just to the left of the title text

           RightOfText
               just to the right of the title text

           LeftEnd
               at the far left end of the titlebar (just after left buttons if any)

           RightEnd
               at the far right end of the titlebar (just before right buttons if any)

           Buttons
               under buttons in case of UseTitleStyle

           LeftButtons
               under left buttons in case of UseTitleStyle

           RightButtons
               under right buttons in case of UseTitleStyle

       None of these are mandatory except for Main (or, if you do not define Main you must define
       both LeftMain and RightMain). If no Buttons pixmaps are defined and UseTitleStyle is
       specified for one or more buttons, Main, LeftMain or RightMain are used as appropriate.

       The syntax for this style type is:

           MultiPixmap section style arg, ...

       continuing for whatever you want to define. The style can be either TiledPixmap,
       AdjustedPixmap, Colorset or Solid. See the ButtonStyle command for the description of
       these styles. In the case of a transition section, LeftEnd, LeftOfText, RightOfText or
       RightEnd, AdjustedPixmap only resize the pixmap in the "y" direction. For the Colorset and
       Solid styles a width of the half of the title bar height is assumed for the transition
       sections.

       An example:

           MultiPixmap Main AdjustedPixmap foo.xpm, \
                 UnderText TiledPixmap bar.xpm, \
                 Buttons Colorset 2

       Note that the old syntax is still supported: if the style is omitted, TiledPixmap is
       assumed and adding "(stretched)" between the section and the file name implies
       AdjustedPixmap. UpdateDecor [decor]:: This command is deprecated and will be removed in
       the future. There are plans to replace it with a more flexible solution in fvwm-3.0.

       This command is kept mainly for backward compatibility. Since all elements of a decor are
       updated immediately when they are changed, this command is mostly useless.

       Updates window decorations. decor is an optional argument which specifies the decor to
       update. If given, only windows which are assigned to that particular decor are updated.
       This command is useful, for instance, after a ButtonStyle, TitleStyle or BorderStyle
       (possibly used in conjunction with AddToDecor). Specifying an invalid decor results in all
       windows being updated.

   Controlling the Virtual Desktop
       Desk arg1 [arg2] [min max]
           This command has been renamed. Please see GotoDesk command.

       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 Horizontalx_Vertical_
           Defines the virtual desktop size in units of the physical screen size.

       EdgeResistance delayEdgeResistance 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 horizontal[p] vertical[p] [wrap | wrapx | wrapy]
           Specifies the percentage of a page to scroll when the cursor hits the edge of a page.
           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 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.

           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 [prev | arg1 [arg2] [min max]]
           Switches the current viewport to another desktop (workspace, room).

           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. (Desktop numbers can be negative). 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
           2147483647 and -2147483648 (is that enough?).

       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. This can be especially useful in conjunction with the FvwmM4 module. For
           example:

               SetEnv height HEIGHT

           makes the FvwmM4 set variable HEIGHT usable by processes started by fvwm as the
           environment variable $height. If value includes whitespace, you should enclose it in
           quotes. If no value is given, the variable is deleted.

       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": 1,
                   "current_screen": "HDMI2",
                   "screens": {
                       "HDMI2": {
                           "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 [screen]] 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 of the
               given screen. If no screen is given, the current screen is assumed. The window
               indicated by id may belong to a window not managed by fvwm or even a window on a
               different screen. 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), FvwmCpp (to preprocess your
           config with cpp), FvwmEvent (trigger various actions by events), FvwmForm (to bring up
           dialogs), FvwmIconMan (a flexible icon manager), FvwmIdent (to get window info),
           FvwmM4 (to preprocess your config with m4), 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.

       QuitScreen
           Causes fvwm to stop managing the screen on which the command was issued.

       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 fvwm -s
               Key F1 R N Restart fvwm1 -s -f .fvwmrc
               Key F1 R N Restart xterm -n '"X console"' -T \"X\ console\" -e fvwm -s

           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:

           http://fvwm-themes.sourceforge.net/doc/colorsets

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

ENVIRONMENT

       The environment variables that have an effect on how fvwm operates are the following:

       DISPLAY
           Fvwm starts on this display unless the -display option is given.

       FVWM_USERDIR
           Used to determine the user’s data directory for reading and writing files. If this
           variable is not already set, it is set by fvwm to $HOME/.fvwm, which is the default
           user’s data directory.

       FVWM3_LOGFILE
           Used to determine the path and filename to log debug information from fvwm3. By
           default debug log is written to $FVWM_USERDIR/fvwm3-output.log . If an absolute path
           is specified (starting with /) then $FVWM_USERDIR is ignored, otherwise the log is
           written to $FVWM_USERDIR/$FVWM3_LOGFILE .

       FVWM_DATADIR
           Set by fvwm to the directory containing fvwm config and module data.

       FVWM_MODULEDIR
           Set by fvwm to the directory containing the standard fvwm modules.

       SESSION_MANAGER
           Fvwm tries to contact this session manager.

       SESSION_MANAGER_NAME
           This is used mainly to determine xsm running to work around its bug. If this variable
           is set to "xsm", DiscardCommand is set as xsm expects it and not as XSMP requires. If
           you run fvwm under xsm, you should set this variable to "xsm", otherwise old state
           files are not removed.

       SM_SAVE_DIR
           If this is set, fvwm saves its session data in this directory. Otherwise it uses
           $HOME. Note, the state files are named .fs-?????? and normally are removed
           automatically when not used anymore.

AUTHORS

       Robert Nation with help from many people, based on twm code, which was written by Tom
       LaStrange. After Robert Nation came Charles Hines, followed by Brady Montz. Currently fvwm
       is developed by a number of people on the fvwm-workers mailing list.

COPYRIGHT

       Fvwm and all the modules, scripts and other files coming with the distribution are subject
       to the GNU General Public License (GPL). Please refer to the COPYING file that came with
       fvwm for details.

BUGS

       Bug reports can be sent to the fvwm-workers mailing list at fvwm-workers@fvwm.org

       The official fvwm homepage is http://fvwm.org/.

                                            2023-09-19                                FVWM3ALL(1)