Provided by: fvwm3_1.1.0+ds-1_amd64 bug

NAME

       fvwm3 - F? Virtual Window Manager for X11

SYNOPSIS

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

DESCRIPTION

       Fvwm is a window manager for X11 optimised for speed.

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

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

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

OPTIONS

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

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

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

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

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

           fvwm -c "AddToFunc StartFunction I Module FvwmPager"

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

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

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

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

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

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

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

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

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

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

           Display depth 8 (256 colors)

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

           Display depth 4 (16 colors)

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

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

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

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

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

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

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

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

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

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

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

ANATOMY OF A WINDOW

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

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

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

THE VIRTUAL DESKTOP

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

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

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

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

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

           xterm -geometry +0+0

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

           xterm -geometry +1000+1000

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

           xterm -geometry -5-5

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

       There is a fvwm-specific extension to geometry strings which can also enforce the geometry
       is relative to the given screen. For example:

           xterm -geometry +0+0@n

       Where 'n' can be one of a RandR monitor name, or an assigned monitor number. For more
       details, see the RANDR SUPPORT section.

       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

RANDR MULTI-SCREEN SUPPORT

       Fvwm best supports multiple screens using the RandR X11 protocol. If fvwm isn’t built with
       the RandR protocol then the multi screen support is very limited, and it is suggested to
       rebuild with RandR. It is also recommended to use 'EdgeScroll 0 0' on multi-screen
       displays to avoid changing pages when moving the mouse between screens.

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

       When Fvwm detects monitors, it adds them to a tree with a defined order, and each monitor
       is assigned a number. That order is top-down, left-to-right, so for example, the following
       diagram illustrates a monitor layout and their assigned number.

           A (0)
           B (1)   C (2)    D (3)

       Hence it is possible to then refer to the 2nd monitor and print its name via expansion
       variables as:

           $[monitor.1.name]

       Which would print the name, B.

       In doing so, Fvwm tracks events from RandR, such as when a given output changes size, or
       has been added or removed.

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

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

DESKTOP BEHAVIOUR

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

INITIALIZATION

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

           Read config

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

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

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

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

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

       or

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

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

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

           Exec app

       or

           Module FvwmXxx

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

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

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

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

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

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

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

           DestroyFunc RestartFunction
           AddToFunc RestartFunction
            + I Module FvwmIconMan

           DestroyFunc SessionInitFunction
           AddToFunc SessionInitFunction
            + I Module FvwmBanner

           DestroyFunc SessionRestartFunction
           AddToFunc SessionRestartFunction
            + I Nop

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

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

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

COMPILATION OPTIONS

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

ICONS AND IMAGES

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

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

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

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

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

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

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

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

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

           {empty}(3) @[-]_angle_

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

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

           filename_without_colon.svg
           filename:with:colon.svg:

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

           image.svg:!

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

           image.svg:60x60

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

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

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

           image.svg:-0x0

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

           image.svg:0x-0

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

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

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

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

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

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

       Scaling down a translated or rotated image can prevent cropping.

           image.svg:@30*0.6

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

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

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

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

       Use a negative scale factor to mirror the actual image.

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

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

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

       Transposing is done last of all, after everything else.

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

MODULES

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

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

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

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

       Please refer to the Module Commands section for details.

ICCCM COMPLIANCE

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

       The ICCCM states that windows possessing the property

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

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

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

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

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

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

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

EXTENDED WINDOW MANAGER HINTS

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

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

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

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

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

       additionally warps the pointer to the center of the window.

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

CONFIGURATION

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

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

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

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

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

FONTS

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

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

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

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

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

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

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

       with the locale charset ISO8859-15 fvwm tries to load

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

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

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

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

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

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

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

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

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

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

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

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

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

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

           StringEncoding=enc:_full_font_name_

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

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

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

       or

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

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

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

       or

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

       or equivalently

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

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

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

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

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

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

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

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

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

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

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

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

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

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

           Shadow=size [offset] [directions]]:

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

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

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

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

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

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

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

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

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

       C, Center, Centre, .

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

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

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

BI-DIRECTIONAL TEXT

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

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

KEYBOARD SHORTCUTS

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

SESSION MANAGEMENT

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

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

BOOLEAN ARGUMENTS

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

BUILTIN KEY AND MOUSE BINDINGS

       The following commands are built-in to fvwm:

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

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

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

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

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

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

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

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

           Key Tab A M -

COMMAND EXECUTION

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

           Function (rest of command)

       or

           Module (rest of command)

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

       Example: the config file contains the line

           HelpMe

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

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

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

QUOTING

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

           Popup Window-Ops

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

           Popup "Window Ops"

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

COMMAND EXPANSION

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

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

       Example:

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

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

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

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

       Example:

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

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

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

       The parameters known by fvwm are:

       $$
           A literal '$'.

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

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

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

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

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

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

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

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

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

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

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

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

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

       $[desk.n]
           The current desk number.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

       $[w.screen]
           The screen name the window is on.

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

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

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

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

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

       $[pointer.screen]
           The screen name the pointer is currently on.

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

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

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

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

       + "number" returns the monitor’s position within the tree. See RANDR SUPPORT.

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

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

       + "count" returns the number of active monitors.

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

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

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

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

       + "prev_primary" is the name of the output which was the previous primary monitor.

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

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

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

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

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

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

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

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

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

           Please refer to the Colorsets section for details about colorsets.

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

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

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

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

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

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

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

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

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

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

SCRIPTING AND COMPLEX FUNCTIONS

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

MENU CONCEPTS AND COMMANDS

       Please refer to the fvwm3menus man page.

LIST OF FVWM COMMANDS

       Please refer to the fvwm3commands and fvwm3styles man pages.

ENVIRONMENT

       The environment variables that have an effect on how fvwm operates are the following:

       DISPLAY
           Fvwm starts on this display unless the -display option is given.

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

       FVWM3_LOGFILE
           Used to determine the path and filename to log debug information from fvwm3. By
           default debug log is written to $FVWM_USERDIR/fvwm3-output.log . If an absolute path
           is specified (starting with /) then $FVWM_USERDIR is ignored, otherwise the log is
           written to $FVWM_USERDIR/$FVWM3_LOGFILE .

       FVWM_DATADIR
           Set by fvwm to the directory containing fvwm config and module data.

       FVWM_MODULEDIR
           Set by fvwm to the directory containing the standard fvwm modules.

       SESSION_MANAGER
           Fvwm tries to contact this session manager.

       SESSION_MANAGER_NAME
           This is used mainly to determine xsm running to work around its bug. If this variable
           is set to "xsm", DiscardCommand is set as xsm expects it and not as XSMP requires. If
           you run fvwm under xsm, you should set this variable to "xsm", otherwise old state
           files are not removed.

       SM_SAVE_DIR
           If this is set, fvwm saves its session data in this directory. Otherwise it uses
           $HOME. Note, the state files are named .fs-?????? and normally are removed
           automatically when not used anymore.

AUTHORS

       Robert Nation with help from many people, based on twm code, which was written by Tom
       LaStrange. After Robert Nation came Charles Hines, followed by Brady Montz. Currently fvwm
       is developed by a number of people on the fvwm-workers mailing list.

COPYRIGHT

       Fvwm and all the modules, scripts and other files coming with the distribution are subject
       to the GNU General Public License (GPL). Please refer to the COPYING file that came with
       fvwm for details.

BUGS

       Bug reports can be sent to the fvwm-workers mailing list at fvwm-workers@fvwm.org

       The official fvwm homepage is http://fvwm.org/.

                                            2024-07-25                                   FVWM3(1)