Provided by: fvwm_2.7.0-3_amd64 bug

NAME

       Fvwm - F? Virtual Window Manager for X11

SYNOPSIS

       fvwm [-c config-command] [-d displayname] [-f config-file] [-r] [-s [screen_num]] [-V]
            [-C visual-class | -I visual-id] [-l colors [-L] [-A] [-S] [-P]] [-D] [-h]
            [-i client-id] [-F state-file] [--debug-stack-ring] [-blackout]

DESCRIPTION

       Fvwm is a window manager for X11.  It is designed to minimize memory consumption, provide
       a 3D look to window frames, and a virtual desktop.

       Note that there are several window managers around that have "fvwm" in their name.  In the
       past, version 2.x of fvwm was commonly called fvwm2 to distinguish it from the former
       version 1.x (fvwm or even fvwm1).  Since version 1.x has been replaced by version 2.x a
       long time ago we simply call version 2.x and all versions to come, fvwm, throughout this
       document, and the executable program is named fvwm.  There is an fvwm offspring called
       fvwm95, it is mostly a patched version of fvwm-2.0.43.  The main goal of fvwm95 was to
       supply a Windows 95 like look and feel.  Since then, fvwm has been greatly enhanced and
       practically all fvwm95 features can be achieved by fvwm.

       Fvwm provides both a large virtual desktop and multiple disjoint desktops which can be
       used separately or together.  The virtual desktop allows you to pretend that your video
       screen is really quite large, and you can scroll around within the desktop.  The multiple
       disjoint desktops allow you to pretend that you really have several screens to work at,
       but each screen is completely unrelated to the others.

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

       Fvwm has also overcome the distinction between configuration commands and action commands
       that most window managers make.  Configuration commands typically set fonts, colors, menu
       contents, and key and mouse function bindings, while action commands do things like raise
       and lower windows.  Fvwm makes no such distinction and allows anything to be changed at
       any time.

       Other noteworthy differences between fvwm and other X11 window managers are the
       introduction of the SloppyFocus and NeverFocus focus methods.  Focus policy can be
       separately specified for different window groups.  Windows using SloppyFocus acquire focus
       when the pointer moves into them and retain focus until some other window acquires it.
       Such windows do not lose focus when the pointer moves into the root window.  The
       NeverFocus policy is provided for use with windows into which one never types (e.g.
       xclock, oclock, xbiff, xeyes, tuxeyes) - for example, if a SloppyFocus terminal window has
       focus, moving the pointer over a NeverFocus decoration window does not deprive the
       terminal of focus.

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.

       -D | --debug
           Puts X transactions in synchronous mode, which dramatically slows things down, but
           guarantees that fvwm's internal error messages are correct.  Also causes fvwm to
           output debug messages while running.

       -f config-file
           Causes fvwm to read config-file instead of ~/.fvwm/config as its initialization file.
           This is equivalent to -c 'Read config-file'.

       -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 support for readline, rplay, stroke, xpm, png, svg, GNOME hints, EWMH hints,
           session management, bidirectional text, multibyte characters, xinerama and Xft aa font
           rendering.

       -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)

           These defaults may change before version 2.6.  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.

       -blackout
           This option is provided for backward compatibility only.  Blacking out the screen
           during startup is not necessary (and doesn't work) anymore.  This option will be
           removed in the future.

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

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 Xinerama support.

XINERAMA SUPPORT

       Fvwm supports the Xinerama extension of newer X servers which is similar to multi head
       support (multiple screens) but allows one to move windows between screens.  If Xinerama
       support has been compiled into fvwm, it is used whenever fvwm runs on an X server that
       supports and uses multiple screens via Xinerama.  Without this option, the whole desktop
       is treated as one big screen.  For example, menus might pop up right between two screens.
       The EdgeResistance option of the Style command command allows for specifying an explicit
       resistance value for moving windows over the screen edge between two Xinerama screens.
       Xinerama support can be enabled or disabled on the fly or from the configuration file with
       the Xinerama command.  Many modules and commands work nicely with Xinerama displays.

       Whenever a geometry in the usual X format can be supplied, fvwm's Xinerama extension
       allows for specifying a screen in addition to the geometry (or even the screen alone).  To
       do this, a '@' is added to the end of the geometry string followed by either the screen
       number or a letter.  A number is taken as the number of the Xinerama screen to be used (as
       configured in the X server).  The letter can be one of 'g' for the global screen (the
       rectangle that encloses all Xinerama screens), 'p' for the primary screen (see below), 'c'
       for the current screen (the one that currently contains the pointer).  If the X server
       does not support Xinerama or only one screen is used, the screen bit is ignored.

           Style * IconBox 64x300-0-0@p

       Xinerama support can be configured to use a primary screen.  Fvwm can be configured to
       place new windows and icons on this screen.  The primary screen is screen 0 by default but
       can be changed with the XineramaPrimaryScreen command.

       Xinerama support was designed to work out of the box with the same configuration file that
       would work on a single screen.  It may not perform very well if the involved screens use
       different screen resolutions.  In this situation, windows may get stuck in the portion of
       the whole desktop that belongs to neither screen.  When this happens, the windows or icons
       can be retrieved with the command

           All MoveToScreen

       that can be entered in an FvwmConsole window or with FvwmCommand.

       For multi-screen implementations other than Xinerama, such as Single Logical Screen, it is
       possible to simulate a Xinerama configuration if the total screen seen by fvwm is made up
       of equal sized monitors in a rectangular grid.  The commands XineramaSls, XineramaSlsSize
       and XineramaSlsScreens are used to configure this feature.

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 Help or F1 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] ...

       (1) [-]width{x}[-]height
       (2) {- | +}xpos{- | +}ypos
       (3) @[-]angle
       (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

GNOME COMPLIANCE

       Fvwm attempts to be GNOME (version 1) compliant.  Check http://www.gnome.org for what that
       may mean.  To disable GNOME hints for some or all windows, the GNOMEIgnoreHints style can
       be used.

EXTENDED WINDOW MANAGER HINTS

       Fvwm attempts to respect the extended window manager hints (ewmh or EWMH for short)
       specification: http://www.freedesktop.org/wiki/Standards_2fwm_2dspec and some extensions
       of this specification.  This allows fvwm to work with KDE version >= 2, GNOME version 2
       and other applications which respect this specification (any application based on GTK+
       version 2).  Applications which respect this specification are called ewmh compliant
       applications.

       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 and Stroke 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 and you use Xinerama).  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.

MWM COMPATIBILITY

       Fvwm provides options to emulate Motif Window Manager (Mwm) as well as possible.  Please
       refer to the Emulate command as well as to the Mwm specific options of the Style and
       MenuStyle commands for details.

OPEN LOOK AND XVIEW COMPATIBILITY

       Fvwm supports all the Open Look decoration hints (except pushpins).  Should you use any
       such application, please add the following line to your config:

           Style * OLDecor

       Most (perhaps all) Open Look applications have a strange notion of keyboard focus
       handling.  Although a lot of work went into fvwm to work well with these, you may still
       encounter problems.  It is recommended to use the NeverFocus focus policy and the Lenience
       style for all such applications (the windows still get the focus):

           Style <application name> NeverFocus, Lenience

       But in case you can not live with that focus policy, you can try using one of the other
       focus policies in combination with the Lenience style:

           Style <application name> MouseFocus, Lenience
           Style <application name> SloppyFocus, Lenience
           Style <application name> ClickToFocus, Lenience

M4 PREPROCESSING

       M4 pre-processing is handled by a module in fvwm.  To get more details, try man FvwmM4.
       In short, if you want fvwm to parse your files with m4, then replace the command Read with
       FvwmM4 in your ~/.fvwm/config file (if it appears at all), and start fvwm with the command

           fvwm -cmd "FvwmM4 config"

CPP PREPROCESSING

       Cpp is the C-language pre-processor.  fvwm offers cpp processing which mirrors the m4
       pre-processing.  To find out about it, re-read the M4 section, but replace "m4" with
       "cpp".

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 (this is the case when you generate a
       menu with fvwm-menu-desktop with recent versions of KDE and GNOME).  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 ( n , p , f , b , and j , k , h , l ) 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 Meta key (same as the Alt 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, like " (from cvs)", empty for the official releases.

       $[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.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 number the window is on.  If Xinerama is not present, this returns the
           number 0.

       $[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 number the pointer is currently on.  Returns 0 if Xinerama is not enabled.

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

       $[fg.cs<n>] $[bg.cs<n>] $[hilight.cs<n>] $[shadow.cs<n>]
           These parameters are replaced with the name of the foreground (fg), background (bg),
           hilight (hilight) or shadow (shadow) 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).  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]

       $[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 & 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.

LIST OF FVWM COMMANDS

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

       •   Menu commands

       •   Miscellaneous commands

       •   Commands affecting window movement and placement

       •   Commands for focus and mouse movement

       •   Commands controlling window state

       •   Commands for mouse, key and stroke bindings

       •   The Style command (controlling window styles)

       •   Other commands controlling window styles

       •   Commands controlling the virtual desktop

       •   Commands for user functions and shell commands

       •   Conditional commands

       •   Module commands

       •   Quit, restart and session management commands

       •   Colorsets

       •   Color gradients

   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
              In fvwm 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.

              Menu is a very similar command, but the menus it opens are slightly less transient.
              When invoked by clicking a mouse button, it stays open and can be navigated with no
              button held.  But if it is invoked by a button press followed by mouse motion, it
              behaves exactly like a popup menu.

              Tear off menus or Pin up menus are menus from either of the above two commands that
              have been "torn off" their original context and pinned 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.

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

       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 can be navigated either with the keyboard or with the mouse.  Many people
              prefer to use the mouse, but it can be rather tedious.  Once you get the hang of
              it, 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), Space (activate item) and Escape (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 Backspace 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.

       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.

              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 the
              menu, all text right of the first Tab is aligned to the left in a second column and
              all text thereafter is placed right aligned in the third column.  All other Tab 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.

       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.

       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

       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

       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.

              XineramaRoot
                  the root window of the whole Xinerama screen.  Equivalent to "root" when
                  Xinerama is not used.

              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 illegal (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.

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

       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, Foreground, Background, Greyed, HilightBack / !HilightBack,
              HilightTitleBack, ActiveFore / !ActiveFore, MenuColorset, ActiveColorset,
              GreyedColorset, TitleColorset, Hilight3DThick / Hilight3DThin / Hilight3DOff,
              Hilight3DThickness, Animation / !Animation, Font, TitleFont, MenuFace, 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.

              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.

              Some options are now negated by prefixing ! to the option.  This is the preferred
              form for all such options.  The other negative forms are now deprecated and will be
              removed in the future.

              This is a list of MenuStyle deprecated negative options: ActiveForeOff,
              AnimationOff, AutomaticHotkeysOff, HilightBackOff, TitleWarpOff

              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 Foreground, Background, Greyed, 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, MenuFace, 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, MenuFace, 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,
              MenuFace, 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 illegal value reverts the border
              width to the default.

              Foreground and Background may have a color name as an argument.  This color is used
              for menu text or the menu's background.  You can omit the color name to reset these
              colors to the built-in default.

              Greyed may have a color name as an argument.  This color is the one used to draw a
              menu-selection which is prohibited (or not recommended) by the Mwm hints which an
              application has specified.  If the color is omitted the color of greyed menu
              entries is based on the background color of the menu.

              HilightBack and !HilightBack switch hilighting the background of the selected menu
              item on and off.  A specific background color may be used by providing the color
              name as an argument to HilightBack.  If you use this option without an argument the
              color is based on the menu's background color.  The ActiveColorset option overrides
              the specified color.  If the colorset has a non solid background it is used for the
              hilighting.

              HilightTitleBack switches hilighting the background of menu titles on.  If a
              TitleColorset was used, the background colour is taken from there.  Otherwise the
              color is based on the menu's background color.  If the colorset has a non solid
              background it is used for the hilighting.

              ActiveFore and !ActiveFore switch hilighting the foreground of the selected menu
              item on and off.  A specific foreground color may be used by providing the color
              name as an argument to ActiveFore.  Omitting the color turns hilighting on when an
              ActiveColorset is used.  ActiveFore turns off hilighting the foreground completely.
              The ActiveColorset option overrides the specified color.

              MenuColorset controls if a colorset is used instead of the Foreground, Background
              and MenuFace menu styles.  If the MenuColorset keyword is followed by a number
              equal to zero or greater, this number is taken as the number of the colorset to
              use.  If the number is omitted, the colorset is switched off and the regular menu
              styles are used again.  The foreground and background colors of the menu items are
              replaced by the colors from the colorset.  If the colorset has a pixmap defined,
              this pixmap is used as the background of the menu.  Note that the MenuFace menu
              style has been optimized for memory consumption and may use less memory than the
              background from a colorset.  The shape mask from the colorset is used to shape the
              menu.  Please refer to the Colorsets section for details about colorsets.

              ActiveColorset works exactly like MenuColorset, but the foreground from the
              colorset replaces the color given with the ActiveFore menu style and the colorset's
              background color replaces the color given with the HilightBack command (to turn on
              background hilighting you have to use the HilightBack menu style too).  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.

              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.

              MenuFace enforces a fancy background upon the menus.  You can use the same options
              for MenuFace as for the ButtonStyle.  See description of ButtonStyle command and
              the Color Gradients sections for more information.  If you use MenuFace without
              arguments the style is reverted back to normal.

              Some examples of MenuFaces are:

                  MenuFace DGradient 128 2 lightgrey 50 blue 50 white
                  MenuFace TiledPixmap texture10.xpm
                  MenuFace HGradient 128 2 Red 40 Maroon 60 White
                  MenuFace Solid Maroon

              Note: The gradient styles H, V, B and D are optimized for high speed and low memory
              consumption in menus.  This is not the case for all the other gradient styles.
              They 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
                  MenuStyle <style> ActiveFore <preferred color>

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

              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 illegal 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 Alt-Tab 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, Tab characters and formatting
              directives beginning with '%'.  Any illegal 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.

              Examples:

                  MenuStyle * Mwm
                  MenuStyle * Foreground Black, Background gray40
                  MenuStyle * Greyed gray70, ActiveFore White
                  MenuStyle * !HilightBack, Hilight3DOff
                  MenuStyle * Font lucidasanstypewriter-14
                  MenuStyle * MenuFace DGradient 64 darkgray MidnightBlue

                  MenuStyle red Mwm
                  MenuStyle red Foreground Yellow
                  MenuStyle red Background Maroon
                  MenuStyle red Greyed Red, ActiveFore Red
                  MenuStyle red !HilightBack, Hilight3DOff
                  MenuStyle red Font lucidasanstypewriter-12
                  MenuStyle red MenuFace DGradient 64 Red Black

              Note that all style options could be placed on a single line for each style name.

       MenuStyle forecolor backcolor shadecolor font style [anim]
              This is the old syntax of the MenuStyle command.  It is obsolete and may be removed
              in the future.  Please use the new syntax as described above.

              Sets the menu style.  When using monochrome the colors are ignored.  The shadecolor
              is the one used to draw a menu-selection which is prohibited (or not recommended)
              by the Mwm hints which an application has specified.  The style option is either
              Fvwm, Mwm or Win, which changes the appearance and operation of the menus.

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

              When the anim option is given, 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.  See also
              SetAnimation command.

       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

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

   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.

              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 one of the commands PlaceAgain,
              Recapture or RecaptureWindow is used.  The message explains on which desk, page,
              Xinerama 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

              STROKE (plus)
                  used during a StrokeFunc command.

              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

       DefaultColors [foreground] [background]
              DefaultColors sets the default foreground and background colors used in
              miscellaneous windows created by fvwm, for example in the geometry feedback windows
              during a move or resize operation.  If you do not want to change one color or the
              other, use - as its color name.  To revert to the built-in default colors omit both
              color names.  Note that the default colors are not used in menus, window titles or
              icon titles.

       DefaultColorset [num]
              DefaultColorset sets the colorset used by the windows controlled by the
              DefaultColors command.  To revert back to the DefaultColors colors use

                  DefaultColorset -1

              or any variant of the DefaultColors command.

       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.

       GlobalOpts [options]
              This command is obsolete.  Please replace the global options in your configuration
              file according to the following table:

                  GlobalOpts WindowShadeShrinks
                    -->
                  Style * WindowShadeShrinks

                  GlobalOpts WindowShadeScrolls
                    -->
                  Style * WindowShadeScrolls

                  GlobalOpts SmartPlacementIsReallySmart
                    -->
                  Style * MinOverlapPlacement

                  GlobalOpts SmartPlacementIsNormal
                    -->
                  Style * TileCascadePlacement

                  GlobalOpts ClickToFocusDoesntPassClick
                    -->
                  Style * ClickToFocusPassesClickOff

                  GlobalOpts ClickToFocusPassesClick
                    -->
                  Style * ClickToFocusPassesClick

                  GlobalOpts ClickToFocusDoesntRaise
                    -->
                  Style * ClickToFocusRaisesOff

                  GlobalOpts ClickToFocusRaises
                    -->
                  Style * ClickToFocusRaises

                  GlobalOpts MouseFocusClickDoesntRaise
                    -->
                  Style * MouseFocusClickRaisesOff

                  GlobalOpts MouseFocusClickRaises
                    -->
                  Style * MouseFocusClickRaises

                  GlobalOpts NoStipledTitles
                    -->
                  Style * !StippledTitle

                  GlobalOpts StipledTitles
                    -->
                  Style * StippledTitle

                  GlobalOpts CaptureHonorsStartsOnPage
                    -->
                  Style * CaptureHonorsStartsOnPage

                  GlobalOpts CaptureIgnoresStartsOnPage
                    -->
                  Style * CaptureIgnoresStartsOnPage

                  GlobalOpts RecaptureHonorsStartsOnPage
                    -->
                  Style * RecaptureHonorsStartsOnPage

                  GlobalOpts RecaptureIgnoresStartsOnPage
                    -->
                  Style * RecaptureIgnoresStartsOnPage

                  GlobalOpts ActivePlacementHonorsStartsOnPage
                    -->
                  Style * ManualPlacementHonorsStartsOnPage

                  GlobalOpts ActivePlacementIgnoresStartsOnPage
                    -->
                  Style * ManualPlacementIgnoresStartsOnPage

                  GlobalOpts RaiseOverNativeWindows
                    -->
                  BugOpts RaiseOverNativeWindows on

                  GlobalOpts IgnoreNativeWindows
                    -->
                  BugOpts RaiseOverNativeWindows off

       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 on stderr.  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, mouse and
              stroke 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.

       Repeat
              When the Repeat command is invoked, the last command that was executed by fvwm is
              executed again.  This happens regardless of whether it was triggered by user
              interaction, a module or by an X event.  Commands that are executed from a function
              defined with the Function command, from the Read or PipeRead commands or by a menu
              are not repeated.  Instead, the function, menu or the Read or PipeRead command is
              executed again.

       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 Alt 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 Xinerama screen number 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.

       HideGeometryWindow [Never | Move | Resize]
              Hides the position or size window that is usually shown when a window is moved or
              resized interactively.  To switch it off only for move or resize operations the
              optional parameters Move and Resize can be used respectively.  To switch both on
              again use the Never option.

       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 [[screen screen] [w | m]x[p | w] ... [w | m]y[p | w] ... [Warp]] | [pointer] |
       [ewmhiwa]
              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.  By default, the EWMH working area is
              honoured.

              If the literal option screen followed by a screen argument 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 as interpreted as in the MoveToScreen command.  If the optional argument
              Warp is specified the pointer is warped with the window.  If the single argument
              pointer is given, the top left corner of the window is moved to the pointer
              position before starting the operation; this is mainly intended for internal use by
              modules like FvwmPager.  If the optional argument ewmhiwa is given, then the window
              position will ignore the working area (such as ignoring any values set via
              EwmhBaseStruts).

              The operation can be aborted with Escape 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 optional arguments x and y are provided, then the window is moved
              immediately without user interaction.  Each argument 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 precent 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
                  # poition minus 50% of widow size).
                  Move 50-50w 50-50w

              Note: In order to obtain moving windows which do not snap to screen, with
              interactive move, hold down Alt whilst moving the window to disable snap attraction
              if it's defined.

              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 Xinerama screen.  The screen argument can be
              'p' for the primary screen, 'c' for the current screen (containing the mouse
              pointer), 'w' for the screen containing the center of +the context window, 'g' for
              the global screen or the screen number itself (counting from zero).

       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]
       [w]width[p | c | wa | da] [w]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.

              The operation can be aborted with Escape 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.  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 Xinerama screen on which to
              operate.  It can be 'p' for the primary screen, 'c' for the current screen
              (containing the mouse pointer), 'g' for the global screen or the screen number
              itself (counting from zero).  This option is only useful with multiple Xinerama
              screens.

              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.

       Recapture
              This command is obsolete and should not be used anymore.  Should you want to do
              something specific that you cannot do without it, please report this to the
              fvwm-workers mailing list <fvwm-workers@fvwm.org>.  This command may be removed at
              some point in the future.  Please read the note at the end of the section Delayed
              Execution of Commands to learn about how to avoid the Recapture command.

              Causes fvwm to recapture all of its windows.  This ensures that the latest style
              parameters are used.  The recapture operation is visually disturbing.

              Since fvwm version 2.4 only a very few Style options need a Recapture to take
              effect (e.g.  UseStyle).

       RecaptureWindow
              This command is obsolete and should not be used anymore.  See Recapture For
              details.

              Causes fvwm to recapture the chosen window.

       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 & Stroke 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 scroll-lock if you have no problem with it.  In the FAQ you can find
              a better solution of this problem.

       EdgeCommand [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.

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

              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 Shift 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 Alt-Ctrl-Shift-
              F11 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 Meta and Shift 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

       Stroke [(window)] Sequence Button Context Modifiers Function
              Binds a mouse stroke sequence to a specified fvwm command, or removes the binding
              if Function is '-'.  The syntax is the same as for a Mouse binding except that
              Sequence is inserted in front of the button number and a value of 0 for Button
              concerns the StrokeFunc command.  The Context and Modifiers fields are defined as
              in the Mouse binding.  However, only the 'R' Context really works (if you want to
              use other contexts you need to use the StrokeFunc below).

              Strokes sequences are defined in a telephone grid like this:

                   1  2  3

                   4  5  6

                   7  8  9

              or in a numeric pad grid like this:

                   7  8  9

                   4  5  6

                   1  2  3

              The telephone grid is used by default, to use the numeric pad grid you should begin
              the sequence with a 'N'.  Note that a complex motion may produce several different
              sequences (see the "netscape" example below to handle such motion).  Moreover,
              sequences are limited to 20 elements (with the present version of libstroke),
              however, in practice it is preferable to use sequence with less than 12 elements.

              Because of the default button menu in fvwm, you may need to remove a mouse button
              binding (using an empty action) before using the stroke

                  Mouse 3 R N

              Also, you can still use the stroke "sequence 0" to simulate a click:

                  Stroke 0 3 R N Menu WindowList Nop

              The following example starts xterm when the mouse drags an 'I' on the root window
              with button 3 pressed down:

                  Stroke 258  3  R  N  Exec exec xterm

              An example for Netscape:

                  Stroke 7415963    3  R  N  Exec exec netscape
                  Stroke 74148963   3  R  N  Exec exec netscape
                  Stroke 74158963   3  R  N  Exec exec netscape
                  Stroke 7418963    3  R  N  Exec exec netscape
                  Stroke 415963     3  R  N  Exec exec netscape

              You may prefer to use the numeric pad grid since you have such a grid on your
              machine.  Here an example:

                  Stroke N78963214   3  R  N FvwmForm FvwmForm-QuitVerify
                  Stroke N789632147  3  R  N FvwmForm FvwmForm-QuitVerify

              This example starts the "QuitVerify" form if you draw a box that begins in the top
              left corner.

              Note: You need libstroke installed and fvwm compiled with stroke support.
              libstroke can be obtained at http://www.etla.net/~willey/projects/libstroke/

       StrokeFunc [Options]
              Causes fvwm to record a mouse stroke sequence and to execute the corresponding
              action as defined in a Stroke command.  The cursor is modified to the STROKE
              context of the CursorStyle command during recording.  When the stroke is finished
              StrokeFunc looks for a stroke binding of the form

                  Stroke sequence 0 Context Modifiers action

              and executes the corresponding action (Note the 0).  Normal use of this function is
              via a Mouse or Key command.  Examples:

                  Mouse 3 A M StrokeFunc
                  Key x R N StrokeFunc

              If you press mouse button 3 and Alt anywhere (respectively, press the key x when
              the cursor is on the root window), then fvwm records the mouse motions until the
              mouse button 3 (respectively, the x key) is released and then check if the recorded
              sequence corresponds to a stroke binding of the form

                  "Stroke sequence 0 A M action"
                  "Stroke sequence 0 R N action"

              Note that the Context and Modifiers are taken at the beginning of the execution of
              the StrokeFunc command (so you can release the modifiers before the end of the
              stroke recording in the case of a mouse binding and if you used, say, a title-bar
              context the mouse motion can go through an application window).  The keys Escape
              and Delete allow you to abort the command.

              The StrokeFunc command has five options: NotStayPressed, EchoSequence, DrawMotion,
              FeedBack and StrokeWidth.  These options are disabled by default.  EchoSequence
              causes fvwm to Echo the recorded stroke sequence.  DrawMotion causes fvwm to draw
              the mouse motion on the screen.  FeedBack causes fvwm to display during a fraction
              of second the cursor of the WAIT context of the CursorStyle command if the recorded
              stroke sequence corresponds to a stroke binding.  StrokeWidth takes an integer
              argument, which must be >= 0 and <= 100 and which defines the width of the line for
              the DrawMotion option.

              NotStayPressed works only if StrokeFunc is used via a Mouse or a Key command.  This
              option removes the need to have a button or the key pressed during the stroke, but
              you have to do a mouse click or press the Return or Space key to finish the mouse
              motion recording (these keys also work without the NotStayPressed option).

              You can use the StrokeFunc "alone".  In this case it works as above with the
              NotStayPressed option enabled.  However, Modifiers, in general, may not work as
              expected (i.e., in this case use 'A' or 'N' as Modifiers in the stroke bindings).

              Note that some computers do not support key release events.  If that is the case
              the StrokeFunc used via a Key command works as if the NotStayPressed option is
              enabled.

   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, Color, ForeColor, BackColor, Colorset, HilightFore,
              HilightBack, 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, GNOMEUseHints / GNOMEIgnoreHints,
              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 if the window has a title-bar or not.
                     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.

                     Color takes two arguments.  The first is the window-label text color and the
                     second is the window decorations normal background color.  The two colors
                     are separated with a slash.  If the use of a slash causes problems then the
                     separate ForeColor and BackColor options can be used.

                     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.

                     The HilightFore, HilightBack and HilightColorset style options work exactly
                     like ForeColor, BackColor and Colorset but are used only if the window has
                     the focus.  These styles replace the old commands HilightColor and
                     HilightColorset.

                     BorderColorset takes the colorset number as its sole argument and overrides
                     the colors set by Color or Colorset.  for the window border.  To stop using
                     a colorset, the argument is omitted.

                     The HilightBorderColorset style option works similarly to 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 Xinerama screen on which the IconBox is defined.  It can be
                     the usual screen Xinerama specification, 'p', ´c', 'g', a screen number or
                     the additional 'w' for the screen where the window center is located.  This
                     is only useful with multiple Xinerama 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 a Xinerama setup is used.  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 ] height [ p ] ] 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.  This command is useful for certain versions of xemacs which freak out if
              their windows become too small.  If you omit he parameters or their values are
              invalid, both limits are set to 0 pixels (which is the default value).

              MaxWindowSize [ width [ p ] height [ p ] ] 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.  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
              command.

              The second argument determined is 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 following 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 tells how hard it should be 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 the screen's or xinerama screen's border.  It takes one or two parameters.  The
              first parameter tells how many pixels over the 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 individual Xinerama screens.  If
              omitted, the value of the first parameter is assumed for this type of movement.
              Set the second parameter to 0 to zero to ignore individual xinerama screen edges.
              Note that the center of the window being moved determines the xinerama screen on
              which the window should be kept.  Both values are 0 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,
              GlobalOpts SmartPlacementIsReallySmart / GlobalOpts SmartPlacementIsNormal are
              still supported but will be removed in the future.  The old and new styles can be
              translated according to the following table:

                  GlobalOpts SmartPlacementIsReallySmart
                  Style * SmartPlacement
                  -->
                  Style * SmartPlacement, CleverPlacement

                  GlobalOpts SmartPlacementIsNormal
                  Style * SmartPlacement
                    -->
                  Style * SmartPlacement, CleverPlacementOff

                  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 can be 'p' for the primary screen, 'c' for
              the current screen (containing the mouse pointer), 'g' for the global screen or the
              screen number itself (counting from zero).  A new window is placed on the specified
              Xinerama 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 the global screen.  The
              StartsOnScreen style is also useful to cause these windows to be placed relative to
              a specific Xinerama screen.  For example:

                  Style * StartsOnScreen c

              Would cause all windows, including those with their own geometry to be placed
              relative to the current Xinerama screen rather than the global screen.  For those
              standard Xt programs which understand this usage, the starting desk/page can also
              be specified via a resource (e.g., "-xrm '*fvwmscreen: c'").  ('fvwmscreen' was
              chosen because some applications already use ´.screen' for other purposes.)

              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 Xinerama 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 Xinerama screen
              specification on Restart or Recapture.  RecaptureIgnoresStartsOnPage causes fvwm to
              respect the current window position on Restart or Recapture.  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.

              With GNOMEIgnoreHints fvwm ignores all GNOME hints for the window, even if GNOME
              compliance is compiled in.  This is useful for those pesky applications that try to
              be more clever than the user and use GNOME hints to force the window manager to
              ignore the user's preferences.  The GNOMEUseHints style switches back to the
              default behavior.

              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.
              However, windows that are already ignored at the time when the option is set must
              be recaptured with the Recapture command in order to become managed.

              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, ForeColor white, \
                       BackColor grey40, HilightFore black, HilightBack grey70

                  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
              illegal, 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.  This command is
              less disturbing than Recapture, but does not affect window style options as
              Recapture does.

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

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

       EdgeResistance delayEdgeResistance scrolling moving [xinerama-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 xinerama-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 left right top bottom
              Where left, right, top and bottom are positive or null integers which define bands
              at the edge of the screen.  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 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 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.

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

       Xinerama [bool]
              Enables Xinerama support if the boolean argument is true and disables it if the
              argument is false.  Calling this command without arguments turns on Xinerama
              support if it was disabled before and turns it off if it was enabled.  For example:

                  # Turn Xinerama support on, use primary screen 2
                  XineramaPrimaryScreen 2
                  Xinerama on
                  # Turn it off again
                  Xinerama off

       XineramaPrimaryScreen [primary-screen]
              Takes an integer number or 'g' or 'c' as its argument.  A number is taken as the
              number of the Xinerama screen that is to be used as the primary screen.  The
              primary screen can be used as the preferred screen to place windows with

                  XineramaPrimaryScreen <screen number>
                  Style * StartsOnScreen p

              The primary screen is used in some of the modules and for the default icon box too.
              Any number that is zero or more is taken as the primary screen's number.  Instead,
              the letter 'c' indicates to use the current screen (containing the pointer)
              whenever the primary screen is used.  This may be very confusing under some
              circumstances.  With 'g', the global screen is used as the primary screen,
              effectively disabling the primary screen.  Calling this function with any other
              argument (including none) resets the primary screen to 0.

       XineramaSls [bool]
              For multi-screen implementations other than Xinerama, such as Single Logical
              Screen, it is possible to simulate a Xinerama configuration if the total screen
              seen by fvwm is made up of equal sized monitors in a rectangular grid.  The
              XineramaSls command turns SLS support on or off or toggles it to the opposite
              state, depending on if the boolean argument is "True", "False" or "toggle".  If no
              argument is given, this is treated like "toggle".  The default layout uses one by
              one screens.  To configure the layout, use the XineramaSlsSize or
              XineramaSlsScreens command.

       XineramaSlsSize Horizontal Vertical
              This command configures the layout of the Single Logical screen feature.  It takes
              two arguments, Horizontal and Vertical which must be an integer value dividing
              evenly into the total desktop width, and height.  For an example with two monitors
              side by side which appear as one screen through the X-Server with the right screen
              as the primary screen, use:

                  XineramaSlsSize 2x1
                  XineramaSls On
                  XineramaPrimaryScreen 1
                  Xinerama On

       XineramaSlsScreens number-of-screens [screen-spec ...]
              This command configures the layout of the Single Logical screen feature.  Its first
              argument is the number of screens to use.  It must be followed by exactly this
              number of screen-spec arguments.  Each of these can be written either in standard X
              geometry format: "<width>x<height>+<x>+<y>" or as a space separated list of
              numbers: "x y width height".  Both ways of describing screens can be mixed in a
              single command.  All four numbers must be supplied.  The x and y values specify the
              origin of the screen in relation to the global screen's origin while width and
              height specify the size of the screen in pixels.  No checks are done if the
              geometries make sense, so it is possible to define overlapping screens (with random
              results) or screens that are not visible at all.

                  XineramaSlsScreens 3 \
                    512x768+0+0 512x300+512+0 512 300 512 468
                  XineramaSls On
                  XineramaPrimaryScreen 1
                  Xinerama On

   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 stderr.  Potentially useful for debugging things in your
              config.

                  Echo Beginning style definitions...

       EchoFuncDefinition function
              The EchoFuncDefinition is similar to the Echo command but prints the definition for
              the given function to stderr.  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 F1 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.

   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,
              HasHandles, HasPointer, 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 Xinerama screen containing the mouse pointer are
              considered for a match too.  For example:

                  # Focus next window on current page,
                  # regardless of Xinerama 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 whether Xinerama support is enabled or not.
              This condition implicitly activates the CurrentDesk condition.

              The CurrentGlobalPageAnyDesk condition matches only windows that are on the current
              page of any desk, regardless of whether Xinerama support is enabled or not.

              The CurrentPage condition matches only windows that are on the current page of the
              current desk.  If Xinerama support is enabled, it only matches windows that are at
              least partially on the Xinerama screen containing the mouse pointer.  This
              condition implicitly activates the CurrentDesk condition.

              The CurrentPageAnyDesk and CurrentScreen conditions matches only windows that are
              on the current page of any desk.  If Xinerama support is enabled, they only match
              windows that are at least partially on the Xinerama screen containing the mouse
              pointer.

              The Screen [n] condition matches only windows which are on the specified Xinerama
              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 HasHandles condition excludes all windows that do not have resize handles.

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

              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 Fullscreen condition matches only fullscreen 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 Ctrl-Alt-Escape (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 ~/bin/fvwm -f $HOME/.fvwm/main
                  Key F1 R N Restart fvwm1 -s -f .fvwmrc
                  Key F1 R N Restart xterm -n '"X console"' \
                    -T \"X\ console\" -e fvwm1 -s

              If you need a native restart, we suggest only to use Restart command without
              parameters unless there is a reason not to.  If you still use an old command
              'Restart fvwm2' that was correct in 2.2.x, all current command line arguments are
              lost.  On a restart without parameters or with --pass-args, they are preserved.
              Here are some cases when 'Restart fvwm2' or 'Restart fvwm' cause troubles:

                  * running fvwm under a session manager
                  * running fvwm with multi headed displays
                  * having command line arguments, like
                    -f themes-rc or -cmd
                  * if the first fvwm2 in the $PATH is a
                    different one

              This is why we are issuing a warning on an old usage.  If you really want to
              restart to fvwm with no additional arguments, you may get rid of this warning by
              using "Restart fvwm -s" or "Restart /full/path/fvwm".

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

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

              This command is useful if you use initial arguments like

                  -cmd FvwmCpp

              and want to switch to another fvwm version without losing the initial arguments.

       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.

       In the 2.4.x versions a special module FvwmTheme was introduced to manage colorsets.
       Starting with the 2.5.x beta version, the FvwmTheme functionality was moved to the core
       fvwm, so this module became obsolete.  In 2.6.7 the FvwmTheme module was removed.

       The old syntax:

           DestroyModuleConfig FvwmTheme: *
           *FvwmTheme: Colorset 0 fg black, bg rgb:b4/aa/94
           *FvwmTheme: Colorset 1 fg black, bg rgb:a1/b2/c8

       corresponds to the new syntax:

           CleanupColorsets
           Colorset 0 fg black, bg rgb:b4/aa/94
           Colorset 1 fg black, bg rgb:a1/b2/c8

       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:

                  MenuStyle * \
                       MenuFace DGradient 128 2 lightgrey 50 blue 50 white

                  # 20% gradient from red to blue,
                  # 30% from blue to black,
                  # 50% from black to grey
                  MenuStyle * \
                       MenuFace 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

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_MODULEDIR
           Set by fvwm to the directory containing the standard fvwm modules.

       FVWM_USERDIR
           Used to determine the user's data directory for reading and sometimes writing personal
           files.  If this variable is not already set, it is set by fvwm to $HOME/.fvwm, which
           is the default user's data directory.

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

                                           19-Oct-2022                                    FVWM(1)