1FVWM(1)                           Fvwm 2.6.9                           FVWM(1)
2
3
4

NAME

6       Fvwm - F? Virtual Window Manager for X11
7

SYNOPSIS

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

DESCRIPTION

15       Fvwm is a window manager for X11.  It is designed to minimize memory
16       consumption, provide a 3D look to window frames, and a virtual desktop.
17
18       Note that there are several window managers around that have "fvwm" in
19       their name.  In the past, version 2.x of fvwm was commonly called fvwm2
20       to distinguish it from the former version 1.x (fvwm or even fvwm1).
21       Since version 1.x has been replaced by version 2.x a long time ago we
22       simply call version 2.x and all versions to come, fvwm, throughout this
23       document, and the executable program is named fvwm.  There is an fvwm
24       offspring called fvwm95, it is mostly a patched version of fvwm-2.0.43.
25       The main goal of fvwm95 was to supply a Windows 95 like look and feel.
26       Since then, fvwm has been greatly enhanced and practically all fvwm95
27       features can be achieved by fvwm.
28
29       Fvwm provides both a large virtual desktop and multiple disjoint
30       desktops which can be used separately or together.  The virtual desktop
31       allows you to pretend that your video screen is really quite large, and
32       you can scroll around within the desktop.  The multiple disjoint
33       desktops allow you to pretend that you really have several screens to
34       work at, but each screen is completely unrelated to the others.
35
36       Fvwm provides keyboard accelerators that allow you to perform most
37       window manager functions, including moving and resizing windows and
38       operating the menus, using keyboard shortcuts.
39
40       Fvwm has also overcome the distinction between configuration commands
41       and action commands that most window managers make.  Configuration
42       commands typically set fonts, colors, menu contents, and key and mouse
43       function bindings, while action commands do things like raise and lower
44       windows.  Fvwm makes no such distinction and allows anything to be
45       changed at any time.
46
47       Other noteworthy differences between fvwm and other X11 window managers
48       are the introduction of the SloppyFocus and NeverFocus focus methods.
49       Focus policy can be separately specified for different window groups.
50       Windows using SloppyFocus acquire focus when the pointer moves into
51       them and retain focus until some other window acquires it.  Such
52       windows do not lose focus when the pointer moves into the root window.
53       The NeverFocus policy is provided for use with windows into which one
54       never types (e.g. xclock, oclock, xbiff, xeyes, tuxeyes) - for example,
55       if a SloppyFocus terminal window has focus, moving the pointer over a
56       NeverFocus decoration window does not deprive the terminal of focus.
57

OPTIONS

59       These are the command line options that are recognized by fvwm:
60
61       -i | --clientid id
62           This option is used when fvwm is started by a session manager.
63           Should not be used by a user.
64
65       -c | --cmd config-command
66           Causes fvwm to use config-command instead of 'Read config' (or
67           'Read .fvwm2rc') as its initialization command.  (Note that up to
68           10 -f and -c parameters can be given, and they are executed in the
69           order specified.)
70
71           Any module started by command line arguments is assumed to be a
72           module that sends back config commands.  All command line modules
73           have to quit before fvwm proceeds on to the StartFunction and
74           setting border decorations and styles.  There is a potential
75           deadlock if you start a module other than FvwmCpp/FvwmM4/FvwmPerl
76           but there is a timeout so fvwm eventually gets going.
77
78           As an example, starting the pager this way hangs fvwm until the
79           timeout, but the following should work well:
80
81               fvwm -c "AddToFunc StartFunction I Module FvwmPager"
82
83       -d | --display displayname
84           Manage the display called displayname instead of the name obtained
85           from the environment variable $DISPLAY.
86
87       -D | --debug
88           Puts X transactions in synchronous mode, which dramatically slows
89           things down, but guarantees that fvwm's internal error messages are
90           correct.  Also causes fvwm to output debug messages while running.
91
92       -f config-file
93           Causes fvwm to read config-file instead of ~/.fvwm/config as its
94           initialization file.  This is equivalent to -c 'Read config-file'.
95
96       -h | --help
97           A short usage description is printed.
98
99       -r | --replace
100           Try to take over from a previously running wm.  This does not work
101           unless the other wm is ICCCM2 2.0 compliant.
102
103       -F | --restore state-file
104           This option is used when fvwm is started by a session manager.
105           Should not be used by a user.
106
107       -s | --single-screen [screen_num]
108           On a multi-screen display, run fvwm only on the screen named in the
109           $DISPLAY environment variable or provided through the -d option.
110           The optional argument screen_num should be positive or null and
111           override the screen number.  Normally, fvwm attempts to start up on
112           all screens of a multi-screen display.
113
114       -V | --version
115           Prints the version of fvwm to stderr.  Also prints an information
116           about the compiled in support for readline, rplay, stroke, xpm,
117           png, svg, GNOME hints, EWMH hints, session management,
118           bidirectional text, multibyte characters, xinerama and Xft aa font
119           rendering.
120
121       -C | --visual visual-class
122           Causes fvwm to use visual-class for the window borders and menus.
123           visual-class can be "StaticGray", "GrayScale", "StaticColor",
124           "PseudoColor", "TrueColor" or "DirectColor".
125
126       -I | --visualid id
127           Causes fvwm to use id as the visual id for the window borders and
128           menus.  id can be specified as N for decimal or 0xN for
129           hexadecimal.  See man page of xdpyinfo for a list of supported
130           visuals.
131
132       -l | --color-limit limit
133           Specifies a limit on the colors used in image, gradient and
134           possibly simple colors used by fvwm.  In fact, fvwm (and all the
135           modules) uses a palette with at most limit colors.  This option is
136           only useful with screens that display 256 colors (or less) with a
137           dynamic visual (PseudoColor, GrayScale or DirectColor).  The
138           default depends on your X server and how you run fvwm.  In most
139           case this default is reasonable.  The -l option should be used only
140           if you encounter problems with colors.  By default, fvwm tries to
141           detect large pre-allocated palettes.  If such a palette is detected
142           fvwm uses it and a priori the -l must not be used.  Moreover, in
143           this case the -A and -S options are forced.  Note that XFree-4.2
144           pre-allocates 244 colors (if you use a driver with Render support)
145           leaving only a few free colors.  This may lead to some color
146           problems (and nothing can be done).  XFree-4.3 or better
147           pre-allocate only 85 colors.  If no pre-allocated palette is auto
148           detected the defaults are as follow:
149
150           Display depth 8 (256 colors)
151
152                   PseudoColor: 68 (4x4x4 color cube + 4 grey)
153                   GrayScale: 64 regular grey
154                   DirectColor: 32 (3x3x3 color cube + 5 grey)
155
156           Display depth 4 (16 colors)
157
158                   PseudoColor: 10 (2x2x2 color cube + 2 grey)
159                   GrayScale: 8 regular grey
160                   DirectColor: 10 (2x2x2 color cube + 2 grey)
161
162           These defaults may change before version 2.6.  Note that if you use
163           a private color map (i.e., fvwm is started with the -C or the -I
164           options), then other defaults are used.
165
166           Now what to do if you encounter problems with colors? The first
167           thing to do is to check if you really cannot run your X server with
168           depth 15, 16 or better.  Check your X server documentation.  Note
169           that some hardware can support two different depths on the same
170           screen (typically depth 8 and depth 24).  If depth 8 is the
171           default, you can force fvwm to use the best depth by using the -C
172           option with TrueColor as argument.  So now we assume that you are
173           forced to run in depth 8 with a dynamic visual because your
174           hardware/driver cannot do better or because you need to use an
175           application which needs to run under this mode (e.g., because this
176           application needs read-write colors).  What it should be understand
177           is that you have only 256 colors and that all the applications
178           which use the default color map must share these colors.  The main
179           problem is that there are applications which use a lot or even all
180           the colors.  If you use such application you may have no more free
181           colors and some applications (which used only a few colors) may
182           fail to start or are unusable.  There are three things that can be
183           done (and fvwm does not really play a particular role, all
184           applications are concerned).  The first is to run the applications
185           which waste your (default) color map with a private color map.  For
186           example, run netscape with the -install option, run KDE or QT
187           applications with the --cmap option, use the -C option for fvwm.
188           The disadvantage of this method is that it is visually disturbing
189           (see the ColormapFocus command for a better control of the color
190           maps switching).  The second method is to limit the number of
191           colors that the applications use.  Again, some applications have
192           options to specify a given color limit.  With fvwm you may try
193           various values, 61 (a special "visual" palette), 56 (a 4x4x3 color
194           cube plus 6 grey), 29 (a 3x3x3 color cube plus 2 grey), 10 or 9.
195           Also, you may use the -L option.  However, limiting the number of
196           colors is not the definitive solution.  The definitive solution is
197           to try cause applications which use a lot of colors use the same
198           colors.  This is a difficult task as there are no formal standards
199           for this goal.  However, some toolkits as QT and GTK use color
200           cubes as palettes.  So, the idea is to configure your
201           applications/toolkits to all use the same color cube.  Moreover,
202           you can use the colors in this color cube in your X resources
203           configuration files and/or as arguments to colors options.  Fvwm
204           can use any color cube of the form RxGxB with 2 <= R <= 6, R = G,
205           R-1 =< B <= R and B >= 2.  To get an RxGxB color cube give an
206           argument to -l an integer c >= R*G*B and < (R+1)*(G+1)*B if B=R and
207           < R*G*(B+1) if B < R (and different from 61).  If c > R*G*B, then
208           some grey may be added to the color cube.  You can use the
209           PrintInfo Colors [1] command to get information on your fvwm colors
210           setting.  In particular, this command prints the palette used by
211           fvwm in rgb format (the last integer gives the number of times fvwm
212           has allocated the colors).
213
214       -L | --strict-color-limit
215           If the screen displays 256 colors (or less) and has a dynamic
216           visual, causes fvwm to use its palette for all the colors.  By
217           default, the palette is used only for images and gradients.
218
219       -P | --visual-palette
220           If the screen displays 256 colors (or less) and has a dynamic
221           visual, this option causes fvwm to use a palette designed for
222           limiting the "visual" color distance between the points of the
223           palette.  Moreover, for better color sharing, if possible colors
224           with a name in the X rgb data base are used for defining the colors
225           (with the hope that applications and images prefer to use named
226           colors).  If the -l option is not used this palette has 61 colors.
227           This palette is also automatically selected if 61 or 9 is used as
228           argument to the -l option.
229
230       -A | --allocate-palette
231           If the screen displays 256 colors (or less) and has a dynamic
232           visual this option causes fvwm to allocate all the colors of its
233           palette at start up for reserving these colors for future use.
234           This option forces the -static-palette option.  By default, fvwm
235           allocates (reserves) a color in its palette only if it needs this
236           color.
237
238       -S | --static-palette
239           If the screen displays 256 colors (or less) and has a dynamic
240           visual this option causes fvwm to never free the colors in its
241           palette.  By default, when fvwm does not need a color any more it
242           frees this color so that a new color can be used.  This option may
243           speed up image loading and save a few bits of memory.
244
245       -blackout
246           This option is provided for backward compatibility only.  Blacking
247           out the screen during startup is not necessary (and doesn't work)
248           anymore.  This option will be removed in the future.
249
250       --debug-stack-ring
251           Enables stack ring debugging.  This option is only intended for
252           internal debugging and should only be used by developers.
253

ANATOMY OF A WINDOW

255       Fvwm puts a decorative border around most windows.  This border
256       consists of a bar on each side and a small L-shaped section on each
257       corner.  There is an additional top bar called the title-bar which is
258       used to display the name of the window.  In addition, there are up to
259       10 title-bar buttons.  The top, side, and bottom bars are collectively
260       known as the side-bars.  The corner pieces are called the frame.
261
262       With the built-in minimal configuration, dragging mouse button 1 in the
263       frame or side-bars begins a resize operation on the window.  Dragging
264       mouse button 2 in the frame or side-bars begins a move operation.
265       There are raise/lower operations bound to a single clicking on borders.
266       Similarly for the window title.
267
268       Up to ten title-bar buttons may exist.  Their use is completely user
269       definable.  One popular configuration uses one button on the left that
270       is used to bring up a list of window options and two buttons on the
271       right used to iconify and maximize the window.  Another popular
272       configuration adds a close button to the right.  The number of
273       title-bar buttons used depends on which ones have mouse actions bound
274       to them.  See the Mouse command.
275

THE VIRTUAL DESKTOP

277       Fvwm provides multiple virtual desktops for users who wish to use them.
278       The screen is a viewport onto a desktop which may be larger than the
279       screen.  Several distinct desktops can be accessed (concept: one
280       desktop for each project, or one desktop for each application, when
281       view applications are distinct).  Since each desktop can be larger than
282       the physical screen, divided into m by n pages which are each the size
283       of the physical screen, windows which are larger than the screen or
284       large groups of related windows can easily be viewed.
285
286       The (m by n) size (i.e. number of pages) of the virtual desktops can be
287       changed any time, by using the DesktopSize command.  All virtual
288       desktops must be (are) the same size.  The total number of distinct
289       desktops does not need to be specified, but is limited to approximately
290       4 billion total.  All windows on a range of desktops can be viewed in
291       the FvwmPager, a miniature view of the desktops.  The pager is an
292       accessory program, called a module, which is not essential for the
293       window manager to operate.  Windows may also be listed using the
294       WindowList command or the FvwmIconMan module.
295
296       Fvwm keeps the windows on the desktop in a layered stacking order; a
297       window in a lower layer never obscures a window in a higher layer.  The
298       layer of a window can be changed by using the Layer command.  The
299       concept of layers is a generalization of the StaysOnTop flag of older
300       fvwm versions.  The StaysOnTop and StaysPut Style options are now
301       implemented by putting the windows in suitable layers and the
302       previously missing StaysOnBottom Style option has been added.
303
304       Sticky windows are windows which transcend the virtual desktop by
305       "Sticking to the screen's glass".  They always stay put on the screen.
306       This is convenient for things like clocks and xbiffs, so you only need
307       to run one such gadget and it always stays with you.  Icons can also be
308       made to stick to the glass, if desired.
309
310       Window geometries are specified relative to the current viewport.  That
311       is:
312
313           xterm -geometry +0+0
314
315       creates a window in the upper left hand corner of the visible portion
316       of the screen.  It is permissible to specify geometries which place
317       windows on the virtual desktop, but off the screen.  For example, if
318       the visible screen is 1000 by 1000 pixels, and the desktop size is 3x3,
319       and the current viewport is at the upper left hand corner of the
320       desktop, invoking:
321
322           xterm -geometry +1000+1000
323
324       places a window just off of the lower right hand corner of the screen.
325       It can be found by moving the mouse to the lower right hand corner of
326       the screen and waiting for it to scroll into view.  A geometry
327       specified as something like:
328
329           xterm -geometry -5-5
330
331       places the window's lower right hand corner 5 pixels from the lower
332       right corner of the visible portion of the screen.  Not all
333       applications support window geometries with negative offsets.  Some
334       applications place the window's upper right hand corner 5 pixels above
335       and to the left of the upper left hand corner of the screen; others may
336       do just plain bizarre things.
337
338       There are several ways to cause a window to map onto a desktop or page
339       other than the currently active one.  The geometry technique mentioned
340       above (specifying x,y coordinates larger than the physical screen
341       size), however, suffers from the limitation of being interpreted
342       relative to the current viewport: the window may not consistently
343       appear on a specific page, unless you always invoke the application
344       from the same page.
345
346       A better way to place windows on a different page, screen or desk from
347       the currently mapped viewport is to use the StartsOnPage or
348       StartsOnScreen style specification (the successors to the older
349       StartsOnDesk style) in your config file.  The placement is consistent:
350       it does not depend on your current location on the virtual desktop.
351
352       Some applications that understand standard Xt command line arguments
353       and X resources, like xterm and xfontsel, allow the user to specify the
354       start-up desk or page on the command line:
355
356           xterm -xrm "*Desk:1"
357
358       starts an xterm on desk number 1;
359
360           xterm -xrm "*Page:3 2 1"
361
362       starts an xterm two pages to the right and one down from the upper left
363       hand page of desk number 3.  Not all applications understand the use of
364       these options, however.  You could achieve the same results with the
365       following lines in your .Xdefaults file:
366
367           XTerm*Desk: 1
368
369       or
370
371           XTerm*Page: 3 2 1
372

USE ON MULTI-SCREEN DISPLAYS

374       If the -s command line argument is not given, fvwm automatically starts
375       up on every screen on the specified display.  After fvwm starts each
376       screen is treated independently.  Restarts of fvwm need to be performed
377       separately on each screen.  The use of
378
379           EdgeScroll 0 0
380
381       is strongly recommended for multi-screen displays.  You may need to
382       quit on each screen to quit from the X session completely.  This is not
383       to be confused with Xinerama support.
384

XINERAMA SUPPORT

386       Fvwm supports the Xinerama extension of newer X servers which is
387       similar to multi head support (multiple screens) but allows one to move
388       windows between screens.  If Xinerama support has been compiled into
389       fvwm, it is used whenever fvwm runs on an X server that supports and
390       uses multiple screens via Xinerama.  Without this option, the whole
391       desktop is treated as one big screen.  For example, menus might pop up
392       right between two screens.  The EdgeResistance option of the Style
393       command command allows for specifying an explicit resistance value for
394       moving windows over the screen edge between two Xinerama screens.
395       Xinerama support can be enabled or disabled on the fly or from the
396       configuration file with the Xinerama command.  Many modules and
397       commands work nicely with Xinerama displays.
398
399       Whenever a geometry in the usual X format can be supplied, fvwm's
400       Xinerama extension allows for specifying a screen in addition to the
401       geometry (or even the screen alone).  To do this, a '@' is added to the
402       end of the geometry string followed by either the screen number or a
403       letter.  A number is taken as the number of the Xinerama screen to be
404       used (as configured in the X server).  The letter can be one of 'g' for
405       the global screen (the rectangle that encloses all Xinerama screens),
406       'p' for the primary screen (see below), 'c' for the current screen (the
407       one that currently contains the pointer).  If the X server does not
408       support Xinerama or only one screen is used, the screen bit is ignored.
409
410           Style * IconBox 64x300-0-0@p
411
412       Xinerama support can be configured to use a primary screen.  Fvwm can
413       be configured to place new windows and icons on this screen.  The
414       primary screen is screen 0 by default but can be changed with the
415       XineramaPrimaryScreen command.
416
417       Xinerama support was designed to work out of the box with the same
418       configuration file that would work on a single screen.  It may not
419       perform very well if the involved screens use different screen
420       resolutions.  In this situation, windows may get stuck in the portion
421       of the whole desktop that belongs to neither screen.  When this
422       happens, the windows or icons can be retrieved with the command
423
424           All MoveToScreen
425
426       that can be entered in an FvwmConsole window or with FvwmCommand.
427
428       For multi-screen implementations other than Xinerama, such as Single
429       Logical Screen, it is possible to simulate a Xinerama configuration if
430       the total screen seen by fvwm is made up of equal sized monitors in a
431       rectangular grid.  The commands XineramaSls, XineramaSlsSize and
432       XineramaSlsScreens are used to configure this feature.
433

INITIALIZATION

435       During initialization, fvwm searches for a configuration file which
436       describes key and button bindings, and many other things.  The format
437       of these files is described later.  Fvwm first searches for
438       configuration files using the command
439
440           Read config
441
442       This looks for file config in $FVWM_USERDIR and $FVWM_DATADIR
443       directories, as described in Read.  If this fails more files are
444       queried for backward compatibility.  Here is the complete list of all
445       file locations queried in the default installation (only the first
446       found file is used):
447
448           $HOME/.fvwm/config
449           /usr/local/share/fvwm/config
450
451           $HOME/.fvwm/.fvwm2rc
452           $HOME/.fvwm2rc
453           /usr/local/share/fvwm/.fvwm2rc
454           /usr/local/share/fvwm/system.fvwm2rc
455           /etc/system.fvwm2rc
456
457       Please note, the last 5 locations are not guaranteed to be supported in
458       the future.
459
460       If a configuration file is not found, the left mouse button, or Help or
461       F1 keys on the root window bring up menus and forms that can create a
462       starting configuration file.
463
464       Fvwm sets two environment variables which are inherited by its
465       children.  These are $DISPLAY which describes the display on which fvwm
466       is running.  $DISPLAY may be unix:0.0 or :0.0, which doesn't work too
467       well when passed through ssh to another machine, so $HOSTDISPLAY is set
468       to a network-ready description of the display.  $HOSTDISPLAY always
469       uses the TCP/IP transport protocol (even for a local connection) so
470       $DISPLAY should be used for local connections, as it may use
471       Unix-domain sockets, which are faster.
472
473       If you want to start some applications or modules with fvwm, you can
474       simply put
475
476           Exec app
477
478       or
479
480           Module FvwmXxx
481
482       into your config, but it is not recommended; do this only if you know
483       what you are doing.  It is usually important to start applications or
484       modules after the entire config is read, because it contains styles or
485       module configurations which can affect window appearance and
486       functionality.
487
488       The standard way to start applications or modules on fvwm's start up is
489       to add them to an initialization function (usually StartFunction or
490       InitFunction).  This way they are only started after fvwm finishes to
491       read and execute config file.
492
493       Fvwm has three special functions for initialization: StartFunction,
494       which is executed on startups and restarts; InitFunction and
495       RestartFunction, which are executed during initialization and restarts
496       (respectively) just after StartFunction.  These functions may be
497       customized in a user's config file using the AddToFunc command
498       (described later) to start up modules, xterms, or whatever you'd like
499       to have started by fvwm.
500
501       Fvwm has also a special exit function: ExitFunction, executed when
502       exiting or restarting before actually quitting.  It could be used to
503       explicitly kill modules, etc.
504
505       If fvwm is run under a session manager, functions SessionInitFunction
506       and SessionRestartFunction are executed instead of InitFunction and
507       RestartFunction.  This helps to define the user's config file to be
508       good for both running under a session manager and without it.
509       Generally it is a bad idea to start xterms or other applications in
510       "Session*" functions.  Also someone can decide to start different
511       modules while running under a session manager or not.  For the similar
512       purposes SessionExitFunction is used instead of ExitFunction.
513
514           DestroyFunc StartFunction
515           AddToFunc StartFunction
516            + I Module FvwmPager * *
517            + I Module FvwmButtons
518
519           DestroyFunc InitFunction
520           AddToFunc InitFunction
521            + I Module FvwmBanner
522            + I Module FvwmIconMan
523            + I Exec xsetroot -solid cyan
524            + I Exec xterm
525            + I Exec netscape
526
527           DestroyFunc RestartFunction
528           AddToFunc RestartFunction
529            + I Module FvwmIconMan
530
531           DestroyFunc SessionInitFunction
532           AddToFunc SessionInitFunction
533            + I Module FvwmBanner
534
535           DestroyFunc SessionRestartFunction
536           AddToFunc SessionRestartFunction
537            + I Nop
538
539       You do not need to define all special functions if some are empty.
540       Also note, all these special functions may be emulated now using
541       StartFunction and ExitFunction, like this:
542
543           DestroyFunc StartFunction
544           AddToFunc StartFunction
545           + I Test (Init) Module FvwmBanner
546           + I Module FvwmPager * *
547           + I Test (Restart) Beep
548
549           DestroyFunc ExitFunction
550           AddToFunc ExitFunction
551           + I Test (Quit) Echo Bye-bye
552           + I KillModule MyBuggyModule
553           + I Test (ToRestart) Beep
554

COMPILATION OPTIONS

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

ICONS AND IMAGES

562       Fvwm can load .xbm, .xpm, .png and .svg images.  XBM images are
563       monochrome.  Fvwm can always display XBM files.  XPM and PNG formats
564       are color images.  SVG is a vector graphics image format.  Compile-time
565       options determine whether fvwm can display XPM, PNG or SVG icons and
566       images.  See the INSTALL.fvwm file for more information.
567
568       The related SHAPE compile-time option can make fvwm display spiffy
569       shaped icons.
570
571   SVG rendering options
572       SVG images are generated from (XML) text files.  A really simple SVG
573       file might look something like this:
574
575           <svg width="120" height="80">
576                <rect fill="red"     width="40" height="40"  x="0"   y="0"  />
577                <rect fill="lime"    width="40" height="40"  x="40"  y="0"  />
578                <rect fill="blue"    width="40" height="40"  x="80"  y="0"  />
579                <rect fill="cyan"    width="40" height="40"  x="0"   y="40" />
580                <rect fill="magenta" width="40" height="40"  x="40"  y="40" />
581                <rect fill="yellow"  width="40" height="40"  x="80"  y="40" />
582           </svg>
583
584       By default, SVG images are rendered as the image creator intended them
585       to.  But since SVG is a vector graphics format, the images can be
586       rendered at any chosen size and rotation, e.g. making it possible to
587       use the same icon file rendered at different sizes for the Icon and
588       MiniIcon styles.
589
590       The rendering options are specified as a string appended to the SVG
591       filename as follows:
592
593       image.svg:[!] [(1) size] [(2) position] [(3) rotation] [(4) scale] ...
594
595       (1) [-]width{x}[-]height
596       (2) {- | +}xpos{- | +}ypos
597       (3) @[-]angle
598       (4) {* | /}[-]factor[x | y]
599
600       The option string always starts with a colon (':') to separate it from
601       the filename.  An empty option string can skip this colon, but it might
602       still be a good idea to include it to prevent ambiguity if the filename
603       contains any colon.
604
605           filename_without_colon.svg
606           filename:with:colon.svg:
607
608       An exclamation point ('!') transposes the entire final image (including
609       the rendering area), i.e. all the horizontal and all the vertical
610       coordinates are swapped with each other.
611
612           image.svg:!
613
614       width and height specifies the dimensions of the rendering area in
615       pixels, i.e. the dimensions of the resulting image.  The actual image
616       is fitted to fill the entire rendering area.
617
618           image.svg:60x60
619
620       Use a width or height value of 0 to keep the aspect ratio.
621
622           image.svg:0x60
623           image.svg:60x0
624
625       A '-' before width mirrors the rendering area horizontally.
626
627           image.svg:-0x0
628
629       A '-' before height mirrors the rendering area vertically.
630
631           image.svg:0x-0
632
633       xpos and ypos specifies a translation of the image in pixels.  A
634       positive xpos value moves the image to the right.  A positive ypos
635       value moves it down.  Moving it partially outside of the rendering area
636       results in a cropped image.
637
638           image.svg:-30-0
639           image.svg:-0+10
640           image.svg:-30+10
641
642       angle specifies a rotation around the actual image center in degrees.
643       This might result in a cropped image.  A positive value rotates the
644       image clockwise.  Floating point values are recognized.
645
646           image.svg:@180
647           image.svg:@-90
648           image.svg:@30
649           image.svg:@57.3
650
651       factor specifes a scaling of the actual image (not the rendering area).
652       Scaling it up results in a cropped image.  Floating point values are
653       recognized.  Division by zero is ignored.  If factor is directly
654       followed by a 'x' or a 'y', the scaling is horizontal or vertical
655       respectively.  Otherwise the scaling is uniform.
656
657           image.svg:*2
658           image.svg:/2
659           image.svg:/3x
660           image.svg:/2y
661
662       Scaling down a translated or rotated image can prevent cropping.
663
664           image.svg:@30*0.6
665
666       Repeated usage of translation, rotation, and scaling is allowed.
667       Translation and rotation are additive.  Scaling is multiplicative.
668
669           image.svg:*2/3
670           image.svg:/3x/2y
671
672       When combining affine transformations, the scaling is always done
673       first, then the rotation, and finally the translation.
674
675           image.svg:-30+10@30/3x/2y
676
677       Use a negative scale factor to mirror the actual image.
678
679           image.svg:-30+10@30/-3x/2y
680
681       Mirroring of the rendering area is done after any scaling, rotation or
682       translation of the image.
683
684           image.svg:-0x0-30+10@30/3x/2y
685
686       Transposing is done last of all, after everything else.
687
688           image.svg:!-0x0-30+10@30/3x/2y
689

MODULES

691       A module is a separate program which runs as a separate Unix process
692       but transmits commands to fvwm to execute.  Users can write their own
693       modules to do any weird or bizarre manipulations without bloating or
694       affecting the integrity of fvwm itself.
695
696       Modules must be spawned by fvwm so that it can set up two pipes for
697       fvwm and the module to communicate with.  The pipes are already open
698       for the module when it starts and the file descriptors for the pipes
699       are provided as command line arguments.
700
701       Modules can be spawned by fvwm at any time during the X session by use
702       of the Module command.  Modules can exist for the duration of the X
703       session, or can perform a single task and exit.  If the module is still
704       active when fvwm is told to quit, then fvwm closes the communication
705       pipes and waits to receive a SIGCHLD from the module, indicating that
706       it has detected the pipe closure and has exited.  If modules fail to
707       detect the pipe closure fvwm exits after approximately 30 seconds
708       anyway.  The number of simultaneously executing modules is limited by
709       the operating system's maximum number of simultaneously open files,
710       usually between 60 and 256.
711
712       Modules simply transmit commands to the fvwm command engine.  Commands
713       are formatted just as in the case of a mouse binding in the config
714       setup file.  Certain auxiliary information is also transmitted, as in
715       the sample module FvwmButtons.
716
717       Please refer to the Module Commands section for details.
718

ICCCM COMPLIANCE

720       Fvwm attempts to be ICCCM 2.0 compliant.  Check
721       http://tronche.com/gui/x/icccm/ for more info.  In addition, ICCCM
722       states that it should be possible for applications to receive any
723       keystroke, which is not consistent with the keyboard shortcut approach
724       used in fvwm and most other window managers.  In particular you cannot
725       have the same keyboard shortcuts working with your fvwm and another
726       fvwm running within Xnest (a nested X server running in a window).  The
727       same problem exists with mouse bindings.
728
729       The ICCCM states that windows possessing the property
730
731           WM_HINTS(WM_HINTS):
732               Client accepts input or input focus: False
733
734       should not be given the keyboard input focus by the window manager.
735       These windows can take the input focus by themselves, however.  A
736       number of applications set this property, and yet expect the window
737       manager to give them the keyboard focus anyway, so fvwm provides a
738       window style, Lenience, which allows fvwm to overlook this ICCCM rule.
739       Even with this window style it is not guaranteed that the application
740       accepts focus.
741
742       The differences between ICCCM 1.1 and 2.0 include the ability to take
743       over from a running ICCCM 2.0 compliant window manager; thus
744
745           fvwm; vi ~/.fvwm/config; fvwm -replace
746
747       resembles the Restart command.  It is not exactly the same, since
748       killing the previously running wm may terminate your X session, if the
749       wm was started as the last client in your .Xclients or .Xsession file.
750
751       Further additions are support for client-side colormap installation
752       (see the ICCCM for details) and the urgency hint.  Clients can set this
753       hint in the WM_HINTS property of their window and expect the window
754       manager to attract the user's attention to the window.  Fvwm has two
755       re-definable functions for this purpose, "UrgencyFunc" and
756       "UrgencyDoneFunc", which are executed when the flag is set/cleared.
757       Their default definitions are:
758
759           AddToFunc UrgencyFunc
760            + I Iconify off
761            + I FlipFocus
762            + I Raise
763            + I WarpToWindow !raise 5p 5p
764           AddToFunc UrgencyDoneFunc
765            + I Nop
766

GNOME COMPLIANCE

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

EXTENDED WINDOW MANAGER HINTS

773       Fvwm attempts to respect the extended window manager hints (ewmh or
774       EWMH for short) specification:
775       http://www.freedesktop.org/wiki/Standards_2fwm_2dspec and some
776       extensions of this specification.  This allows fvwm to work with KDE
777       version >= 2, GNOME version 2 and other applications which respect this
778       specification (any application based on GTK+ version 2).  Applications
779       which respect this specification are called ewmh compliant
780       applications.
781
782       This support is configurable with styles and commands.  These styles
783       and commands have EWMH as the prefix (so you can find them easily in
784       this man page).
785
786       There is a new Context 'D' for the Key, PointerKey, Mouse and Stroke
787       commands.  This context is for desktop applications (such as kdesktop
788       and Nautilus desktop).
789
790       When a compliant taskbar asks fvwm to activate a window (typically when
791       you click on a button which represents a window in such a taskbar),
792       then fvwm calls the complex function EWMHActivateWindowFunc which by
793       default is Iconify Off, Focus and Raise.  You can redefine this
794       function.  For example:
795
796           DestroyFunc EWMHActivateWindowFunc
797           AddToFunc EWMHActivateWindowFunc I Iconify Off
798           + I Focus
799           + I Raise
800           + I WarpToWindow 50 50
801
802       additionally warps the pointer to the center of the window.
803
804       The EWMH specification introduces the notion of Working Area.  Without
805       ewmh support the Working Area is the full visible screen (or all your
806       screens if you have a multi head setup and you use Xinerama).  However,
807       compliant applications (such as a panel) can ask to reserve space at
808       the edge of the screen.  If this is the case, the Working Area is your
809       full visible screen minus these reserved spaces.  If a panel can be
810       hidden by clicking on a button the Working Area does not change (as you
811       can unhide the panel at any time), but the Dynamic Working Area is
812       updated: the space reserved by the panel is removed (and added again if
813       you pop up the panel).  The Dynamic Working Area may be used when fvwm
814       places or maximizes a window.  To know if an application reserves space
815       you can type "xprop | grep _NET_WM_STRUT" in a terminal and select the
816       application.  If four numbers appear then these numbers define the
817       reserved space as explained in the EwmhBaseStruts command.
818

MWM COMPATIBILITY

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

OPEN LOOK AND XVIEW COMPATIBILITY

825       Fvwm supports all the Open Look decoration hints (except pushpins).
826       Should you use any such application, please add the following line to
827       your config:
828
829           Style * OLDecor
830
831       Most (perhaps all) Open Look applications have a strange notion of
832       keyboard focus handling.  Although a lot of work went into fvwm to work
833       well with these, you may still encounter problems.  It is recommended
834       to use the NeverFocus focus policy and the Lenience style for all such
835       applications (the windows still get the focus):
836
837           Style <application name> NeverFocus, Lenience
838
839       But in case you can not live with that focus policy, you can try using
840       one of the other focus policies in combination with the Lenience style:
841
842           Style <application name> MouseFocus, Lenience
843           Style <application name> SloppyFocus, Lenience
844           Style <application name> ClickToFocus, Lenience
845

M4 PREPROCESSING

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

CPP PREPROCESSING

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

CONFIGURATION

860   Configuration Files
861       The configuration file is used to describe mouse and button bindings,
862       colors, the virtual display size, and related items.  The
863       initialization configuration file is typically called config (or
864       .fvwm2rc).  By using the Read command, it is easy to read in new
865       configuration files as you go.
866
867       Lines beginning with '#' are ignored by fvwm.  Lines starting with '*'
868       are expected to contain module configuration commands (rather than
869       configuration commands for fvwm itself).  Like in shell scripts
870       embedded newlines in a configuration file line can be quoted by
871       preceding them with a backslash.  All lines linked in this fashion are
872       treated as a single line.  The newline itself is ignored.
873
874       Fvwm makes no distinction between configuration commands and action
875       commands, so anything mentioned in the fvwm commands section can be
876       placed on a line by itself for fvwm to execute as it reads the
877       configuration file, or it can be placed as an executable command in a
878       menu or bound to a mouse button or a keyboard key.  It is left as an
879       exercise for the user to decide which function make sense for
880       initialization and which ones make sense for run-time.
881
882   Supplied Configuration
883       A sample configuration file, is supplied with the fvwm distribution.
884       It is well commented and can be used as a source of examples for fvwm
885       configuration.  It may be copied from /usr/local/share/fvwm/config
886       file.
887
888       Alternatively, the built-in menu (accessible when no configuration file
889       is found) has options to create an initial config file for the user.
890

FONTS

892   Font names and font loading
893       The fonts used for the text of a window title, icon titles, menus and
894       geometry window can be specified by using the Font and IconFont Style,
895       the Font MenuStyle and the DefaultFont commands.  Also, all the Modules
896       which use text have configuration command(s) to specify font(s).  All
897       these styles and commands take a font name as an argument.  This
898       section explains what is a font name for fvwm and which fonts fvwm
899       loads.
900
901       First, you can use what we can call a usual font name, for example,
902
903           -adobe-courier-bold-r-normal--10-100-75-75-m-60-ISO8859-1
904           -adobe-courier-bold-r-normal--10-*
905           -*-fixed-medium-o-normal--14-*-ISO8859-15
906
907       That is, you can use an X Logical Font Description (XLFD for short).
908       Then the "first" font which matches the description is loaded and used.
909       This "first" font depends of your font path and also of your locale.
910       Fonts which match the locale charset are loaded in priority order.  For
911       example with
912
913           -adobe-courier-bold-r-normal--10-*
914
915       if the locale charset is ISO8859-1, then fvwm tries to load a font
916       which matches
917
918           -adobe-courier-bold-r-normal--10-*-ISO8859-1
919
920       with the locale charset ISO8859-15 fvwm tries to load
921
922           -adobe-courier-bold-r-normal--10-*-ISO8859-15.
923
924       A font name can be given as an extended XLFD.  This is a comma
925       separated list of (simple) XLFD font names, for example:
926
927           -adobe-courier-bold-r-normal--14-*,-*-courier-medium-r-normal--14-*
928
929       Each simple font name is tried until a matching font with the locale
930       charset is found and if this fails each simple font name is tried
931       without constraint on the charset.
932
933       More details on the XLFD can be found in the X manual page, the X
934       Logical Font Description Conventions document (called xlfd) and the
935       XLoadFont and XCreateFontSet manual pages.  Some useful font utilities
936       are: xlsfonts, xfontsel, xfd and xset.
937
938       If you have Xft support you can specify an Xft font name (description)
939       of a true type (or Type1) font prefixed by "xft:", for example:
940
941           "xft:Luxi Mono"
942           "xft:Luxi Mono:Medium:Roman:size=14:encoding=iso8859-1"
943
944       The "first" font which matches the description is loaded.  This first
945       font depends on the XftConfig configuration file with Xft1 and on the
946       /etc/fonts/fonts.conf file with Xft2.  One may read the Xft manual page
947       and the fontconfig man page with Xft2.  The first string which follows
948       "xft:" is always considered as the family.  With the second example
949       Luxi Mono is the Family (Other XFree TTF families: "Luxi Serif", "Luxi
950       Sans"), Medium is the Weight (other possible weights: Light, DemiBold,
951       Bold, Black), Roman is the slant or the style (other possibilities:
952       Regular, Oblique, Italic) size specifies the point size (for a pixel
953       size use pixelsize=), encoding allows for enforce a charset (iso8859-1
954       or iso10646-1 only; if no encoding is given the locale charset is
955       assumed).  An important parameter is "minspace=bool" where bool is True
956       or False.  If bool is False (the default?) Xft gives a greater font
957       height to fvwm than if bool is True.  This may modify text placement,
958       icon and window title height, line spacing in menus and FvwmIdent,
959       button height in some fvwm modules ...etc.  With a LCD monitor you may
960       try to add "rgba=mode" where mode is either rgb, bgr, vrgb or vbgr to
961       enable subpixel rendering.  The best mode depends on the way your LCD
962       cells are arranged.  You can pass other specifications in between ":",
963       as "foundry=foundry_name", "spacing=type" where type can be monospace,
964       proportional or charcell, "charwidth=integer", "charheight=integer" or
965       "antialias=bool" where bool is True or False.  It seems that these
966       parameters are not always taken in account.
967
968       To determine which Xft fonts are really loaded you can export
969       XFT_DEBUG=1 before starting fvwm and take a look to the error log.
970       With Xft2 you may use fc-list to list the available fonts.  Anyway, Xft
971       support is experimental (from the X and the fvwm point of view) and the
972       quality of the rendering depends on number of parameters (the XFree and
973       the freetype versions and your video card(s)).
974
975       After an Xft font name you can add after a ";" an XLFD font name
976       (simple or extended) as:
977
978           xft:Verdana:pixelsize=14;-adobe-courier-bold-r-normal--14-*
979
980       then, if either loading the Xft font fails or fvwm has no Xft support,
981       fvwm loads the font "-adobe-courier-bold-r-normal--14-*".  This allows
982       for writing portable configuration files.
983
984   Font and string encoding
985       Once a font is loaded, fvwm finds its encoding (or charset) using its
986       name (the last two fields of the name).  fvwm assumes that the strings
987       which are displayed with this font use this encoding (an exception is
988       that if an iso10646-1 font is loaded, then UTF-8 is assumed for string
989       encoding).  In a normal situation, (i) a font is loaded by giving a
990       font name without specifying the encoding, (ii) the encoding of the
991       loaded font is the locale encoding, and then (iii) the strings in the
992       fvwm configuration files should use the locale encoding as well as the
993       window and icon name.  With Xft the situation is bit different as Xft
994       supports only iso10646-1 and iso8859-1.  If you do not specify one of
995       these encodings in the Xft font name, then fvwm does strings conversion
996       using (iii).  Note that with multibyte fonts (and in particular with
997       "CJK" fonts) for good text rendering, the locale encoding should be the
998       charset of the font.
999
1000       To override the previous rules, it is possible to specify the string
1001       encoding in the beginning of a font description as follow:
1002
1003           StringEncoding=enc:_full_font_name_
1004
1005       where enc is an encoding supported by fvwm (usually font name charset
1006       plus some unicode encodings: UTF-8, USC-2, USC-4 and UTF-16).
1007
1008       For example, you may use an iso8859-1 locale charset and have an
1009       FvwmForm in Russian using koi8-r encoding.  In this case, you just have
1010       to ask FvwmForm to load a koi8-r font by specifying the encoding in the
1011       font name.  With a multibyte language, (as multibyte font works well
1012       only if the locale encoding is the charset of the font), you should use
1013       an iso10646-1 font:
1014
1015           StringEncoding=jisx0208.1983-0:-*-fixed-medium-r-*-ja-*-iso10646-1
1016
1017       or
1018
1019           "StringEncoding=jisx0208.1983-0:xft:Bitstream Cyberbit"
1020
1021       if your FvwmForm configuration uses jisx0208.1983-0 encoding.  Another
1022       possibility is to use UTF-8 encoding for your FvwmForm configuration
1023       and use an iso10646-1 font:
1024
1025           -*-fixed-medium-r-*-ja-*-iso10646-1
1026
1027       or
1028
1029           "StringEncoding=UTF-8:xft:Bitstream Cyberbit"
1030
1031       or equivalently
1032
1033           "xft:Bitstream Cyberbit:encoding=iso10646-1"
1034
1035       In general iso10646-1 fonts together with UTF-8 string encoding allows
1036       the display of any characters in a given menu, FvwmForm etc.
1037
1038       More and more, unicode is used and text files use UTF-8 encoding.
1039       However, in practice the characters used range over your locale charset
1040       (this is the case when you generate a menu with fvwm-menu-desktop with
1041       recent versions of KDE and GNOME).  For saving memory (an iso10646-1
1042       font may have a very large number of characters) or because you have a
1043       pretty font without an iso10646-1 charset, you can specify the string
1044       encoding to be UTF-8 and use a font in the locale charset:
1045
1046           StringEncoding=UTF-8:-*-pretty_font-*-12-*
1047
1048       In most cases, fvwm correctly determines the encoding of the font.
1049       However, some fonts do not end with valid encoding names.  When the
1050       font name isn't normal, for example:
1051
1052           -misc-fixed-*--20-*-my_utf8-36
1053
1054       you need to add the encoding after the font name using a slash as a
1055       delimiter.  For example:
1056
1057           MenuStyle * Font -misc-fixed-*--20-*-my_utf8-36/iso10646-1
1058
1059       If fvwm finds an encoding, fvwm uses the iconv system functions to do
1060       conversion between encodings.  Unfortunately, there are no standards.
1061       For conversion between iso8859-1 and UTF-8: a GNU system uses
1062       "ISO-8859-1" and other systems use "iso881" to define the converters
1063       (these two names are supported by fvwm).  Moreover, in some cases it
1064       may be necessary to use machine specific converters.  So, if you
1065       experience problems you can try to get information on your iconv
1066       implementation ("man iconv" may help) and put the name which defines
1067       the converter between the font encoding and UTF-8 at the end of the
1068       font name after the encoding hint and a / (another possible solution is
1069       to use GNU libiconv).  For example use:
1070
1071           Style * Font -misc-fixed-*--14-*-iso8859-1/*/latin1
1072
1073       to use latin1 for defining the converter for the iso8859-1 encoding.
1074       The "*" in between the "/" says to fvwm to determine the encoding from
1075       the end of the font name.  Use:
1076
1077           Style * Font \
1078                -misc-fixed-*--14-*-local8859-6/iso8859-6/local_iso8859_6_iconv
1079
1080       to force fvwm to use the font with iso8859-6 as the encoding (this is
1081       useful for bi-directionality) and to use local_iso8859_6_iconv for
1082       defining the converters.
1083
1084   Font Shadow Effects
1085       Fonts can be given 3d effects.  At the beginning of the font name (or
1086       just after a possible StringEncoding specification) add
1087
1088           Shadow=size [offset] [directions]]:
1089
1090       size is a positive integer which specifies the number of pixels of
1091       shadow.  offset is an optional positive integer which defines the
1092       number of pixels to offset the shadow from the edge of the character.
1093       The default offset is zero.  directions is an optional set of
1094       directions the shadow emanates from the character.  The directions are
1095       a space separated list of fvwm directions:
1096
1097       N, North, Top, t, Up, u, -
1098
1099       E, East, Right, r, Right, r, ]
1100
1101       S, South, Bottom, b, Down, d, _
1102
1103       W, West, Left, l, Left, l, [
1104
1105       NE, NorthEast, TopRight, tr, UpRight, ur, ^
1106
1107       SE, SouthEast, BottomRight, br, DownRight, dr, >
1108
1109       SW, SouthWest, BottomLeft, bl, DownLeft, dl, v
1110
1111       NW, NorthWest, TopLeft, tl, UpLeft, ul, <
1112
1113       C, Center, Centre, .
1114
1115       A shadow is displayed in each given direction.  All is equivalent to
1116       all the directions.  The default direction is BottomRight.  With the
1117       Center direction, the shadow surrounds the whole string.  Since this is
1118       a super set of all other directions, it is a waste of time to specify
1119       this along with any other directions.
1120
1121       The shadow effect only works with colorsets.  The color of the shadow
1122       is defined by using the fgsh option of the Colorset command.  Please
1123       refer to the Colorsets section for details about colorsets.
1124
1125       Note: It can be difficult to find the font, fg, fgsh and bg colors to
1126       make this effect look good, but it can look quite good.
1127

BI-DIRECTIONAL TEXT

1129       Arabic and Hebrew text require bi-directional text support to be
1130       displayed correctly, this means that logical strings should be
1131       converted before their visual presentation, so left-to-right and
1132       right-to-left sub-strings are determined and reshuffled.  In fvwm this
1133       is done automatically in window titles, menus, module labels and other
1134       places if the fonts used for displaying the text are of one of the
1135       charsets that require bidi (bi-directional) support.  For example, this
1136       includes iso8859-6, iso8859-8 and iso10646-1 (unicode), but not other
1137       iso8859-* fonts.
1138
1139       This bi-directional text support is done using the fribidi library
1140       compile time option, see INSTALL.fvwm.
1141

KEYBOARD SHORTCUTS

1143       Almost all window manager operations can be performed from the keyboard
1144       so mouse-less operation should be possible.  In addition to scrolling
1145       around the virtual desktop by binding the Scroll command to appropriate
1146       keys, Popup, Move, Resize, and any other command can be bound to keys.
1147       Once a command is started the pointer is moved by using the up, down,
1148       left, and right arrows, and the action is terminated by pressing
1149       return.  Holding down the Shift key causes the pointer movement to go
1150       in larger steps and holding down the control key causes the pointer
1151       movement to go in smaller steps.  Standard emacs and vi cursor movement
1152       controls ( n , p , f , b , and j , k , h , l ) can be used instead of
1153       the arrow keys.
1154

SESSION MANAGEMENT

1156       Fvwm supports session management according to the X Session Management
1157       Protocol.  It saves and restores window position, size, stacking order,
1158       desk, stickiness, shadiness, maximizedness, iconifiedness for all
1159       windows.  Furthermore, some global state is saved.
1160
1161       Fvwm doesn't save any information regarding styles, decors, functions
1162       or menus.  If you change any of these resources during a session (e.g.
1163       by issuing Style commands or by using various modules), these changes
1164       are lost after saving and restarting the session.  To become permanent,
1165       such changes have to be added to the configuration file.
1166
1167       Note further that the current implementation has the following anomaly
1168       when used on a multi-screen display: Starting fvwm for the first time,
1169       fvwm manages all screens by forking a copy of itself for each screen.
1170       Every copy knows its parent and issuing a Quit command to any instance
1171       of fvwm kills the master and thus all copies of fvwm.  When you save
1172       and restart the session, the session manager brings up a copy of fvwm
1173       on each screen, but this time they are started as individual instances
1174       managing one screen only.  Thus a Quit kills only the copy it was sent
1175       to.  This is probably not a very serious problem, since with session
1176       management, you are supposed to quit a session through the session
1177       manager anyway.  If it is really needed,
1178
1179           Exec exec killall fvwm
1180
1181       still kills all copies of fvwm.  Your system must have the killall
1182       command though.
1183

BOOLEAN ARGUMENTS

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

BUILTIN KEY AND MOUSE BINDINGS

1192       The following commands are built-in to fvwm:
1193
1194           Key Help R A Popup MenuFvwmRoot
1195           Key F1 R A Popup MenuFvwmRoot
1196           Key Tab A M WindowList Root c c NoDeskSort
1197           Key Escape A MC EscapeFunc
1198           Mouse 1 R A Menu MenuFvwmRoot
1199           Mouse 1 T   A FuncFvwmRaiseLowerX Move
1200           Mouse 1 FS  A FuncFvwmRaiseLowerX Resize
1201           Mouse 2 FST A FuncFvwmRaiseLowerX Move
1202           AddToFunc FuncFvwmRaiseLowerX
1203           + I Raise
1204           + M $0
1205           + D Lower
1206
1207       The Help and F1 keys invoke a built-in menu that fvwm creates.  This is
1208       primarily for new users that have not created their own configuration
1209       file.  Either key on the root (background) window pops up an menu to
1210       help you get started.
1211
1212       The Tab key pressed anywhere with the Meta key (same as the Alt key on
1213       PC keyboards) held down pop-ups a window list.
1214
1215       Mouse button 1 on the title-bar or side frame can move, raise or lower
1216       a window.
1217
1218       Mouse button 1 on the window corners can resize, raise or lower a
1219       window.
1220
1221       You can override or remove these bindings.  To remove the window list
1222       binding, use this:
1223
1224           Key Tab A M -
1225

COMMAND EXECUTION

1227   Module and Function Commands
1228       If fvwm encounters a command that it doesn't recognize, it checks to
1229       see if the specified command should have been
1230
1231           Function (rest of command)
1232
1233       or
1234
1235           Module (rest of command)
1236
1237       This allows complex functions or modules to be invoked in a manner
1238       which is fairly transparent to the configuration file.
1239
1240       Example: the config file contains the line
1241
1242           HelpMe
1243
1244       Fvwm looks for an fvwm command called "HelpMe", and fails.  Next it
1245       looks for a user-defined complex function called "HelpMe".  If no such
1246       function exists, fvwm tries to execute a module called "HelpMe".
1247
1248   Delayed Execution of Commands
1249       Note: There are many commands that affect look and feel of specific,
1250       some or all windows, like Style, Mouse, Colorset, TitleStyle and many
1251       others.  For performance reasons such changes are not applied
1252       immediately but only when fvwm is idle, i.e. no user interaction or
1253       module input is pending.  Specifically, new Style options that are set
1254       in a function are not applied until after the function has completed.
1255       This can sometimes lead to unwanted effects.
1256
1257       To force that all pending changes are applied immediately, use the
1258       UpdateStyles, Refresh or RefreshWindow commands.
1259

QUOTING

1261       Quotes are required only when needed to make fvwm consider two or more
1262       words to be a single argument.  Unnecessary quoting is allowed.  If you
1263       want a quote character in your text, you must escape it by using the
1264       backslash character.  For example, if you have a pop-up menu called
1265       "Window-Ops", then you do not need quotes:
1266
1267           Popup Window-Ops
1268
1269       but if you replace the dash with a space, then you need quotes:
1270
1271           Popup "Window Ops"
1272
1273       The supported quoting characters are double quotes, single quotes and
1274       reverse single quotes.  All three kinds of quotes are treated in the
1275       same way.  Single characters can be quoted with a preceding backslash.
1276       Quoting single characters works even inside other kinds of quotes.
1277

COMMAND EXPANSION

1279       Whenever an fvwm command line is executed, fvwm performs parameter
1280       expansion.  A parameter is a '$' followed by a word enclosed in
1281       brackets ($[...]) or a single special character.  If fvwm encounters an
1282       unquoted parameter on the command line it expands it to a string
1283       indicated by the parameter name.  Unknown parameters are left
1284       untouched.  Parameter expansion is performed before quoting.  To get a
1285       literal '$' use "$$".
1286
1287       If a command is prefixed with a '-' parameter expansion isn't
1288       performed.  This applies to the command immediately following the '-',
1289       in which the expansion normally would have taken place.  When uesed
1290       together with other prefix commands it must be added before the other
1291       prefix.
1292
1293       Example:
1294
1295           Pick -Exec exec xmessage '$[w.name]'
1296
1297       opens an xmessage dialog with "$[w.name]" unexpanded.
1298
1299       The longer variables may contain additional variables inside the name,
1300       which are expanded before the outer variable.
1301
1302       In earlier versions of fvwm, some single letter variables were
1303       supported.  It is deprecated now, since they cause a number of
1304       problems.  You should use the longer substitutes instead.
1305
1306       Example:
1307
1308           # Print the current desk number, horizontal page number
1309           # and the window's class (unexpanded here, no window).
1310           Echo $[desk.n] $[page.nx] $[w.class]
1311
1312       Note: If the command is called outside a window context, it prints
1313       "$[w.class]" instead of the class name.  It is usually not enough to
1314       have the pointer over a window to have a context window.  To force
1315       using the window with the focus, the Current command can be used:
1316
1317           Current Echo $[desk.n] $[page.nx] $[w.class]
1318
1319       The parameters known by fvwm are:
1320
1321       $$
1322           A literal '$'.
1323
1324       $.
1325           The absolute directory of the currently Read file.  Intended for
1326           creating relative and relocatable configuration trees.  If used
1327           outside of any read file, the returned value is '.'.
1328
1329       $0 to $9
1330           The positional parameters given to a complex function (a function
1331           that has been defined with the AddToFunc command).  "$0" is
1332           replaced with the first parameter, "$1" with the second parameter
1333           and so on.  If the corresponding parameter is undefined, the "$..."
1334           is deleted from the command line.
1335
1336       $*
1337           All positional parameters given to a complex function.  This
1338           includes parameters that follow after "$9".
1339
1340       $[n]
1341           The n:th positional parameter given to a complex function, counting
1342           from 0.  If the corresponding parameter is undefined, the "$[n]" is
1343           deleted from the command line.  The parameter is expanded unquoted.
1344
1345       $[n-m]
1346           The positional parameters given to a complex function, starting
1347           with parameter n and ending with parameter m.  If all the
1348           corresponding parameters are undefined, the "$[...]" is deleted
1349           from the command line.  If only some of the parameters are defined,
1350           all defined parameters are expanded, and the remaining silently
1351           ignored.  All parameters are expanded unquoted.
1352
1353       $[n-]
1354           All the positional parameters given to a complex function, starting
1355           with parameter n.  If all the corresponding parameters are
1356           undefined, the "$[...]" is deleted from the command line.  All
1357           parameters are expanded unquoted.
1358
1359       $[*]
1360           All the positional parameters given to a complex function.  This is
1361           equivalent of $[0-].
1362
1363       $[version.num]
1364           The version number, like "2.6.0".
1365
1366       $[version.info]
1367           The version info, like " (from cvs)", empty for the official
1368           releases.
1369
1370       $[version.line]
1371           The first line printed by the --version command line option.
1372
1373       $[vp.x] $[vp.y] $[vp.width] $[vp.height]
1374           Either coordinate or the width or height of the current viewport.
1375
1376       $[wa.x] $[wa.y] $[wa.width] $[wa.height]
1377           Either coordinate or the width or height of the EWMH working area.
1378
1379       $[dwa.x] $[dwa.y] $[dwa.width] $[dwa.height]
1380           Either coordinate or the width or height of the dynamic EWMH
1381           working area.
1382
1383       $[desk.n]
1384           The current desk number.
1385
1386       $[desk.name<n>]
1387           These parameters are replaced with the name of the desktop number
1388           <n> that is defined with the DesktopName command.  If no name is
1389           defined, then the default name is returned.
1390
1391       $[desk.width] $[desk.height]
1392           The width or height of the whole desktop, i.e. the width or height
1393           multiplied by the number of pages in x or y direction.
1394
1395       $[desk.pagesx] $[desk.pagesy]
1396           The number of total pages in a desk in x or y direction.  This is
1397           the same as the values set by DesktopSize.
1398
1399       $[page.nx] $[page.ny]
1400           The current page numbers, by X and Y axes, starting from 0.  page
1401           is equivalent to area in the GNOME terminology.
1402
1403       $[w.id]
1404           The window-id (expressed in hex, e.g. 0x10023c) of the window the
1405           command was called for or "$[w.id]" if no window is associated with
1406           the command.
1407
1408       $[w.name] $[w.iconname] $[w.class] $[w.resource] $[w.visiblename]
1409       $[w.iconfile] $[w.miniiconfile] $[w.iconfile.svgopts]
1410       $[w.miniiconfile.svgopts]
1411           The window's name, icon name, resource class and resource name,
1412           visible name, file name of its icon or mini icon defined with the
1413           Icon or MiniIcon style (including the full path if the file was
1414           found on disk), and (if fvwm is compiled with SVG support) the icon
1415           or mini icon svg rendering options (including the leading colon),
1416           or unexpanded "$[w.<attribute>]" string if no window is associated
1417           with the command.
1418
1419           Note, the first 5 variables may include any kind of characters, so
1420           these variables are quoted.  It means that the value is surrounded
1421           by single quote characters and any contained single quote is
1422           prefixed with a backslash.  This guarantees that commands like:
1423
1424               Style $[w.resource] Icon norm/network.png
1425
1426           work correctly, regardless of any special symbols the value may
1427           contain, like spaces and different kinds of quotes.
1428
1429           In the case of the window's visible name, this is the value
1430           returned from the literal title of the window shown in the
1431           titlebar.  Typically this will be the same as $[w.name] once
1432           expanded, although in the case of using IndexedWindowName then this
1433           is more useful a distinction, and allows for referencing the
1434           specific window by its visible name for inclusion in things like
1435           Style commands.
1436
1437       $[w.x] $[w.y] $[w.width] $[w.height]
1438           Either coordinate or the width or height of the current window if
1439           it is not iconified.  If no window is associated with the command
1440           or the window is iconified, the string is left as is.
1441
1442       $[w.desk]
1443           The number of the desk on which the window is shown.  If the window
1444           is sticky the current desk number is used.
1445
1446       $[w.layer]
1447           The layer of the window.
1448
1449       $[w.screen]
1450           The screen number the window is on.  If Xinerama is not present,
1451           this returns the number 0.
1452
1453       $[cw.x] $[cw.y] $[cw.width] $[cw.height]
1454           These work like $[w....] but return the geometry of the client part
1455           of the window.  In other words: the border and title of the window
1456           is not taken into account.
1457
1458       $[i.x], $[it.x], $[ip.x] $[i.y], $[it.y], $[ip.y] $[i.width],
1459       $[it.width], $[ip.width] $[i.height], $[it.height], $[ip.height]
1460           These work like $[w....] but return the geometry of the icon
1461           ($[i....]), the icon title ($[it....]) or the icon picture
1462           ($[ip....]).
1463
1464       $[pointer.x] $[pointer.y]
1465           These return the position of the pointer on the screen.  If the
1466           pointer is not on the screen, these variables are not expanded.
1467
1468       $[pointer.wx] $[pointer.wy]
1469           These return the position of the pointer in the selected window.
1470           If the pointer is not on the screen, the window is iconified or no
1471           window is selected, these variables are not expanded.
1472
1473       $[pointer.cx] $[pointer.cy]
1474           These return the position of the pointer in the client portion of
1475           the selected window.  If the pointer is not on the screen, the
1476           window is shaded or iconified or no window is selected, these
1477           variables are not expanded.
1478
1479       $[pointer.screen]
1480           The screen number the pointer is currently on.  Returns 0 if
1481           Xinerama is not enabled.
1482
1483       $[screen]
1484           The screen number fvwm is running on.  Useful for setups with
1485           multiple screens.
1486
1487       $[fg.cs<n>] $[bg.cs<n>] $[hilight.cs<n>] $[shadow.cs<n>]
1488           These parameters are replaced with the name of the foreground (fg),
1489           background (bg), hilight (hilight) or shadow (shadow) color that is
1490           defined in colorset <n> (replace <n> with zero or a positive
1491           integer).  For example "$[fg.cs3]" is expanded to the name of the
1492           foreground color of colorset 3 (in rgb:rrrr/gggg/bbbb form).
1493           Please refer to the Colorsets section for details about colorsets.
1494
1495       $[schedule.last]
1496           This is replaced by the id of the last command that was scheduled
1497           with the Schedule command, even if this command was already
1498           executed.
1499
1500       $[schedule.next]
1501           This is replaced by the id the next command used with Schedule will
1502           get (unless a different id is specified explicitly).
1503
1504       $[cond.rc]
1505           The return code of the last conditional command.  This variable is
1506           only valid inside a function and can not be used in a conditional
1507           command.  Please refer to the section Conditional Commands in the
1508           command list.
1509
1510       $[func.context]
1511           The context character of the running command as used in the Mouse,
1512           Key or PointerKey command.  This is useful for example with:
1513
1514               Mouse 3 FS N WindowShade $$[func.context]
1515
1516
1517       $[gt.str]
1518           return the translation of str by looking in the current locale
1519           catalogs.  If no translation is found str is returned as is.  See
1520           the LocalePath command.
1521
1522       $[infostore.key]
1523           Return the value of the item stored in the InfoStore at the given
1524           key.  If no key is present, the unexpanded string is returned.
1525
1526       $[...]
1527           If the string within the braces is neither of the above, fvwm tries
1528           to find an environment variable with this name and replaces its
1529           value if one is found (e.g. "$[PAGER]" could be replaced by
1530           "more").  Otherwise the string is left as is.
1531
1532       Some examples can be found in the description of the AddToFunc command.
1533

SCRIPTING & COMPLEX FUNCTIONS

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

LIST OF FVWM COMMANDS

1551       The command descriptions below are grouped together in the following
1552       sections.  The sections are hopefully sorted in order of usefulness to
1553       the newcomer.
1554
1555       ·   Menu commands
1556
1557
1558       ·   Miscellaneous commands
1559
1560
1561       ·   Commands affecting window movement and placement
1562
1563
1564       ·   Commands for focus and mouse movement
1565
1566
1567       ·   Commands controlling window state
1568
1569
1570       ·   Commands for mouse, key and stroke bindings
1571
1572
1573       ·   The Style command (controlling window styles)
1574
1575
1576       ·   Other commands controlling window styles
1577
1578
1579       ·   Commands controlling the virtual desktop
1580
1581
1582       ·   Commands for user functions and shell commands
1583
1584
1585       ·   Conditional commands
1586
1587
1588       ·   Module commands
1589
1590
1591       ·   Quit, restart and session management commands
1592
1593
1594       ·   Colorsets
1595
1596
1597       ·   Color gradients
1598
1599
1600   Menus
1601       Before a menu can be opened, it has to be populated with menu items
1602       using the AddToMenu command and bound to a key or mouse button with the
1603       Key, PointerKey or Mouse command (there are many other ways to invoke a
1604       menu too).  This is usually done in the configuration file.
1605
1606       Fvwm menus are extremely configurable in look and feel.  Even the
1607       slightest nuances can be changed to the user's liking, including the
1608       menu item fonts, the background, delays before popping up sub menus,
1609       generating menus dynamically and many other features.  Please refer to
1610       the MenuStyle command to learn more.
1611
1612       Types of Menus
1613              In fvwm there are four slightly different types of menus:
1614
1615              Popup menus can appear everywhere on the screen on their own or
1616              attached to a part of a window.  The Popup command opens popup
1617              menus.  If the popup menu was invoked with a mouse button held
1618              down, it is closed when the button is released.  The item under
1619              the pointer is then activated and the associated action is
1620              executed.
1621
1622              Menu is a very similar command, but the menus it opens are
1623              slightly less transient.  When invoked by clicking a mouse
1624              button, it stays open and can be navigated with no button held.
1625              But if it is invoked by a button press followed by mouse motion,
1626              it behaves exactly like a popup menu.
1627
1628              Tear off menus or Pin up menus are menus from either of the
1629              above two commands that have been "torn off" their original
1630              context and pinned on the desktop like a normal window.  They
1631              are created from other menus by certain key presses or mouse
1632              sequences or with the TearMenuOff command from inside a menu.
1633
1634              Sub menus are menus inside menus.  When a menu item that has the
1635              Popup command as its action is selected, the named menu is
1636              opened as an inferior menu to the parent.  Any type of menu can
1637              have sub menus.
1638
1639       Menu Anatomy
1640              Menus consist of any number of titles which are inactive menu
1641              items that usually appear at the top of the menu, normal items
1642              triggering various actions when selected, separator lines
1643              between the items, tear off bars (a horizontal broken line) that
1644              tear off the menu when selected, and sub menu items indicated
1645              with a triangle pointing left or right, depending on the
1646              direction in which the sub menu appears.  All the above menu
1647              items are optional.
1648
1649              Additionally, if the menu is too long to fit on the screen, the
1650              excess menu items are put in a continuation menu and a sub menu
1651              with the string "More..." is placed at the bottom of the menu.
1652              The "More..." string honors the locale settings.
1653
1654              Finally, there may be a picture running up either side of the
1655              menu (a "side bar").
1656
1657       Menu Navigation
1658              Menus can be navigated either with the keyboard or with the
1659              mouse.  Many people prefer to use the mouse, but it can be
1660              rather tedious.  Once you get the hang of it, keyboard
1661              navigation can be much faster.  While fvwm displays a menu, it
1662              can do nothing else.  For example, new windows do not appear
1663              before the menu is closed.  However, this is not exactly true
1664              for tear off menus.  See the Tear Off Menus section for details.
1665
1666       Mouse Navigation
1667              Moving the pointer over a menu selects the item below it.
1668              Normally this is indicated by a 3d border around the item, but
1669              not all parts of a menu can be selected.  Pressing any mouse
1670              button while a menu is open by default activates the item below
1671              it.  Items of a popup menu are also activated by releasing a
1672              held mouse button.  In case of an item that hides a sub menu,
1673              the sub menu is displayed if the pointer hovers over the item
1674              long enough or moves close to the triangle indicating the sub
1675              menu.  This behaviour can be tuned with menu styles.
1676
1677              Scrolling a mouse wheel over a menu either wraps the pointer
1678              along the menu (default), scrolls the menu under the pointer or
1679              act as if the menu was clicked depending on the MouseWheel menu
1680              style.
1681
1682              Clicking on a selected item activates it - what happens exactly
1683              depends on the type of the item.
1684
1685              Clicking on a title, a separator, the side bar, or outside the
1686              menu closes the menu (exception: tear off menus can not be
1687              closed this way).  Pressing mouse button 2 over a menu title or
1688              activating a tear off bar creates a tear off menu from the
1689              current menu.  Clicking on a normal menu item invokes the
1690              command that is bound to it, and clicking on a sub menu item
1691              either closes all open menus and replaces them with the sub menu
1692              or posts the menu (default).
1693
1694              Posting menus is meant to ease mouse navigation.  Once a sub
1695              menu is posted, only items from that sub menu can be selected.
1696              This can be very useful to navigate the menu if the pointer
1697              tends to stray off the menu.  To unpost the menu and revert back
1698              to normal operation, either click on the same sub menu item or
1699              press any key.
1700
1701       Keyboard Navigation
1702              Just like with mouse navigation, the item below the pointer is
1703              selected.  This is achieved by warping the pointer to the menu
1704              items when necessary.  While a menu is open, all key presses are
1705              intercepted by the menu.  No other application can get keyboard
1706              input (although this is not the case for tear off menus).
1707
1708              Items can be selected directly by pressing a hotkey that can be
1709              configured individually for each menu item.  The hotkey is
1710              indicated by underlining it in the menu item label.  With the
1711              AutomaticHotkeys menu style fvwm automatically assigns hotkeys
1712              to all menu items.
1713
1714              The most basic keys to navigate through menus are the cursor
1715              keys (move up or down one item, enter or leave a sub menu),
1716              Space (activate item) and Escape (close menu).  Numerous other
1717              keys can be used to navigate through menus by default:
1718
1719              Enter, Return, Space activate the current item.
1720
1721              Escape, Delete, Ctrl-G exit the current sequence of menus or
1722              destroy a tear off menu.
1723
1724              J, N, Cursor-Down, Tab, Meta-Tab, Ctrl-F, move to the next item.
1725
1726              K, P, Cursor-Up, Shift-Tab, Shift-Meta-Tab, Ctrl-B, move to the
1727              prior item.
1728
1729              L, Cursor-Right, F enter a sub menu.
1730
1731              H, Cursor-Left, B return to the prior menu.
1732
1733              Ctrl-Cursor-Up, Ctrl-K Ctrl-P, Shift-Ctrl-Meta-Tab, Page-Up move
1734              up five items.
1735
1736              Ctrl-Cursor-Down, Ctrl-J Ctrl-N, Ctrl-Meta-Tab Page-Down move
1737              down five items.
1738
1739              Shift-P, Home, Shift-Cursor-Up, Ctrl-A move to the first item.
1740
1741              Shift-N, End, Shift-Cursor-Down, Ctrl-E move to the last item.
1742
1743              Meta-P, Meta-Cursor-Up, Ctrl-Cursor-Left, Shift-Ctrl-Tab, move
1744              up just below the next separator.
1745
1746              Meta-N, Meta-Cursor-Down, Ctrl-Cursor-Right, Ctrl-Tab, move down
1747              just below the next separator.
1748
1749              Insert opens the "More..." sub menu if any.
1750
1751              Backspace tears off the menu.
1752
1753       Menu Bindings
1754              The keys and mouse buttons used to navigate the menu can be
1755              configured using the Key and Mouse commands with the special
1756              context 'M', possible combined with 'T' for the menu title, 'I'
1757              for other menu items, 'S' for any border or sidepic, '[' for
1758              left border including a left sidepic, ']' for right border
1759              including a right sidepic, '-' for top border, '_' for bottom
1760              border.  The menu context uses its own set of actions that can
1761              be bound to keys and mouse buttons.  These are MenuClose,
1762              MenuCloseAndExec, MenuEnterContinuation, MenuEnterSubmenu,
1763              MenuLeaveSubmenu, MenuMoveCursor, MenuCursorLeft,
1764              MenuCursorRight, MenuSelectItem, MenuScroll and MenuTearOff.
1765
1766              It is not possible to override the key Escape with no modifiers
1767              for closing the menu.  Neither is it possible to undefine mouse
1768              button 1, the arrow keys or the enter key for minimal
1769              navigation.
1770
1771              MenuClose exits from the current sequence of menus or destroys a
1772              tear off menu.
1773
1774              MenuCloseAndExec exits from the current sequence of menus or
1775              destroys a tear off menu and executes the rest of the line as a
1776              command.
1777
1778              MenuEnterContinuation opens the "More..." sub menu if any.
1779
1780              MenuEnterSubmenu enters a sub menu.
1781
1782              MenuLeaveSubmenu returns to the prior menu.
1783
1784              MenuMoveCursor n [m] moves the selection to another item.  If
1785              the first argument is zero the second argument specifies an
1786              absolute item in the menu to move the pointer to.  Negative
1787              items are counted from the end of the menu.  If the first
1788              argument is non-zero, the second argument must be omitted, and
1789              the first argument specifies a relative change in the selected
1790              item.  The positions may be suffixed with a 's' to indicate that
1791              the items should refer only to the first items after separators.
1792
1793              MenuCursorLeft enters a sub menu with the SubmenusLeft menu
1794              style, and returns to the prior menu with the SubmenusRight menu
1795              style.
1796
1797              MenuCursorRight enters a sub menu with the SubmenusRight menu
1798              style, and returns to the prior menu with the SubmenusLeft menu
1799              style.
1800
1801              MenuSelectItem triggers the action for the menu item.
1802
1803              MenuScroll n performs menu scrolling according to the MouseWheel
1804              menu style with n items.  The distance can be suffixed with an
1805              's' to indicate the items should refer only to the first items
1806              after separators.
1807
1808              MenuTearOff turns a normal menu into a "torn off" menu.  See
1809              Tear Off Menus for details.
1810
1811       Tear Off Menus
1812              A tear off menu is any menu that has been "torn off" the window
1813              it was attached to and pinned to the root window.  There are
1814              three ways to tear off a menu: click on the menu title with
1815              mouse button 2, press Backspace in the menu or activate its tear
1816              off bar (a horizontal bar with a broken line).  Tear off bars
1817              must be added to the menu as any other item by assigning them
1818              the command TearMenuOff.
1819
1820              The builtin tear off actions can be overridden by undefining the
1821              builtin menu actions bound to tear off.  To remove the builtin
1822              mouse button 2 binding, use:
1823
1824                  Mouse 2 MT A -
1825
1826              and to remove the builtin backspace binding, use:
1827
1828                  Key Backspace M A -
1829
1830              See the section Menu Bindings for details on how to assign other
1831              bindings for tear off.
1832
1833              Note that prior to fvwm 2.5.20 the tear off mouse bindings were
1834              redefined in different way, which no longer work.
1835
1836              The window containing the menu is placed as any other window
1837              would be.  If you find it confusing to have your tear off menus
1838              appear at random positions on the screen, put this line in your
1839              configuration file:
1840
1841                  Style fvwm_menu UsePPosition
1842
1843              To remove borders and buttons from a tear-off menu but keep the
1844              menu title, you can use
1845
1846                  Style fvwm_menu !Button 0, !Button 1
1847                  Style fvwm_menu !Button 2, !Button 3
1848                  Style fvwm_menu !Button 4, !Button 5
1849                  Style fvwm_menu !Button 6, !Button 7
1850                  Style fvwm_menu !Button 8, !Button 9
1851                  Style fvwm_menu Title, HandleWidth 0
1852
1853              A tear off menu is a cross breeding between a window and a menu.
1854              The menu is swallowed by a window and its title is stripped off
1855              and displayed in the window title.  The main advantage is that
1856              the menu becomes permanent - activating an item does not close
1857              the menu.  Therefore, it can be used multiple times without
1858              reopening it.  To destroy such a menu, close its window or press
1859              the Escape key.
1860
1861              Tear off menus behave somewhat differently than normal menus and
1862              windows.  They do not take the keyboard focus, but while the
1863              pointer is over one of them, all key presses are sent to the
1864              menu.  Other fvwm key bindings are disabled as long as the
1865              pointer is inside the tear off menu or one of its sub menus.
1866              When the pointer leaves this area, all sub menus are closed
1867              immediately.  Note that the window containing a tear off menu is
1868              never hilighted as if it had the focus.
1869
1870              A tear off menu is an independent copy of the menu it originated
1871              from.  As such, it is not affected by adding items to that menu
1872              or changing its menu style.
1873
1874              To create a tear off menu without opening the normal menu first,
1875              the option TearOffImmediately can be added to the Menu or Popup
1876              command.
1877
1878       AddToMenu menu-name [menu-label action]
1879              Begins or adds to a menu definition.  Typically a menu
1880              definition looks like this:
1881
1882                  AddToMenu Utilities Utilities Title
1883                   + Xterm           Exec  exec xterm -e tcsh
1884                   + Rxvt            Exec  exec rxvt
1885                   + "Remote Logins" Popup Remote-Logins
1886                   + Top             Exec  exec rxvt -T Top -n Top -e top
1887                   + Calculator      Exec  exec xcalc
1888                   + Xman            Exec  exec xman
1889                   + Xmag            Exec  exec xmag
1890                   + emacs           Exec  exec xemacs
1891                   + Mail            MailFunction xmh "-font fixed"
1892                   + ""              Nop
1893                   + Modules         Popup Module-Popup
1894                   + ""              Nop
1895                   + Exit Fvwm       Popup Quit-Verify
1896
1897              The menu could be invoked via
1898
1899                  Mouse 1 R A Menu Utilities Nop
1900
1901              or
1902
1903                  Mouse 1 R A Popup Utilities
1904
1905              There is no end-of-menu symbol.  Menus do not have to be defined
1906              in a contiguous region of the config file.  The quoted (or first
1907              word) portion in the above examples is the menu label, which
1908              appears in the menu when the user pops it up.  The remaining
1909              portion is an fvwm command which is executed if the user selects
1910              that menu item.  An empty menu-label ("") and the Nop function
1911              are used to insert a separator into the menu.
1912
1913              The keywords DynamicPopUpAction and DynamicPopDownAction have a
1914              special meaning when used as the name of a menu item.  The
1915              action following the keyword is executed whenever the menu is
1916              popped up or down.  This way you can implement dynamic menus.
1917              It is even possible to destroy itself with DestroyMenu and the
1918              rebuild from scratch.  When the menu has been destroyed (unless
1919              you used the recreate option when destroying the menu), do not
1920              forget to add the dynamic action again.
1921
1922              Note: Do not trigger actions that require user interaction.
1923              They may fail and may screw up your menus.  See the Silent
1924              command.
1925
1926              Warning
1927              Do not issue MenuStyle commands as dynamic menu actions.
1928              Chances are good that this crashes fvwm.
1929
1930              There are several configurable scripts installed together with
1931              fvwm for automatic menu generation.  They have their own man
1932              pages.  Some of them, specifically fvwm-menu-directory and
1933              fvwm-menu-desktop, may be used with DynamicPopupAction to create
1934              a directory listing or GNOME/KDE application listing.
1935
1936              Example (File browser):
1937
1938                  # You can find the shell script fvwm_make_browse_menu.sh
1939                  # in the utils/ directory of the distribution.
1940                  AddToMenu BrowseMenu
1941                  + DynamicPopupAction PipeRead \
1942                    'fvwm_make_browse_menu.sh BrowseMenu'
1943
1944              Example (Picture menu):
1945
1946                  # Build a menu of all .jpg files in
1947                  # $HOME/Pictures
1948                  AddToMenu JpgMenu foo title
1949                  + DynamicPopupAction Function MakeJpgMenu
1950
1951                  AddToFunc MakeJpgMenu
1952                  + I DestroyMenu recreate JpgMenu
1953                  + I AddToMenu JpgMenu Pictures Title
1954                  + I PipeRead 'for i in $HOME/Pictures/*.jpg; \
1955                    do echo AddToMenu JpgMenu "`basename $i`" Exec xv $i; done'
1956
1957              The keyword MissingSubmenuFunction has a similar meaning.  It is
1958              executed whenever you try to pop up a sub menu that does not
1959              exist.  With this function you can define and destroy menus on
1960              the fly.  You can use any command after the keyword, but if the
1961              name of an item (that is a submenu) defined with AddToFunc
1962              follows it, fvwm executes this command:
1963
1964                  Function <function-name> <submenu-name>
1965
1966              i.e. the name is passed to the function as its first argument
1967              and can be referred to with "$0".
1968
1969              The fvwm-menu-directory script mentioned above may be used with
1970              MissingSubmenuFunction to create an up to date recursive
1971              directory listing.
1972
1973              Example:
1974
1975                  # There is another shell script fvwm_make_directory_menu.sh
1976                  # in the utils/ directory of the distribution. To use it,
1977                  # define this function in your configuration file:
1978
1979                  DestroyFunc MakeMissingDirectoryMenu
1980                  AddToFunc MakeMissingDirectoryMenu
1981                  + I PipeRead fvwm_make_directory_menu.sh $0
1982
1983                  DestroyMenu SomeMenu
1984                  AddToMenu SomeMenu
1985                  + MissingSubmenuFunction MakeMissingDirectoryMenu
1986                  + "Root directory" Popup /
1987
1988              This is another implementation of the file browser that uses sub
1989              menus for subdirectories.
1990
1991              Titles can be used within the menu.  If you add the option top
1992              behind the keyword Title, the title is added to the top of the
1993              menu.  If there was a title already, it is overwritten.
1994
1995                  AddToMenu Utilities Tools Title top
1996
1997              All text up to the first Tab in the menu label is aligned to the
1998              left side of the menu, all text right of the first Tab is
1999              aligned to the left in a second column and all text thereafter
2000              is placed right aligned in the third column.  All other Tab s
2001              are replaced by spaces.  Note that you can change this format
2002              with the ItemFormat option of the MenuStyle command.
2003
2004              If the menu-label contains an ampersand ('&'), the next
2005              character is taken as a hot-key for the menu item.  Hot-keys are
2006              underlined in the label.  To get a literal '&', insert "&&".
2007              Pressing the hot-key moves through the list of menu items with
2008              this hot-key or selects an item that is the only one with this
2009              hot-key.
2010
2011              If the menu-label contains a sub-string which is set off by
2012              stars, then the text between the stars is expected to be the
2013              name of an image file to insert in the menu.  To get a literal
2014              '*', insert "**".  For example
2015
2016                  + Calculator*xcalc.xpm* Exec exec xcalc
2017
2018              inserts a menu item labeled "Calculator" with a picture of a
2019              calculator above it.  The following:
2020
2021                  + *xcalc.xpm*           Exec exec xcalc
2022
2023              Omits the "Calculator" label, but leaves the picture.
2024
2025              If the menu-label contains a sub-string which is set off by
2026              percent signs, then the text between the percent signs is
2027              expected to be the name of image file (a so called mini icon to
2028              insert to the left of the menu label.  A second mini icon that
2029              is drawn at the right side of the menu can be given in the same
2030              way.  To get a literal '%', insert "%%".  For example
2031
2032                  + Calculator%xcalc.xpm% Exec exec xcalc
2033
2034              inserts a menu item labeled "Calculator" with a picture of a
2035              calculator to the left.  The following:
2036
2037                  + %xcalc.xpm%           Exec exec xcalc
2038
2039              Omits the "Calculator" label, but leaves the picture.  The
2040              pictures used with this feature should be small (perhaps 16x16).
2041
2042              If the menu-name (not the label) contains a sub-string which is
2043              set off by at signs ('@'), then the text between them is
2044              expected to be the name of an image file to draw along the left
2045              side of the menu (a side pixmap).  You may want to use the
2046              SidePic option of the MenuStyle command instead.  To get a
2047              literal '@', insert "@@".  For example
2048
2049                  AddToMenu StartMenu@linux-menu.xpm@
2050
2051              creates a menu with a picture in its bottom left corner.
2052
2053              If the menu-name also contains a sub-string surrounded by '^'s,
2054              then the text between '^'s is expected to be the name of an X11
2055              color and the column containing the side picture is colored with
2056              that color.  You can set this color for a menu style using the
2057              SideColor option of the MenuStyle command.  To get a literal
2058              '^', insert "^^".  Example:
2059
2060                  AddToMenu StartMenu@linux-menu.xpm@^blue^
2061
2062              creates a menu with a picture in its bottom left corner and
2063              colors with blue the region of the menu containing the picture.
2064
2065              In all the above cases, the name of the resulting menu is name
2066              specified, stripped of the substrings between the various
2067              delimiters.
2068
2069       ChangeMenuStyle menustyle menu ...
2070              Changes the menu style of menu to menustyle.  You may specify
2071              more than one menu in each call of ChangeMenuStyle.
2072
2073       CopyMenuStyle orig-menustyle dest-menustyle
2074              Copy orig-menustyle to dest-menustyle, where orig-menustyle is
2075              an existing menu style.  If the menu style dest_menustyle does
2076              not exist, then it is created.
2077
2078       DestroyMenu [recreate] menu
2079              Deletes a menu, so that subsequent references to it are no
2080              longer valid.  You can use this to change the contents of a menu
2081              during an fvwm session.  The menu can be rebuilt using
2082              AddToMenu.  The optional parameter recreate tells fvwm not to
2083              throw away the menu completely but to throw away all the menu
2084              items (including the title).
2085
2086                  DestroyMenu Utilities
2087
2088       DestroyMenuStyle menustyle
2089              Deletes the menu style named menustyle and changes all menus
2090              using this style to the default style, you cannot destroy the
2091              default menu style.
2092
2093                  DestroyMenuStyle pixmap1
2094
2095       Menu menu-name [position] [double-click-action]
2096              Causes a previously defined menu to be popped up in a sticky
2097              manner.  That is, if the user invokes the menu with a click
2098              action instead of a drag action, the menu stays up.  The command
2099              double-click-action is invoked if the user double-clicks a
2100              button (or hits the key rapidly twice if the menu is bound to a
2101              key) when bringing up the menu.  If the double click action is
2102              not specified, double clicking on the menu does nothing.
2103              However, if the menu begins with a menu item (i.e. not with a
2104              title or a separator) and the double click action is not given,
2105              double clicking invokes the first item of the menu (but only if
2106              the pointer really was over the item).
2107
2108              The pointer is warped to where it was when the menu was invoked
2109              if it was both invoked and closed with a keystroke.
2110
2111              The position arguments allow placement of the menu somewhere on
2112              the screen, for example centered on the visible screen or above
2113              a title bar.  Basically it works like this: you specify a
2114              context-rectangle and an offset to this rectangle by which the
2115              upper left corner of the menu is moved from the upper left
2116              corner of the rectangle.  The position arguments consist of
2117              several parts:
2118
2119              [context-rectangle] x y [special-options]
2120
2121              The context-rectangle can be one of:
2122
2123              Root
2124                  the root window of the current screen.
2125
2126              XineramaRoot
2127                  the root window of the whole Xinerama screen.  Equivalent to
2128                  "root" when Xinerama is not used.
2129
2130              Mouse
2131                  a 1x1 rectangle at the mouse position.
2132
2133              Window
2134                  the frame of the context window.
2135
2136              Interior
2137                  the inside of the context window.
2138
2139              Title
2140                  the title of the context window or icon.
2141
2142              Button<n>
2143                  button #n of the context window.
2144
2145              Icon
2146                  the icon of the context window.
2147
2148              Menu
2149                  the current menu.
2150
2151              Item
2152                  the current menu item.
2153
2154              Context
2155                  the current window, menu or icon.
2156
2157              This
2158                  whatever widget the pointer is on (e.g. a corner of a window
2159                  or the root window).
2160
2161              Rectangle <geometry>
2162                  the rectangle defined by <geometry> in X geometry format.
2163                  Width and height default to 1 if omitted.
2164
2165              If the context-rectangle is omitted or illegal (e.g. "item" on a
2166              window), "Mouse" is the default.  Note that not all of these
2167              make sense under all circumstances (e.g. "Icon" if the pointer
2168              is on a menu).
2169
2170              The offset values x and y specify how far the menu is moved from
2171              its default position.  By default, the numeric value given is
2172              interpreted as a percentage of the context rectangle's width
2173              (height), but with a trailing 'm' the menu's width (height) is
2174              used instead.  Furthermore a trailing 'p' changes the
2175              interpretation to mean pixels.
2176
2177              Instead of a single value you can use a list of values.  All
2178              additional numbers after the first one are separated from their
2179              predecessor by their sign.  Do not use any other separators.
2180
2181              If x or y are prefixed with "'o<number>" where <number> is an
2182              integer, the menu and the rectangle are moved to overlap at the
2183              specified position before any other offsets are applied.  The
2184              menu and the rectangle are placed so that the pixel at <number>
2185              percent of the rectangle's width/height is right over the pixel
2186              at <number> percent of the menu's width/height.  So "o0" means
2187              that the top/left borders of the menu and the rectangle overlap,
2188              with "o100" it's the bottom/right borders and if you use "o50"
2189              they are centered upon each other (try it and you will see it is
2190              much simpler than this description).  The default is "o0".  The
2191              prefix "o<number>" is an abbreviation for "+<number>-<number>m".
2192
2193              A prefix of 'c' is equivalent to "o50".  Examples:
2194
2195                  # window list in the middle of the screen
2196                  WindowList Root c c
2197
2198                  # menu to the left of a window
2199                  Menu name window -100m c+0
2200
2201                  # popup menu 8 pixels above the mouse pointer
2202                  Popup name mouse c -100m-8p
2203
2204                  # somewhere on the screen
2205                  Menu name rectangle 512x384+1+1 +0 +0
2206
2207                  # centered vertically around a menu item
2208                  AddToMenu foobar-menu
2209                   + "first item" Nop
2210                   + "special item" Popup "another menu" item +100 c
2211                   + "last item" Nop
2212
2213                  # above the first menu item
2214                  AddToMenu foobar-menu
2215                   + "first item" Popup "another menu" item +0 -100m
2216
2217              Note that you can put a sub menu far off the current menu so you
2218              could not reach it with the mouse without leaving the menu.  If
2219              the pointer leaves the current menu in the general direction of
2220              the sub menu the menu stays up.
2221
2222              The special-options:
2223
2224              To create a tear off menu without opening the normal menu, add
2225              the option TearOffImmediately.  Normally the menu opens in
2226              normal state for a split second before being torn off.  As
2227              tearing off places the menu like any other window, a position
2228              should be specified explicitly:
2229
2230                  # Forbid fvwm to place the menu window
2231                  Style <name of menu> UsePPosition
2232                  # Menu at top left corner of screen
2233                  Menu Root 0p 0p TearOffImmediately
2234
2235              The Animated and Mwm or Win menu styles may move a menu
2236              somewhere else on the screen.  If you do not want this you can
2237              add Fixed as an option.  This might happen for example if you
2238              want the menu always in the top right corner of the screen.
2239
2240              Where do you want a menu to appear when you click on its menu
2241              item? The default is to place the title under the cursor, but if
2242              you want it where the position arguments say, use the
2243              SelectInPlace option.  If you want the pointer on the title of
2244              the menu, use SelectWarp too.  Note that these options apply
2245              only if the PopupAsRootMenu MenuStyle option is used.
2246
2247              The pointer is warped to the title of a sub menu whenever the
2248              pointer would be on an item when the sub menu is popped up (fvwm
2249              menu style) or never warped to the title at all (Mwm or Win menu
2250              styles).  You can force (forbid) warping whenever the sub menu
2251              is opened with the WarpTitle (NoWarp) option.
2252
2253              Note that the special-options do work with a normal menu that
2254              has no other position arguments.
2255
2256       MenuStyle stylename [options]
2257              Sets a new menu style or changes a previously defined style.
2258              The stylename is the style name; if it contains spaces or tabs
2259              it has to be quoted.  The name "*" is reserved for the default
2260              menu style.  The default menu style is used for every menu-like
2261              object (e.g. the window created by the WindowList command) that
2262              had not be assigned a style using the ChangeMenuStyle.  See also
2263              DestroyMenuStyle.  When using monochrome color options are
2264              ignored.
2265
2266              options is a comma separated list containing some of the
2267              keywords Fvwm / Mwm / Win, BorderWidth, Foreground, Background,
2268              Greyed, HilightBack / !HilightBack, HilightTitleBack, ActiveFore
2269              / !ActiveFore, MenuColorset, ActiveColorset, GreyedColorset,
2270              TitleColorset, Hilight3DThick / Hilight3DThin / Hilight3DOff,
2271              Hilight3DThickness, Animation / !Animation, Font, TitleFont,
2272              MenuFace, PopupDelay, PopupOffset, TitleWarp / !TitleWarp,
2273              TitleUnderlines0 / TitleUnderlines1 / TitleUnderlines2,
2274              SeparatorsLong / SeparatorsShort, TrianglesSolid /
2275              TrianglesRelief, PopupImmediately / PopupDelayed,
2276              PopdownImmediately / PopdownDelayed, PopupActiveArea,
2277              DoubleClickTime, SidePic, SideColor, PopupAsRootMenu /
2278              PopupAsSubmenu / PopupIgnore / PopupClose, RemoveSubmenus /
2279              HoldSubmenus, SubmenusRight / SubmenusLeft, SelectOnRelease,
2280              ItemFormat, VerticalItemSpacing, VerticalMargins,
2281              VerticalTitleSpacing, AutomaticHotkeys / !AutomaticHotkeys,
2282              UniqueHotkeyActivatesImmediate /
2283              !UniqueHotkeyActivatesImmediate, MouseWheel, ScrollOffPage /
2284              !ScrollOffPage, TrianglesUseFore / !TrianglesUseFore.
2285
2286              In the above list some options are listed as option pairs or
2287              triples with a '/' in between.  These options exclude each
2288              other.  All paired options can be negated to have the effect of
2289              the counterpart option by prefixing ! to the option.
2290
2291              Some options are now negated by prefixing ! to the option.  This
2292              is the preferred form for all such options.  The other negative
2293              forms are now deprecated and will be removed in the future.
2294
2295              This is a list of MenuStyle deprecated negative options:
2296              ActiveForeOff, AnimationOff, AutomaticHotkeysOff,
2297              HilightBackOff, TitleWarpOff
2298
2299              Fvwm, Mwm, Win reset all options to the style with the same name
2300              in former versions of fvwm.  The default for new menu styles is
2301              Fvwm style.  These options override all others except
2302              Foreground, Background, Greyed, HilightBack, ActiveFore and
2303              PopupDelay, so they should be used only as the first option
2304              specified for a menu style or to reset the style to defined
2305              behavior.  The same effect can be created by setting all the
2306              other options one by one.
2307
2308              Mwm and Win style menus popup sub menus automatically.  Win
2309              menus indicate the current menu item by changing the background
2310              to dark.  Fvwm sub menus overlap the parent menu, Mwm and Win
2311              style menus never overlap the parent menu.
2312
2313              Fvwm style is equivalent to !HilightBack, Hilight3DThin,
2314              !ActiveFore, !Animation, Font, MenuFace, PopupOffset 0 67,
2315              TitleWarp, TitleUnderlines1, SeparatorsShort, TrianglesRelief,
2316              PopupDelayed, PopdownDelayed, PopupDelay 150, PopdownDelay 150,
2317              PopupAsSubmenu, HoldSubmenus, SubmenusRight, BorderWidth 2,
2318              !AutomaticHotkeys, UniqueHotkeyActivatesImmediate,
2319              PopupActiveArea 75.
2320
2321              Mwm style is equivalent to !HilightBack, Hilight3DThick,
2322              !ActiveFore, !Animation, Font, MenuFace, PopupOffset -3 100,
2323              !TitleWarp, TitleUnderlines2, SeparatorsLong, TrianglesRelief,
2324              PopupImmediately, PopdownDelayed, PopdownDelay 150,
2325              PopupAsSubmenu, HoldSubmenus, SubmenusRight, BorderWidth 2,
2326              UniqueHotkeyActivatesImmediate, !AutomaticHotkeys,
2327              PopupActiveArea 75.
2328
2329              Win style is equivalent to HilightBack, Hilight3DOff,
2330              ActiveFore, !Animation, Font, MenuFace, PopupOffset -5 100,
2331              !TitleWarp, TitleUnderlines1, SeparatorsShort, TrianglesSolid,
2332              PopupImmediately, PopdownDelayed, PopdownDelay 150,
2333              PopupAsSubmenu, RemoveSubmenus, SubmenusRight, BorderWidth 2,
2334              UniqueHotkeyActivatesImmediate, !AutomaticHotkeys,
2335              PopupActiveArea 75.
2336
2337              BorderWidth takes the thickness of the border around the menus
2338              in pixels.  It may be zero to 50 pixels.  The default is 2.
2339              Using an illegal value reverts the border width to the default.
2340
2341              Foreground and Background may have a color name as an argument.
2342              This color is used for menu text or the menu's background.  You
2343              can omit the color name to reset these colors to the built-in
2344              default.
2345
2346              Greyed may have a color name as an argument.  This color is the
2347              one used to draw a menu-selection which is prohibited (or not
2348              recommended) by the Mwm hints which an application has
2349              specified.  If the color is omitted the color of greyed menu
2350              entries is based on the background color of the menu.
2351
2352              HilightBack and !HilightBack switch hilighting the background of
2353              the selected menu item on and off.  A specific background color
2354              may be used by providing the color name as an argument to
2355              HilightBack.  If you use this option without an argument the
2356              color is based on the menu's background color.  The
2357              ActiveColorset option overrides the specified color.  If the
2358              colorset has a non solid background it is used for the
2359              hilighting.
2360
2361              HilightTitleBack switches hilighting the background of menu
2362              titles on.  If a TitleColorset was used, the background colour
2363              is taken from there.  Otherwise the color is based on the menu's
2364              background color.  If the colorset has a non solid background it
2365              is used for the hilighting.
2366
2367              ActiveFore and !ActiveFore switch hilighting the foreground of
2368              the selected menu item on and off.  A specific foreground color
2369              may be used by providing the color name as an argument to
2370              ActiveFore.  Omitting the color turns hilighting on when an
2371              ActiveColorset is used.  ActiveFore turns off hilighting the
2372              foreground completely.  The ActiveColorset option overrides the
2373              specified color.
2374
2375              MenuColorset controls if a colorset is used instead of the
2376              Foreground, Background and MenuFace menu styles.  If the
2377              MenuColorset keyword is followed by a number equal to zero or
2378              greater, this number is taken as the number of the colorset to
2379              use.  If the number is omitted, the colorset is switched off and
2380              the regular menu styles are used again.  The foreground and
2381              background colors of the menu items are replaced by the colors
2382              from the colorset.  If the colorset has a pixmap defined, this
2383              pixmap is used as the background of the menu.  Note that the
2384              MenuFace menu style has been optimized for memory consumption
2385              and may use less memory than the background from a colorset.
2386              The shape mask from the colorset is used to shape the menu.
2387              Please refer to the Colorsets section for details about
2388              colorsets.
2389
2390              ActiveColorset works exactly like MenuColorset, but the
2391              foreground from the colorset replaces the color given with the
2392              ActiveFore menu style and the colorset's background color
2393              replaces the color given with the HilightBack command (to turn
2394              on background hilighting you have to use the HilightBack menu
2395              style too).  If specified, the hilight and shadow colors from
2396              the colorset are used too.  The pixmap and shape mask from the
2397              colorset are not used.  Hilighting the background or foreground
2398              can be turned off individually with the !ActiveFore or
2399              !HilightBack menu styles.
2400
2401              GreyedColorset works exactly like MenuColorset, but the
2402              foreground from the colorset replaces the color given with the
2403              Greyed menu style.  No other parts of the colorset are used.
2404
2405              TitleColorset works exactly like MenuColorset, but is used only
2406              for menu titles.
2407
2408              Hilight3DThick, Hilight3DThin and Hilight3DOff determine if the
2409              selected menu item is hilighted with a 3D relief.  Thick reliefs
2410              are two pixels wide, thin reliefs are one pixel wide.
2411
2412              Hilight3DThickness takes one numeric argument that may be
2413              between -50 and +50 pixels.  With negative values the menu item
2414              gets a pressed in look.  The above three commands are equivalent
2415              to a thickness of 2, 1 and 0.
2416
2417              Animation and !Animation turn menu animation on or off.  When
2418              animation is on, sub menus that do not fit on the screen cause
2419              the parent menu to be shifted to the left so the sub menu can be
2420              seen.
2421
2422              Font and TitleFont take a font name as an argument.  If a font
2423              by this name exists it is used for the text of all menu items.
2424              If it does not exist or if the name is left blank the built-in
2425              default is used.  If a TitleFont is given, it is used for all
2426              menu titles instead of the normal font.
2427
2428              MenuFace enforces a fancy background upon the menus.  You can
2429              use the same options for MenuFace as for the ButtonStyle.  See
2430              description of ButtonStyle command and the Color Gradients
2431              sections for more information.  If you use MenuFace without
2432              arguments the style is reverted back to normal.
2433
2434              Some examples of MenuFaces are:
2435
2436                  MenuFace DGradient 128 2 lightgrey 50 blue 50 white
2437                  MenuFace TiledPixmap texture10.xpm
2438                  MenuFace HGradient 128 2 Red 40 Maroon 60 White
2439                  MenuFace Solid Maroon
2440
2441              Note: The gradient styles H, V, B and D are optimized for high
2442              speed and low memory consumption in menus.  This is not the case
2443              for all the other gradient styles.  They may be slow and consume
2444              huge amounts of memory, so if you encounter performance problems
2445              with them you may be better off by not using them.  To improve
2446              performance you can try one or all of the following:
2447
2448              Turn hilighting of the active menu item other than foreground
2449              color off:
2450
2451                  MenuStyle <style> Hilight3DOff, !HilightBack
2452                  MenuStyle <style> ActiveFore <preferred color>
2453
2454              Make sure sub menus do not overlap the parent menu.  This can
2455              prevent menus being redrawn every time a sub menu pops up or
2456              down.
2457
2458                  MenuStyle <style> PopupOffset 1 100
2459
2460              Run your X server with backing storage.  If your X Server is
2461              started with the -bs option, turn it off.  If not try the -wm
2462              and +bs options:
2463
2464                  startx -- -wm +bs
2465
2466              You may have to adapt this example to your system (e.g. if you
2467              use xinit to start X).
2468
2469              PopupDelay requires one numeric argument.  This value is the
2470              delay in milliseconds before a sub menu is popped up when the
2471              pointer moves over a menu item that has a sub menu.  If the
2472              value is zero no automatic pop up is done.  If the argument is
2473              omitted the built-in default is used.  Note that the popup delay
2474              has no effect if the PopupImmediately option is used since sub
2475              menus pop up immediately then.
2476
2477              PopupImmediately makes menu items with sub menus pop up it up as
2478              soon as the pointer enters the item.  The PopupDelay option is
2479              ignored then.  If PopupDelayed is used fvwm looks at the
2480              PopupDelay option if or when this automatic popup happens.
2481
2482              PopdownDelay works exactly like PopupDelay but determines the
2483              timeout of the PopupDelayed style.
2484
2485              PopdownImmediately makes sub menus vanish as soon as the pointer
2486              leaves the sub menu and the correspondent item in the parent
2487              menu.  With the opposite option PopdownDelayed the sub menu only
2488              pops down after the time specified with the PopdownDelay option.
2489              This comes handy when the pointer often strays off the menu item
2490              when trying to move into the sub menu.  Whenever there is a
2491              conflict between the PopupImmediately, PopupDelayed, PopupDelay
2492              styles and the PopdownImmediately, PopdownDelayed, PopdownDelay
2493              styles, the Popup...  styles win when using mouse navigation and
2494              the Popdown...  styles win when navigating with the keyboard.
2495
2496              PopupOffset requires two integer arguments.  Both values affect
2497              where sub menus are placed relative to the parent menu.  If both
2498              values are zero, the left edge of the sub menu overlaps the left
2499              edge of the parent menu.  If the first value is non-zero the sub
2500              menu is shifted that many pixels to the right (or left if
2501              negative).  If the second value is non-zero the menu is moved by
2502              that many percent of the parent menu's width to the right or
2503              left.
2504
2505              PopupActiveArea requires an integer value between 51 and 100.
2506              Normally, when the pointer is over a menu item with a sub menu
2507              and the pointer enters the area that starts at 75% of the menu
2508              width, the sub menu is shown immediately.  This percentage can
2509              be changed with PopupActiveArea.  Setting this value to 100
2510              disables this kind of automatic popups altogether.  The default
2511              value is restored if no or an illegal value is given.
2512
2513              TitleWarp and !TitleWarp affect if the pointer warps to the menu
2514              title when a sub menu is opened or not.  Note that regardless of
2515              this setting the pointer is not warped if the menu does not pop
2516              up under the pointer.
2517
2518              TitleUnderlines0, TitleUnderlines1 and TitleUnderlines2 specify
2519              how many lines are drawn below a menu title.
2520
2521              SeparatorsLong and SeparatorsShort set the length of menu
2522              separators.  Long separators run from the left edge all the way
2523              to the right edge.  Short separators leave a few pixels to the
2524              edges of the menu.
2525
2526              TrianglesSolid and TrianglesRelief affect how the small
2527              triangles for sub menus is drawn.  Solid triangles are filled
2528              with a color while relief triangles are hollow.
2529
2530              DoubleClickTime requires one numeric argument.  This value is
2531              the time in milliseconds between two mouse clicks in a menu to
2532              be considered as a double click.  The default is 450
2533              milliseconds.  If the argument is omitted the double click time
2534              is reset to this default.
2535
2536              SidePic takes the name of an image file as an argument.  The
2537              picture is drawn along the left side of the menu.  The SidePic
2538              option can be overridden by a menu specific side pixmap (see
2539              AddToMenu).  If the file name is omitted an existing side pixmap
2540              is removed from the menu style.
2541
2542              SideColor takes the name of an X11 color as an argument.  This
2543              color is used to color the column containing the side picture
2544              (see above).  The SideColor option can be overridden by a menu
2545              specific side color (see AddToMenu).  If the color name is
2546              omitted the side color option is switched off.
2547
2548              PopupAsRootMenu, PopupAsSubmenu, PopupIgnore and PopupClose
2549              change the behavior when you click on a menu item that opens a
2550              sub menu.  With PopupAsRootMenu the original menu is closed
2551              before the sub menu appears, with PopupAsSubmenu it is not, so
2552              you can navigate back into the parent menu.  Furthermore, with
2553              PopupAsSubmenu the sub menu is held open (posted) regardless of
2554              where you move the mouse.  Depending on your menu style this may
2555              simplify navigating through the menu.  Any keystroke while a
2556              menu is posted reverts the menu back to the normal behavior.
2557              With PopupClose the menu is closed when a sub menu item is
2558              activated, and the menu stays open if PopupIgnore is used (even
2559              if the menu was invoked with the Popup command).  PopupAsSubmenu
2560              is the default.
2561
2562              RemoveSubmenus instructs fvwm to remove sub menu when you move
2563              back into the parent menu.  With HoldSubmenus the sub menu
2564              remains visible.  You probably want to use HoldSubmenus if you
2565              are using the PopupDelayed style.  RemoveSubmenus affects menu
2566              navigation with the keyboard.
2567
2568              SelectOnRelease takes an optional key name as an argument.  If
2569              the given key is released in a menu using this style, the
2570              current menu item is selected.  This is intended for Alt-Tab
2571              WindowList navigation.  The key name is a standard X11 key name
2572              as defined in /usr/include/X11/keysymdef.h, (without the XK_
2573              prefix), or the keysym database /usr/X11R6/lib/X11/XKeysymDB.
2574              To disable this behavior, omit the key name.
2575
2576              Note: Some X servers do not support KeyRelease events.
2577              SelectOnRelease does not work on such a machine.
2578
2579              ItemFormat takes a special string as its argument that
2580              determines the layout of the menu items.  Think of the format
2581              string as if it were a menu item.  All you have to do is tell
2582              fvwm where to place the different parts of the menu item (i.e.
2583              the labels, the triangle denoting a sub menu, the mini icons and
2584              the side pic) in the blank area.  The string consists of spaces,
2585              Tab characters and formatting directives beginning with '%'.
2586              Any illegal characters and formatting directives are silently
2587              ignored:
2588
2589              %l, %c and %r
2590                  Insert the next item label.  Up to three labels can be used.
2591                  The item column is left-aligned (%l), centered (%c) or
2592                  right-aligned (%r).
2593
2594              %i
2595                  Inserts the mini icon.
2596
2597              %> and %<
2598                  Insert the sub menu triangle pointing either to the right
2599                  (%>) or to the left (%<).
2600
2601              %|
2602                  The first %| denotes the beginning of the area that is
2603                  highlighted either with a background color or a relief (or
2604                  both).  The second %| marks the end of this area.  %| can be
2605                  used up to twice in the string.  If you do not add one or
2606                  both of them, fvwm sets the margins to the margins of the
2607                  whole item (not counting the side picture).
2608
2609              %s
2610                  Places the side picture either at the beginning or the end
2611                  of the menu.  This directive may be used only once and only
2612                  as the first or last in the format string.  If the %s is not
2613                  at the beginning of the string, menus are not drawn
2614                  properly.
2615
2616              Space, Tab, %Space and %Tab
2617                  Add gap of one space, or a tab, using the width of the menu
2618                  font.  When using a tab, the size of the gap can be one to 8
2619                  spaces since the tab position is a multiple of 8 from the
2620                  edge of the menu.  The whole string must be quoted if spaces
2621                  or tabs are used.
2622
2623              %p
2624                  Like Space and Tab %p inserts an empty area into the item,
2625                  but with better control of its size (see below).
2626
2627              You can define an additional space before and after each of the
2628              objects like this:
2629
2630                  %left.rightp
2631
2632              This means: if the object is defined in the menu (e.g. if it is
2633              %s and you use a side picture, or it is %l for the third column
2634              and there are items defined that actually have a third column),
2635              then add left pixels before the object and right pixels after
2636              it.  You may leave out the left or the .right parts if you do
2637              not need them.  All values up to the screen width are allowed.
2638              Even negative values can be used with care.  The p may be
2639              replaced with any other formatting directives described above.
2640
2641              Note: Only items defined in the format string are visible in the
2642              menus.  So if you do not put a %s in there you do not see a side
2643              picture, even if one is specified.
2644
2645              Note: The SubmenusLeft style changes the default ItemFormat
2646              string, but if it was set manually it is not modified.
2647
2648              Note: If any unformatted title of the menu is wider than the
2649              widest menu item, the spaces between the different parts of the
2650              menu items are enlarged to match the width of the title.
2651              Leading left aligned objects in the format string (%l, %i, %<,
2652              first %|) stick to the left edge of the menu and trailing right
2653              aligned objects (%r, %i, %>, second %|) stick to the right edge.
2654              The gaps between the remaining items are enlarged equally.
2655
2656              Examples:
2657
2658                  MenuStyle * ItemFormat "%.4s%.1|%.5i%.5l%.5l%.5r%.5i%2.3>%1|"
2659
2660              Is the default string used by fvwm: (side picture + 4 pixels
2661              gap) (beginning of the hilighted area + 1 pixel gap) (mini icon
2662              + 5p) (first column left aligned + 5p) (second column left
2663              aligned + 5p) (third column right aligned + 5p) (second mini
2664              icon + 5p) (2p + sub menu triangle + 3p) (1p + end of hilighted
2665              area).
2666
2667                  MenuStyle * ItemFormat "%.1|%3.2<%5i%5l%5l%5r%5i%1|%4s"
2668
2669              Is used by fvwm with the SubmenusLeft option below.
2670
2671              VerticalItemSpacing and VerticalTitleSpacing control the
2672              vertical spacing of menu items and titles like ItemFormat
2673              controls the horizontal spacing.  Both take two numeric
2674              arguments that may range from -100 to +100.  The first is the
2675              gap in pixels above a normal menu item (or a menu title), the
2676              second is the gap in pixels below it.  Negative numbers do not
2677              make much sense and may screw up the menu completely.  If no
2678              arguments are given or the given arguments are invalid, the
2679              built-in defaults are used: one pixel above the item or title
2680              and two below.
2681
2682              VerticalMargins can be used to add some padding at the top and
2683              bottom of menus.  It takes two numeric arguments that must be
2684              positive integers (or zero).  If the number of arguments or its
2685              values are incorrect, fvwm defaults both to 0, which means no
2686              padding at all.  If the values are correct, the first one is
2687              used for the top margin, and the second one is used for the
2688              bottom margin.
2689
2690              SubmenusLeft mirrors the menu layout and behavior.  Sub menus
2691              pop up to the left, the sub menu triangle is drawn left and the
2692              mini icon and side picture are drawn at the right side of the
2693              menu.  The default is SubmenusRight.  The position hints of a
2694              menu are also affected by this setting, i.e. position hints
2695              using item or menu as context rectangle and position hints using
2696              m offsets.
2697
2698              AutomaticHotkeys and !AutomaticHotkeys control the menu's
2699              ability to automatically provide hot-keys on the first character
2700              of each menu item's label.  This behavior is always overridden
2701              if an explicit hot-key is assigned in the AddToMenu command.
2702
2703              UniqueHotkeyActivatesImmediate and
2704              !UniqueHotkeyActivatesImmediate controls how menu items are
2705              invoked when used with hotkeys.  By default, if a given menu
2706              entry only has one completeable match for a given hotkey, the
2707              action for that menu entry is invoked and the menu is closed.
2708              This is due to the UniqueHotkeyActivatesImmediate option.
2709              However, the menu can be told to remain open, waiting for the
2710              user to invoke the selected item instead when there is only one
2711              matched item for a given hotkey, by using the
2712              !UniqueHotkeyActivatesImmediate option.
2713
2714              MouseWheel controls the ability to scroll the menu using a mouse
2715              wheel.  It takes one argument, that can be one of
2716              ScrollsPointer, ScrollsMenu, ScrollsMenuBackwards or
2717              ActivatesItem.  ScrollsPointer makes the mouse wheel scroll the
2718              pointer over a menu.  This is the default.  ScrollsMenu and
2719              ScrollsMenuBackwards scroll the menu beneath the pointer.
2720              ActivatesItem disables scrolling by mouse wheel and makes the
2721              use of a mouse wheel act as if the menu was clicked.  If no
2722              argument is supplied the default setting is restored.
2723
2724              ScrollOffPage allows a menu to be scrolled out of the visible
2725              area if MouseWheel is set to ScrollsMenu or
2726              ScrollsMenuBackwards.  This is the default.  The opposite,
2727              !ScrollOffPage disables this behaviour.
2728
2729              TrianglesUseFore draws sub menu triangles with the foreground
2730              color of the menu colorset (normally drawn with the hilight
2731              color).  !TrianglesUseFore disables this behaviour.
2732
2733              Examples:
2734
2735                  MenuStyle * Mwm
2736                  MenuStyle * Foreground Black, Background gray40
2737                  MenuStyle * Greyed gray70, ActiveFore White
2738                  MenuStyle * !HilightBack, Hilight3DOff
2739                  MenuStyle * Font lucidasanstypewriter-14
2740                  MenuStyle * MenuFace DGradient 64 darkgray MidnightBlue
2741
2742                  MenuStyle red Mwm
2743                  MenuStyle red Foreground Yellow
2744                  MenuStyle red Background Maroon
2745                  MenuStyle red Greyed Red, ActiveFore Red
2746                  MenuStyle red !HilightBack, Hilight3DOff
2747                  MenuStyle red Font lucidasanstypewriter-12
2748                  MenuStyle red MenuFace DGradient 64 Red Black
2749
2750              Note that all style options could be placed on a single line for
2751              each style name.
2752
2753       MenuStyle forecolor backcolor shadecolor font style [anim]
2754              This is the old syntax of the MenuStyle command.  It is obsolete
2755              and may be removed in the future.  Please use the new syntax as
2756              described above.
2757
2758              Sets the menu style.  When using monochrome the colors are
2759              ignored.  The shadecolor is the one used to draw a
2760              menu-selection which is prohibited (or not recommended) by the
2761              Mwm hints which an application has specified.  The style option
2762              is either Fvwm, Mwm or Win, which changes the appearance and
2763              operation of the menus.
2764
2765              Mwm and Win style menus popup sub menus automatically.  Win
2766              menus indicate the current menu item by changing the background
2767              to black.  Fvwm sub menus overlap the parent menu, Mwm and Win
2768              style menus never overlap the parent menu.
2769
2770              When the anim option is given, sub menus that do not fit on the
2771              screen cause the parent menu to be shifted to the left so the
2772              sub menu can be seen.  See also SetAnimation command.
2773
2774       Popup PopupName [position] [default-action]
2775              This command has two purposes: to bind a menu to a key or mouse
2776              button, and to bind a sub menu into a menu.  The formats for the
2777              two purposes differ slightly.  The position arguments are the
2778              same as for Menu.  The command default-action is invoked if the
2779              user clicks a button to invoke the menu and releases it
2780              immediately again (or hits the key rapidly twice if the menu is
2781              bound to a key).  If the default action is not specified, double
2782              clicking on the menu does nothing.  However, if the menu begins
2783              with a menu item (i.e. not with a title or a separator) and the
2784              default action is not given, double clicking invokes the first
2785              item of the menu (but only if the pointer really was over the
2786              item).
2787
2788              To bind a previously defined pop-up menu to a key or mouse
2789              button:
2790
2791              The following example binds mouse buttons 2 and 3 to a pop-up
2792              called "Window Ops".  The menu pops up if the buttons 2 or 3 are
2793              pressed in the window frame, side-bar, or title-bar, with no
2794              modifiers (none of shift, control, or meta).
2795
2796                  Mouse 2 FST N Popup "Window Ops"
2797                  Mouse 3 FST N Popup "Window Ops"
2798
2799              Pop-ups can be bound to keys through the use of the Key command.
2800              Pop-ups can be operated without using the mouse by binding to
2801              keys and operating via the up arrow, down arrow, and enter keys.
2802
2803              To bind a previously defined pop-up menu to another menu, for
2804              use as a sub menu:
2805
2806              The following example defines a sub menu "Quit-Verify" and binds
2807              it into a main menu, called "RootMenu":
2808
2809                  AddToMenu Quit-Verify
2810                   + "Really Quit Fvwm?" Title
2811                   + "Yes, Really Quit"  Quit
2812                   + "Restart Fvwm"      Restart
2813                   + "Restart Fvwm 1.xx" Restart fvwm1 -s
2814                   + ""                  Nop
2815                   + "No, Don't Quit"    Nop
2816
2817                  AddToMenu RootMenu "Root Menu" Title
2818                   + "Open XTerm Window" Popup NewWindowMenu
2819                   + "Login as Root"     Exec exec xterm -T Root -n Root -e su -
2820                   + "Login as Anyone"   Popup AnyoneMenu
2821                   + "Remote Hosts"      Popup HostMenu
2822                   + ""                  Nop
2823                   + "X utilities"       Popup Xutils
2824                   + ""                  Nop
2825                   + "Fvwm Modules"      Popup Module-Popup
2826                   + "Fvwm Window Ops"   Popup Window-Ops
2827                   + ""                  Nop
2828                   + "Previous Focus"    Prev (AcceptsFocus) Focus
2829                   + "Next Focus"        Next (AcceptsFocus) Focus
2830                   + ""                  Nop
2831                   + "Refresh screen"    Refresh
2832                   + ""                  Nop
2833                   + "Reset X defaults"  Exec xrdb -load \
2834                                         $HOME/.Xdefaults
2835                   + ""                  Nop
2836                   + ""                  Nop
2837                   + Quit                Popup Quit-Verify
2838
2839              Popup differs from Menu in that pop-ups do not stay up if the
2840              user simply clicks.  These are popup-menus, which are a little
2841              hard on the wrist.  Menu menus stay up on a click action.  See
2842              the Menu command for an explanation of the interactive behavior
2843              of menus.  A menu can be open up to ten times at once, so a menu
2844              may even use itself or any of its predecessors as a sub menu.
2845
2846       TearMenuOff
2847              When assigned to a menu item, it inserts a tear off bar into the
2848              menu (a horizontal broken line).  Activating that item tears off
2849              the menu.  If the menu item has a label, it is shown instead of
2850              the broken line.  If used outside menus, this command does
2851              nothing.  Examples:
2852
2853                  AddToMenu WindowMenu
2854                  + I "" TearMenuOff
2855
2856                  AddToMenu RootMenu
2857                  + I "click here to tear me off" TearMenuOff
2858
2859       Title
2860              Does nothing This is used to insert a title line in a popup or
2861              menu.
2862
2863   Miscellaneous Commands
2864       BugOpts [option [bool]], ...
2865              This command controls several workarounds for bugs in third
2866              party programs.  The individual options are separated by commas.
2867              The optional argument bool is a boolean argument and controls if
2868              the bug workaround is enabled or not.  It can either be "True"
2869              or "False" to turn the option on or off, or "toggle" to switch
2870              is back and forth.  If bool is omitted, the default setting is
2871              restored.
2872
2873              FlickeringMoveWorkaround disables ConfigureNotify events that
2874              are usually sent to an application while it is moved.  If some
2875              windows flicker annoyingly while being moved, this option may
2876              help you.  Note that if this problem occurs it is not an fvwm
2877              bug, it is a problem of the application.
2878
2879              MixedVisualWorkaround makes fvwm install the root colormap
2880              before it does some operations using the root window visuals.
2881              This is only useful when the -visual option is used to start
2882              fvwm and then only with some configurations of some servers
2883              (e.g. Exceed 6.0 with an 8 bit PseudoColor root and fvwm using a
2884              24 bit TrueColor visual).
2885
2886              The ModalityIsEvil option controls whether Motif applications
2887              have the ability to have modal dialogs (dialogs that force you
2888              to close them first before you can do anything else).  The
2889              default is to not allow applications to have modal dialogs.  Use
2890              this option with care.  Once this option is turned on, you have
2891              to restart fvwm to turn it off.
2892
2893              RaiseOverNativeWindows makes fvwm try to raise the windows it
2894              manages over native windows of the X server's host system.  This
2895              is needed for some X servers running under Windows, Windows NT
2896              or Mac OS X.  Fvwm tries to detect if it is running under such
2897              an X server and initializes the flag accordingly.
2898
2899              RaiseOverUnmanaged makes fvwm try to raise the windows it
2900              manages over override_redirect windows.  This is used to cope
2901              with ill-mannered applications that use long-lived windows of
2902              this sort, contrary to ICCCM conventions.  It is useful with the
2903              Unmanaged style option too.
2904
2905              FlickeringQtDialogsWorkaround suppresses flickering of the
2906              focused window in some modules when using KDE or QT applications
2907              with application modal dialog windows.  By default this option
2908              is turned on.  This option may be visually disturbing for other
2909              applications using windows not managed by fvwm.  Since these
2910              applications are rare it is most likely safe to leave this
2911              option at its default.
2912
2913              QtDragnDropWorkaround suppresses the forwarding of unknown
2914              ClientEvent messages to windows -- usually this is harmless, but
2915              Qt has problems handling unrecognised ClientEvent messages.
2916              Enabling this option might therefore help for Qt applications
2917              using DragnDrop.  This option is off by default.
2918
2919              EWMHIconicStateWorkaround is needed by EWMH compliant pagers or
2920              taskbars which represent windows which are on a different
2921              desktops as iconified.  These pagers and taskbars use a version
2922              of the EWMH specification before version 1.2 (the current KDE 2
2923              & 3 versions).  These pagers and taskbars use the IconicState
2924              WM_STATE state to determine if an application is iconified.
2925              This state, according to the ICCCM, does not imply that a window
2926              is iconified (in the usual sense).  Turning on this option
2927              forces fvwm to establish an equivalence between the IconicState
2928              WM_STATE state and the iconified window.  This violates ICCCM
2929              compliance but should not cause big problems.  By default this
2930              option is off.
2931
2932              With the DisplayNewWindowNames enabled, fvwm prints the name,
2933              icon name (if available), resource and class of new windows to
2934              the console.  This can help in finding the correct strings to
2935              use in the Style command.
2936
2937              When the ExplainWindowPlacement option is enabled, fvwm prints a
2938              message to the console whenever a new window is placed or one of
2939              the commands PlaceAgain, Recapture or RecaptureWindow is used.
2940              The message explains on which desk, page, Xinerama screen and
2941              position it was placed and why.  This option can be used to
2942              figure out why a specific window does not appear where you think
2943              it should.
2944
2945              The DebugCRMotionMethod option enables some debugging code in
2946              the ConfigureRequest handling routines of fvwm.  It is not
2947              helpful for the user, but if you report a bug to the fvwm team
2948              we may ask you to enable this option.
2949
2950              The TransliterateUtf8 option enables transliteration during
2951              conversions from utf-8 strings.  By default fvwm will not
2952              transliterate during conversion, but will fall back to alternate
2953              strings provided by the clients if conversion from utf-8 fails
2954              due to characters which have no direct correspondence in the
2955              target charecter set.  Some clients however neglect to set non
2956              utf-8 properties correctly in which case this option may help.
2957
2958       BusyCursor [Option bool], ...
2959              This command controls the cursor during the execution of certain
2960              commands.  Option can be DynamicMenu, ModuleSynchronous, Read,
2961              Wait or *.  An option must be followed by a boolean argument
2962              bool.  You can use commas to separate individual options.  If
2963              you set an option to "True", then when the corresponding command
2964              is run, fvwm displays the cursor of the WAIT context of the
2965              CursorStyle command.  "False" forces to not display the cursor.
2966              The default is:
2967
2968                  BusyCursor DynamicMenu False, ModuleSynchronous False, \
2969                    Read False, Wait False
2970
2971              The * option refers to all available options.
2972
2973              The Read option controls the PipeRead command.
2974
2975              The DynamicMenu option affects the DynamicPopupAction and
2976              MissingSubmenuFunction options of the AddToMenu command.  If
2977              this option is set to "False", then the busy cursor is not
2978              displayed during a dynamic menu command even if this command is
2979              a Read or PipeRead command and the Read option is set to "True".
2980
2981              The ModuleSynchronous option affects the ModuleSynchronous
2982              command.  If this option is set to "False", then the busy cursor
2983              is not displayed while fvwm waits for a module started by
2984              ModuleSynchronous to complete its startup.
2985
2986              The Wait option affects only the root cursor.  During a wait
2987              pause the root cursor is replaced by the busy cursor and fvwm is
2988              still fully functional (you can escape from the pause, see the
2989              EscapeFunc command).  If you want to use this option and if you
2990              do not use the default root cursor, you must set your root
2991              cursor with the CursorStyle command.
2992
2993       ClickTime [delay]
2994              Specifies the maximum delay in milliseconds between a button
2995              press and a button release for the Function command to consider
2996              the action a mouse click.  The default delay is 150
2997              milliseconds.  Omitting the delay value resets the ClickTime to
2998              the default.
2999
3000       ColorLimit limit
3001              This command is obsolete.  See the --color-limit option to fvwm.
3002
3003       ColormapFocus FollowsMouse | FollowsFocus
3004              By default, fvwm installs the colormap of the window that the
3005              cursor is in.  If you use
3006
3007                  ColormapFocus FollowsFocus
3008
3009              then the installed colormap is the one for the window that
3010              currently has the keyboard focus.
3011
3012       CursorStyle context [num | name | None | Tiny | file [x y] [fg bg]]
3013              Defines a new cursor for the specified context.  Note that this
3014              command can not control the shapes an applications uses, for
3015              example, to indicate that it is busy.  The various contexts are:
3016
3017              POSITION (top_left_corner)
3018                  used when initially placing windows
3019
3020              TITLE (top_left_arrow)
3021                  used in a window title-bar
3022
3023              DEFAULT (top_left_arrow)
3024                  used in windows that do not set their cursor
3025
3026              SYS (hand2)
3027                  used in one of the title-bar buttons
3028
3029              MOVE (fleur)
3030                  used when moving or resizing windows
3031
3032              RESIZE (sizing)
3033                  used when moving or resizing windows
3034
3035              WAIT (watch)
3036                  used during certain fvwm commands (see BusyCursor for
3037                  details)
3038
3039              MENU (top_left_arrow)
3040                  used in menus
3041
3042              SELECT (crosshair)
3043                  used when the user is required to select a window
3044
3045              DESTROY (pirate)
3046                  used for Destroy, Close, and Delete commands
3047
3048              TOP (top_side)
3049                  used in the top side-bar of a window
3050
3051              RIGHT (right_side)
3052                  used in the right side-bar of a window
3053
3054              BOTTOM (bottom_side)
3055                  used in the bottom side-bar of a window
3056
3057              LEFT (left_side)
3058                  used in the left side-bar of a window
3059
3060              TOP_LEFT (top_left_corner)
3061                  used in the top left corner of a window
3062
3063              TOP_RIGHT (top_right_corner)
3064                  used in the top right corner of a window
3065
3066              BOTTOM_LEFT (bottom_left_corner)
3067                  used in the bottom left corner of a window
3068
3069              BOTTOM_RIGHT (bottom_right_corner)
3070                  used in the bottom right corner of a window
3071
3072              TOP_EDGE (top_side)
3073                  used at the top edge of the screen
3074
3075              RIGHT_EDGE (right_side)
3076                  used at the right edge of the screen
3077
3078              BOTTOM_EDGE (bottom_side)
3079                  used at the bottom edge of the screen
3080
3081              LEFT_EDGE (left_side)
3082                  used at the left edge of the screen
3083
3084              ROOT (left_ptr)
3085                  used as the root cursor
3086
3087              STROKE (plus)
3088                  used during a StrokeFunc command.
3089
3090              The defaults are shown in parentheses above.  If you ever want
3091              to restore the default cursor for a specific context you can
3092              omit the second argument.
3093
3094              The second argument is either the numeric value of the cursor as
3095              defined in the include file X11/cursorfont.h or its name
3096              (without the XC_ prefix).  Alternatively, the xpm file name may
3097              be specified.  The name can also be None (no cursor) or Tiny (a
3098              single pixel as the cursor).
3099
3100                  # make the kill cursor be XC_gumby (both forms work):
3101                  CursorStyle DESTROY 56
3102                  CursorStyle DESTROY gumby
3103
3104              Alternatively, the cursor can be loaded from an (XPM, PNG or
3105              SVG) image file.  If fvwm is compiled with Xcursor support, full
3106              ARGB is used, and (possibly animated) cursor files made with the
3107              xcursorgen program can be loaded.  Otherwise the cursor is
3108              converted to monochrome.
3109
3110              The optional x and y arguments (following a file argument)
3111              specifies the hot-spot coordinate with 0 0 as the top left
3112              corner of the image.  Coordinates within the image boundary are
3113              valid and overrides any hot-spot defined in the (XPM/Xcursor)
3114              image file.  An invalid or undefined hot-spot is placed in the
3115              center of the image.
3116
3117                  CursorStyle ROOT cursor_image.png 0 0
3118
3119              The optional fg and bg arguments specify the foreground and
3120              background colors for the cursor, defaulting to black and white
3121              (reverse video compared to the actual bitmap).  These colors are
3122              only used with monochrome cursors.  Otherwise they are silently
3123              ignored.
3124
3125                  CursorStyle ROOT nice_arrow.xpm yellow black
3126
3127       DefaultColors [foreground] [background]
3128              DefaultColors sets the default foreground and background colors
3129              used in miscellaneous windows created by fvwm, for example in
3130              the geometry feedback windows during a move or resize operation.
3131              If you do not want to change one color or the other, use - as
3132              its color name.  To revert to the built-in default colors omit
3133              both color names.  Note that the default colors are not used in
3134              menus, window titles or icon titles.
3135
3136       DefaultColorset [num]
3137              DefaultColorset sets the colorset used by the windows controlled
3138              by the DefaultColors command.  To revert back to the
3139              DefaultColors colors use
3140
3141                  DefaultColorset -1
3142
3143              or any variant of the DefaultColors command.
3144
3145       DefaultFont [fontname]
3146              DefaultFont sets the default font to font fontname.  The default
3147              font is used by fvwm whenever no other font has been specified.
3148              To reset the default font to the built-in default, omit the
3149              argument.  The default font is used for menus, window titles,
3150              icon titles as well as the geometry feedback windows during a
3151              move or resize operation.  To override the default font in a
3152              specific context, use the Style * Font, Style * IconFont, or
3153              MenuStyle commands.
3154
3155       DefaultIcon filename
3156              Sets the default icon which is used if a window has neither an
3157              client-supplied icon nor an icon supplied via the Icon option of
3158              the Style command.
3159
3160       DefaultLayers bottom put top
3161              Changes the layers that are used for the StaysOnBottom,
3162              StaysPut, StaysOnTop Style options.  Initially, the layers 2, 4
3163              and 6 are used.
3164
3165       Deschedule [command_id]
3166              Removes all commands that were scheduled with the id command_id
3167              with the Schedule command from the list of commands to be
3168              executed unless they were already executed.  If the command_id
3169              is omitted, the value of the variable $[schedule.last] is used
3170              as the id.
3171
3172       Emulate Fvwm | Mwm | Win
3173              This command is a catch all for how miscellaneous things are
3174              done by fvwm.  Right now this command affects where the
3175              move/resize feedback window appears and how window placement is
3176              aborted.  To have more Mwm- or Win-like behavior you can call
3177              Emulate with Mwm or Win as its argument.  With Mwm resize and
3178              move feedback windows are in the center of the screen, instead
3179              of the upper left corner.  This also affects how manual
3180              placement is aborted.  See the ManualPlacement description.
3181
3182       EscapeFunc
3183              By default the key sequence Ctrl-Alt-Escape allows for escaping
3184              from a Wait pause and from a locked ModuleSynchronous command.
3185              The EscapeFunc command used with the Key command allows for
3186              configuring this key sequence.  An example:
3187
3188                  Key Escape A MC -
3189                  Key Escape A  S EscapeFunc
3190
3191              replaces the Ctrl-Alt-Escape key sequence with Shift-Escape for
3192              aborting a Wait pause and ModuleSynchronous command.  EscapeFunc
3193              used outside the Key command does nothing.
3194
3195       FakeClick [command value] ...
3196              This command is mainly intended for debugging fvwm and no
3197              guarantees are made that it works for you.  FakeClick can
3198              simulate mouse button press and release events and pass them to
3199              fvwm or the applications.  The parameters are a list of commands
3200              which consist of pairs of command tokens and integer values, The
3201              press and release commands are followed by the appropriate mouse
3202              button number and generate a button press or release event on
3203              the window below the pointer.  The wait commands pauses fvwm for
3204              the given number of milliseconds.  The modifiers command
3205              simulates pressing or releasing modifier keys.  The values 1 to
3206              5 are mapped to Mod1 to Mod5 while 6, 7 and 8 are mapped to
3207              Shift , Lock and Control The modifier is set for any further
3208              button events.  To release a modifier key, use the corresponding
3209              negative number.  The depth command determines to which window
3210              the button events are sent.  With a depth of 1, all events go to
3211              the root window, regardless of the pointer's position.  With 2,
3212              the event is passed to the top level window under the pointer
3213              which is usually the frame window.  With 3, events go to the
3214              client window.  Higher numbers go to successive sub windows.
3215              Zero (0) goes to the smallest window that contains the pointer.
3216              Note that events propagate upward.
3217
3218                  FakeClick depth 2 press 1 wait 250 release 1
3219
3220              This simulates a click with button 1 in the parent window (depth
3221              2) with a delay of 250 milliseconds between the press and the
3222              release.  Note: all command names can be abbreviated with their
3223              first letter.
3224
3225       FakeKeypress [command value] ...
3226              This command is mainly intended for debugging fvwm and no
3227              guarantees are made that it works for you.  FakeKeypress can
3228              simulate key press and release events and pass them to fvwm or
3229              applications.  The parameters are a list of commands which
3230              consist of pairs of command tokens and values.  The press and
3231              release commands are followed by a key name.  The key name is a
3232              standard X11 key name as defined in
3233              /usr/include/X11/keysymdef.h, (without the XK_ prefix), or the
3234              keysym database /usr/X11R6/lib/X11/XKeysymDB.  The wait,
3235              modifiers and depth commands are the same as those used by
3236              FakeClick.
3237
3238              Save all GVim sessions with: "Esc:w\n"
3239
3240                  All (gvim) FakeKeypress press Escape \
3241                                          press colon \
3242                                          press w \
3243                                          press Return
3244
3245              Save & exit all GVim sessions with: "Esc:wq\n"
3246
3247                  All (gvim) FakeKeypress press Escape \
3248                                          press colon \
3249                                          press w \
3250                                          press q \
3251                                          press Return
3252
3253              Send A to a specific window:
3254
3255                  WindowId 0x3800002 FakeKeypress press A
3256
3257              Note: all command names can be abbreviated with their first
3258              letter.
3259
3260       GlobalOpts [options]
3261              This command is obsolete.  Please replace the global options in
3262              your configuration file according to the following table:
3263
3264                  GlobalOpts WindowShadeShrinks
3265                    -->
3266                  Style * WindowShadeShrinks
3267
3268                  GlobalOpts WindowShadeScrolls
3269                    -->
3270                  Style * WindowShadeScrolls
3271
3272                  GlobalOpts SmartPlacementIsReallySmart
3273                    -->
3274                  Style * MinOverlapPlacement
3275
3276                  GlobalOpts SmartPlacementIsNormal
3277                    -->
3278                  Style * TileCascadePlacement
3279
3280                  GlobalOpts ClickToFocusDoesntPassClick
3281                    -->
3282                  Style * ClickToFocusPassesClickOff
3283
3284                  GlobalOpts ClickToFocusPassesClick
3285                    -->
3286                  Style * ClickToFocusPassesClick
3287
3288                  GlobalOpts ClickToFocusDoesntRaise
3289                    -->
3290                  Style * ClickToFocusRaisesOff
3291
3292                  GlobalOpts ClickToFocusRaises
3293                    -->
3294                  Style * ClickToFocusRaises
3295
3296                  GlobalOpts MouseFocusClickDoesntRaise
3297                    -->
3298                  Style * MouseFocusClickRaisesOff
3299
3300                  GlobalOpts MouseFocusClickRaises
3301                    -->
3302                  Style * MouseFocusClickRaises
3303
3304                  GlobalOpts NoStipledTitles
3305                    -->
3306                  Style * !StippledTitle
3307
3308                  GlobalOpts StipledTitles
3309                    -->
3310                  Style * StippledTitle
3311
3312                  GlobalOpts CaptureHonorsStartsOnPage
3313                    -->
3314                  Style * CaptureHonorsStartsOnPage
3315
3316                  GlobalOpts CaptureIgnoresStartsOnPage
3317                    -->
3318                  Style * CaptureIgnoresStartsOnPage
3319
3320                  GlobalOpts RecaptureHonorsStartsOnPage
3321                    -->
3322                  Style * RecaptureHonorsStartsOnPage
3323
3324                  GlobalOpts RecaptureIgnoresStartsOnPage
3325                    -->
3326                  Style * RecaptureIgnoresStartsOnPage
3327
3328                  GlobalOpts ActivePlacementHonorsStartsOnPage
3329                    -->
3330                  Style * ManualPlacementHonorsStartsOnPage
3331
3332                  GlobalOpts ActivePlacementIgnoresStartsOnPage
3333                    -->
3334                  Style * ManualPlacementIgnoresStartsOnPage
3335
3336                  GlobalOpts RaiseOverNativeWindows
3337                    -->
3338                  BugOpts RaiseOverNativeWindows on
3339
3340                  GlobalOpts IgnoreNativeWindows
3341                    -->
3342                  BugOpts RaiseOverNativeWindows off
3343
3344
3345       HilightColor textcolor backgroundcolor
3346              This command is obsoleted by the Style options HilightFore and
3347              HilightBack.  Please use
3348
3349                  Style * HilightFore textcolor, HilightBack backgroundcolor
3350
3351              instead.
3352
3353       HilightColorset [num]
3354              This command is obsoleted by the Style option HilightColorset.
3355              Please use
3356
3357                  Style * HilightColorset num
3358
3359              instead.
3360
3361       IconFont [fontname]
3362              This command is obsoleted by the Style option IconFont.  Please
3363              use
3364
3365                  Style * IconFont fontname
3366
3367              instead.
3368
3369       IconPath path
3370              This command is obsolete.  Please use ImagePath instead.
3371
3372       ImagePath path
3373              Specifies a colon separated list of directories in which to
3374              search for images (both monochrome and pixmap).  To find an
3375              image given by a relative pathname, fvwm looks into each
3376              directory listed in turn, and uses the first file found.
3377
3378              If a directory is given in the form "/some/dir;.ext", this means
3379              all images in this directory have the extension ".ext" that
3380              should be forced.  The original image name (that may contain
3381              another extension or no extension at all) is not probed, instead
3382              ".ext" is added or replaces the original extension.  This is
3383              useful, for example, if a user has some image directories with
3384              ".xpm" images and other image directories with the same names,
3385              but ".png" images.
3386
3387              The path may contain environment variables such as $HOME (or
3388              ${HOME}).  Further, a '+' in the path is expanded to the
3389              previous value of the path, allowing appending or prepending to
3390              the path easily.
3391
3392              For example:
3393
3394                  ImagePath $HOME/icons:+:/usr/include/X11/bitmaps
3395
3396              Note: if the FvwmM4 module is used to parse your config files,
3397              then m4 may want to mangle the word "include" which frequently
3398              shows up in the ImagePath command.  To fix this one may add
3399
3400                  undefine(`include')
3401
3402              prior to the ImagePath command, or better: use the -m4-prefix
3403              option to force all m4 directives to have a prefix of "m4_" (see
3404              the FvwmM4 man page).
3405
3406       LocalePath path
3407              Specifies a colon separated list of "locale path" in which to
3408              search for string translations.  A locale path is constituted by
3409              a directory path and a text domain separated by a semicolon
3410              (';').  As an example the default locale path is:
3411
3412                  /install_prefix/share/locale;fvwm
3413
3414              where install_prefix is the fvwm installation directory.  With
3415              such a locale path translations are searched for in
3416
3417                  /install_prefix/share/locale/lang/LC_MESSAGES/fvwm.mo
3418
3419              where lang depends on the locale.  If no directory is given the
3420              default directory path is assumed.  If no text domain is given,
3421              fvwm is assumed.  Without argument the default locale path is
3422              restored.
3423
3424              As for the ImagePath command, path may contain environment
3425              variables and a '+' to append or prepend the locale path easily.
3426
3427              For example, the fvwm-themes package uses
3428
3429                  LocalePath ";fvwm-themes:+"
3430
3431              to add locale catalogs.
3432
3433              The default fvwm catalog contains a few strings used by the fvwm
3434              executable itself (Desk and Geometry) and strings used in some
3435              default configuration files and FvwmForm configuration.  You can
3436              take a look at the po/ subdirectory of the fvwm source to get
3437              the list of the strings with a possible translation in various
3438              languages.  At present, very few languages are supported.
3439
3440              The main use of locale catalogs is via the "$[gt.string]"
3441              parameter:
3442
3443                  DestroyMenu MenuFvwmWindowOps
3444                  AddToMenu   MenuFvwmWindowOps "$[gt.Window Ops]" Title
3445                  + "$[gt.&Move]"              Move
3446                  + "$[gt.&Resize]"            Resize
3447                  + "$[gt.R&aise]"             Raise
3448                  + "$[gt.&Lower]"             Lower
3449                  + "$[gt.(De)&Iconify]"       Iconify
3450                  + "$[gt.(Un)&Stick]"         Stick
3451                  + "$[gt.(Un)Ma&ximize]"      Maximize
3452                  + "" Nop
3453                  + "$[gt.&Close]"             Close
3454                  + "$[gt.&Destroy]"           Destroy
3455
3456              gives a menu in the locale languages if translations are
3457              available.
3458
3459              Note that the FvwmScript module has a set of special
3460              instructions for string translation.  It is out of the scope of
3461              this discussion to explain how to build locale catalogs.  Please
3462              refer to the GNU gettext documentation.
3463
3464       PixmapPath path
3465              This command is obsolete.  Please use ImagePath instead.
3466
3467       PrintInfo subject [verbose]
3468              Print information on subject on stderr.  An optional integer
3469              argument verbose defines the level of information which is
3470              given.  The current valid subjects are:
3471
3472              Colors which prints information about the colors used by fvwm.
3473              This useful on screens which can only display 256 (or less)
3474              colors at once.  If verbose is one or greater the palette used
3475              by fvwm is printed.  If you have a limited color palette, and
3476              you run out of colors, this command might be helpful.
3477
3478              ImageCache which prints information about the images loaded by
3479              fvwm.  If verbose is one or greater all images in the cache will
3480              be listed together with their respective reuse.
3481
3482              Locale which prints information on your locale and the fonts
3483              that fvwm used.  verbose can be 1 or 2.
3484
3485              nls which prints information on the locale catalogs that fvwm
3486              used
3487
3488              style which prints information on fvwm styles.  verbose can be
3489              1.
3490
3491              bindings which prints information on all the bindings fvwm has:
3492              key, mouse and stroke bindings.  verbose has no effect with this
3493              option.
3494
3495              infostore which prints information on all entries in the
3496              infostore, listing the key and its value.  verbose has no effect
3497              with this option.
3498
3499       Repeat
3500              When the Repeat command is invoked, the last command that was
3501              executed by fvwm is executed again.  This happens regardless of
3502              whether it was triggered by user interaction, a module or by an
3503              X event.  Commands that are executed from a function defined
3504              with the Function command, from the Read or PipeRead commands or
3505              by a menu are not repeated.  Instead, the function, menu or the
3506              Read or PipeRead command is executed again.
3507
3508       Schedule [Periodic] delay_ms [command_id] command
3509              The command is executed after about delay_ms milliseconds.  This
3510              may be useful in some tricky setups.  The command is executed in
3511              the same context window as the Schedule command.  An optional
3512              integer argument command_id may be given in decimal, hexadecimal
3513              or octal format.  This id can be used with the Deschedule
3514              command to remove the scheduled command before it is executed.
3515              If no id is given, fvwm uses negative id numbers, starting with
3516              -1 and decreasing by one with each use of the Schedule command.
3517              Note that the Schedule command and its arguments undergo the
3518              usual command line expansion, and, when command is finally
3519              executed, it is expanded again.  It may therefore be necessary
3520              to quote the parts of the command that must not be expanded
3521              twice.
3522
3523              Note: A window's id as it is returned with $[w.id] can be used
3524              as the command_id.  Example:
3525
3526                  Current Schedule 1000 $[w.id] WindowShade
3527
3528              The Schedule command also supports the optional keyword Periodic
3529              which indicates that the command should be executed every
3530              delay_ms.  Example:
3531
3532                  Schedule Periodic 10000 PipeRead '[ -N "$MAIL" ] && echo \
3533                       Echo You have mail'
3534
3535              Use the Deschedule command to stop periodic commands.
3536
3537       State state [bool]
3538              Sets, clears or toggles one of the 32 user defined states which
3539              are associated with each window.  The state is a number ranging
3540              from 0 to 31.  The states have no meaning in fvwm, but they can
3541              be checked in conditional commands like Next with the State
3542              condition.  The optional argument bool is a boolean argument.
3543              "True" sets the given state, while "False" clears it.  Using
3544              "toggle" switches to the opposite state.  If the bool argument
3545              is not given, the state is toggled.
3546
3547       WindowFont [fontname]
3548              This command is obsoleted by the Style option Font.  Please use
3549
3550                  Style * Font fontname
3551
3552              instead.
3553
3554       WindowList [(conditions)] [position] [options] [double-click-action]
3555              Generates a pop-up menu (and pops it up) in which the title and
3556              geometry of each of the windows currently on the desktop are
3557              shown.
3558
3559              The format of the geometry part is: desk(layer): x-geometry
3560              sticky, where desk and layer are the corresponding numbers and
3561              sticky is empty or a capital S.  The geometry of iconified
3562              windows is shown in parentheses.  Selecting an item from the
3563              window list pop-up menu causes the interpreted function
3564              "WindowListFunc" to be run with the window id of that window
3565              passed in as $0.  The default "WindowListFunc" looks like this:
3566
3567                  AddToFunc WindowListFunc
3568                  + I Iconify off
3569                  + I FlipFocus
3570                  + I Raise
3571                  + I WarpToWindow 5p 5p
3572
3573              You can destroy the built-in "WindowListFunc" and create your
3574              own if these defaults do not suit you.
3575
3576              The window list menu uses the "WindowList" menu style if it is
3577              defined (see MenuStyle command).  Otherwise the default menu
3578              style is used.  To switch back to the default menu style, issue
3579              the command
3580
3581                  DestroyMenuStyle WindowList
3582
3583              Example:
3584
3585                  MenuStyle WindowList SelectOnRelease Meta_L
3586
3587              The conditions can be used to exclude certain windows from the
3588              window list.  Please refer to the Current command for details.
3589              Only windows that match the given conditions are displayed in
3590              the window list.  The options below work vice versa: windows
3591              that would otherwise not be included in the window list can be
3592              selected with them.  The conditions always override the options.
3593
3594              The position arguments are the same as for Menu.  The command
3595              double-click-action is invoked if the user double-clicks (or
3596              hits the key rapidly twice if the menu is bound to a key) when
3597              bringing the window list.  The double-click-action must be
3598              quoted if it consists of more than one word.
3599
3600              The double-click-action is useful to define a default window if
3601              you have bound the window list to a key (or button) like this:
3602
3603                  # Here we call an existing function, but
3604                  # it may be different.  See the default
3605                  # WindowListFunc definition earlier in this
3606                  # man page.
3607                  AddToFunc SwitchToWindow
3608                  + I WindowListFunc
3609
3610                  Key Tab A M WindowList "Prev SwitchToWindow"
3611
3612              Hitting Alt-Tab once it brings up the window list, if you hit it
3613              twice the focus is flipped between the current and the last
3614              focused window.  With the proper SelectOnRelease menu style (see
3615              example above) a window is selected as soon as you release the
3616              Alt key.
3617
3618              The options passed to WindowList are separated by commas and can
3619              be Geometry / NoGeometry / NoGeometryWithInfo, NoDeskNum,
3620              NoLayer, NoNumInDeskTitle, NoCurrentDeskTitle, MaxLabelWidth
3621              width, TitleForAllDesks, Function funcname, Desk desknum,
3622              CurrentDesk, NoIcons / Icons / OnlyIcons, NoNormal / Normal /
3623              OnlyNormal, NoSticky / Sticky / OnlySticky, NoStickyAcrossPages
3624              / StickyAcrossPages / OnlyStickyAcrossPages, NoStickyAcrossDesks
3625              / StickyAcrossDesks / OnlyStickyAcrossDesks, NoOnTop / OnTop /
3626              OnlyOnTop, NoOnBottom / OnBottom / OnlyOnBottom, Layer m [n],
3627              UseSkipList / OnlySkipList, NoDeskSort, ReverseOrder,
3628              CurrentAtEnd, IconifiedAtEnd, UseIconName, Alphabetic /
3629              NotAlphabetic, SortByResource, SortByClass, NoHotkeys,
3630              SelectOnRelease.
3631
3632              (Note - normal means not iconic, sticky, or on top)
3633
3634              With the SortByResource option windows are alphabetically sorted
3635              first by resource class, then by resource name and then by
3636              window name (or icon name if UseIconName is specified).
3637              ReverseOrder also works in the expected manner.
3638
3639              With the SortByClass option windows are sorted just like with
3640              SortByResource, but the resource name is not taken into account,
3641              only the resource class.
3642
3643              The SelectOnRelease option works exactly like the MenuStyle
3644              option with the same name, but overrides the option given in a
3645              menu style.  By default, this option is set to the left Alt key.
3646              To switch it off, use SelectOnRelease without a key name.
3647
3648              If you pass in a function via Function funcname, it is called
3649              within a window context of the selected window:
3650
3651                  AddToFunc IFunc I Iconify toggle
3652                  WindowList Function IFunc, NoSticky, CurrentDesk, NoIcons
3653
3654              If you use the Layer m [n] option, only windows in layers
3655              between m and n are displayed.  n defaults to m.  With the
3656              ReverseOrder option the order of the windows in the list is
3657              reversed.
3658
3659              With the CurrentAtEnd option the currently focused window (if
3660              any) is shown at the bottom of the list.  This is mostly
3661              intended for simulating the Alt-Tab behavior in another GUI.
3662
3663              IconifiedAtEnd makes iconified windows be moved to the end of
3664              the list.  This is also from another GUI.
3665
3666              The NoGeometry option causes fvwm to not display the geometries
3667              as well as the separators which indicate the different desktops.
3668              NoGeometryWithInfo removes the geometries, but keep the desktop
3669              information and indicates iconic windows.  NoDeskNum causes fvwm
3670              to not display the desktop number in the geometry or before the
3671              window title with the NoGeometryWithInfo option.
3672              NoNumInDeskTitle is only useful if a desktop name is defined
3673              with the DesktopName command.  It causes fvwm to not display the
3674              desktop number before the desktop name.  By default, the
3675              WindowList menu have a title which indicates the current desk or
3676              the selected desktop if the Desk condition is used.  The
3677              NoCurrentDeskTitle option removes this title.  TitleForAllDesks
3678              causes fvwm to add a menu title with the desk name and/or number
3679              before each group of windows on the same desk.  With NoLayer,
3680              the layer of the window is not diplayed.  The options ShowPage,
3681              ShowPageX and ShowPageY enable displaying the page of the window
3682              rounded multiples of the display size.  With ShowScreen, the
3683              window's Xinerama screen number is displayed.
3684
3685              The MaxLabelWidth option takes the number of characters to print
3686              as its argument.  No more than that many characters of the
3687              window name are visible.
3688
3689              If you wanted to use the WindowList as an icon manager, you
3690              could invoke the following:
3691
3692                  WindowList OnlyIcons, Sticky, OnTop, Geometry
3693
3694              (Note - the Only options essentially wipe out all other ones...
3695              but the OnlyListSkip option which just causes WindowList to only
3696              consider the windows with WindowListSkip style.)
3697
3698       XSync
3699              When XSync is called, the X function with the same name is used
3700              to send all pending X requests to the server.  This command is
3701              intended for debugging only.
3702
3703       XSynchronize [bool]
3704              The XSynchronize command controls whether X requests are sent to
3705              the X server immediately or not.  Normally, requests are sent in
3706              larger batches to save unnecessary communication.  To send
3707              requests immediately, use "True" as the argument, to disable
3708              this use "False" or to toggle between both methods use "Toggle"
3709              or omit the bool argument.  Fvwm defaults to synchronized
3710              requests when started with the --debug option.  This command is
3711              intended for debugging only.
3712
3713       +
3714              Used to continue adding to the last specified decor, function or
3715              menu.  See the discussion for AddToDecor, AddToFunc, and
3716              AddToMenu.
3717
3718   Window Movement and Placement
3719       AnimatedMove x y [Warp]
3720              Move a window in an animated fashion.  Similar to Move command.
3721              The options are the same, except they are required, since it
3722              doesn't make sense to have a user move the window interactively
3723              and animatedly.  If the optional argument Warp is specified the
3724              pointer is warped with the window.
3725
3726       HideGeometryWindow [Never | Move | Resize]
3727              Hides the position or size window that is usually shown when a
3728              window is moved or resized interactively.  To switch it off only
3729              for move or resize operations the optional parameters Move and
3730              Resize can be used respectively.  To switch both on again use
3731              the Never option.
3732
3733       Layer [arg1 arg2] | [default]
3734              Puts the current window in a new layer.  If arg1 is non zero
3735              then the next layer is the current layer number plus arg1.  If
3736              arg1 is zero then the new layer is arg2.
3737
3738              As a special case, default puts the window in its default layer,
3739              i.e. the layer it was initially in.  The same happens if no or
3740              invalid arguments are specified.
3741
3742       Lower
3743              Allows the user to lower a window.  Note that this lowers a
3744              window only in its layer.  To bring a window to the absolute
3745              bottom, use
3746
3747                  AddToFunc lower-to-bottom
3748                   + I Layer 0 0
3749                   + I Lower
3750
3751       Move [[screen screen] [w | m]x[p | w] ... [w | m]y[p | w] ... [Warp]] |
3752       [pointer] | [ewmhiwa]
3753              Allows the user to move a window.  If called from somewhere in a
3754              window or its border, then that window is moved.  If called from
3755              the root window then the user is allowed to select the target
3756              window.  By default, the EWMH working area is honoured.
3757
3758              If the literal option screen followed by a screen argument is
3759              specified, the coordinates are interpreted as relative to the
3760              given screen.  The width and height of the screen are used for
3761              the calculations instead of the display dimensions.  The screen
3762              as interpreted as in the MoveToScreen command.  If the optional
3763              argument Warp is specified the pointer is warped with the
3764              window.  If the single argument pointer is given, the top left
3765              corner of the window is moved to the pointer position before
3766              starting the operation; this is mainly intended for internal use
3767              by modules like FvwmPager.  If the optional argument ewmhiwa is
3768              given, then the window position will ignore the working area
3769              (such as ignoring any values set via EwmhBaseStruts).
3770
3771              The operation can be aborted with Escape or any mouse button not
3772              set to place the window.  By default mouse button 2 is set to
3773              cancel the move operation.  To change this you may use the Mouse
3774              command with special context 'P' for Placement.
3775
3776              The window condition PlacedByButton can be used to check if a
3777              specific button was pressed to place the window (see Current
3778              command).
3779
3780              If the optional arguments x and y are provided, then the window
3781              is moved immediately without user interaction.  Each argument
3782              can specify an absolute or relative position from either the
3783              left/top or right/bottom of the screen.  By default, the numeric
3784              value given is interpreted as a percentage of the screen
3785              width/height, but a trailing 'p' changes the interpretation to
3786              mean pixels, while a trailing 'w' means precent of the window
3787              width/height.  To move the window relative to its current
3788              position, add the 'w' (for "window") prefix before the x and/or
3789              y value.  To move the window to a position relative to the
3790              current location of the pointer, add the 'm' (for "mouse")
3791              prefix.  To leave either coordinate unchanged, "keep" can be
3792              specified in place of x or y.
3793
3794
3795              For advanced uses, the arguments x and y can be used multiple
3796              times, but without the prefix 'm' or 'w'.  (See complex examples
3797              below).
3798
3799              Simple Examples:
3800
3801                  # Interactive move
3802                  Mouse 1 T A Move
3803                  # Move window to top left is at (10%,10%)
3804                  Mouse 2 T A Move 10 10
3805                  # Move top left to (10pixels,10pixels)
3806                  Mouse 3 T A Move 10p 10p
3807
3808              More complex examples (these can be bound as actions to
3809              keystrokes, etc.; only the command is shown, though):
3810
3811                  # Move window so bottom right is at bottom
3812                  # right of screen
3813                  Move -0 -0
3814
3815                  # Move window so top left corner is 10 pixels
3816                  # off the top left screen edge
3817                  Move +-10 +-10
3818
3819                  # Move window 5% to the right, and to the
3820                  # middle vertically
3821                  Move w+5 50
3822
3823                  # Move window up 10 pixels, and so left edge
3824                  # is at x=40 pixels
3825                  Move 40p w-10p
3826
3827                  # Move window to the mouse pointer location
3828                  Move m+0 m+0
3829
3830                  # Move window to center of screen (50% of screen
3831                  # poition minus 50% of widow size).
3832                  Move 50-50w 50-50w
3833
3834              Note: In order to obtain moving windows which do not snap to
3835              screen, with interactive move, hold down Alt whilst moving the
3836              window to disable snap attraction if it's defined.
3837
3838              See also the AnimatedMove command.
3839
3840       MoveToDesk [prev | arg1 [arg2] [min max]]
3841              Moves the selected window to another desktop.  The arguments are
3842              the same as for the GotoDesk command.  Without any arguments,
3843              the window is moved to the current desk.  MoveToDesk is a
3844              replacement for the obsolete WindowsDesk command, which can no
3845              longer be used.
3846
3847       MoveThreshold [pixels]
3848              When the user presses a mouse button upon an object fvwm waits
3849              to see if the action is a click or a drag.  If the mouse moves
3850              by more than pixels pixels it is assumed to be a drag.
3851
3852              Previous versions of fvwm hardwired pixels to 3, which is now
3853              the default value.  If pixels is negative or omitted the default
3854              value (which might be increased when 16000x9000 pixel displays
3855              become affordable) is restored.
3856
3857       MoveToPage [options] [x[p | w] y[p | w]] | [prev]
3858              Moves the selected window to another page (x,y).  The upper left
3859              page is (0,0), the upper right is (M,0), where M is one less
3860              than the current number of horizontal pages specified in the
3861              DesktopSize command.  Similarly the lower left page is (0,N),
3862              and the lower right page is (M,N).  Negative page numbers refer
3863              to pages from the rightmost/lowest page.  If x and y are not
3864              given, the window is moved to the current page (a window that
3865              has the focus but is off-screen can be retrieved with this).
3866              Moving windows to a page relative to the current page can be
3867              achieved by adding a trailing 'p' after any or both numerical
3868              arguments.  To move the window relative to its current location,
3869              add a trailing 'w'.  To move a window to the previous page use
3870              prev as the single argument.
3871
3872              Windows are usually not moved beyond desk boundaries.
3873
3874              Possible options are wrapx and wrapy to wrap around the x or y
3875              coordinate when the window is moved beyond the border of the
3876              desktop.  For example, with wrapx, when the window moves past
3877              the right edge of the desktop, it reappears on the left edge.
3878              The options nodesklimitx and nodesklimity allow moving windows
3879              beyond the desk boundaries in x and y direction (disabling the
3880              wrapx and wrapy options).
3881
3882              Examples:
3883
3884                  # Move window to page (2,3)
3885                  MoveToPage 2 3
3886
3887                  # Move window to lowest and rightmost page
3888                  MoveToPage -1 -1
3889
3890                  # Move window to last page visited
3891                  MoveToPage prev
3892
3893                  # Move window two pages to the right and one
3894                  # page up, wrap at desk boundaries
3895                  MoveToPage wrapx wrapy +2p -1p
3896
3897       MoveToScreen [screen]
3898              Moves the selected window to another Xinerama screen.  The
3899              screen argument can be 'p' for the primary screen, 'c' for the
3900              current screen (containing the mouse pointer), 'w' for the
3901              screen containing the center of +the context window, 'g' for the
3902              global screen or the screen number itself (counting from zero).
3903
3904       OpaqueMoveSize [percentage]
3905              Tells fvwm the maximum size window with which opaque window
3906              movement should be used.  The percentage is percent of the total
3907              screen area (may be greater than 100).  With
3908
3909                  OpaqueMoveSize 0
3910
3911              all windows are moved using the traditional rubber-band outline.
3912              With
3913
3914                  OpaqueMoveSize unlimited
3915
3916              or if a negative percentage is given all windows are moved as
3917              solid windows.  The default is
3918
3919                  OpaqueMoveSize 5
3920
3921              which allows small windows to be moved in an opaque manner but
3922              large windows are moved as rubber-bands.  If percentage is
3923              omitted or invalid the default value is set.  To resize windows
3924              in an opaque manner you can use the ResizeOpaque style.  See the
3925              Style command.
3926
3927       PlaceAgain [Anim] [Icon]
3928              Causes the current window's position to be re-computed using the
3929              initial window placement logic.  The window is moved to where it
3930              would have been if it were a new window that had just appeared.
3931              Most useful with Smart or Clever (ReallySmart) placement.  With
3932              the optional argument Anim an animated move is used to place the
3933              window in its new position.  With the additional option Icon,
3934              the icon is placed again instead.
3935
3936       Raise
3937              Allows the user to raise a window.  Note that this raises a
3938              window only in its layer.  To bring a window to the absolute
3939              top, use
3940
3941                  AddToFunc raise-to-top
3942                   + I Layer 0 ontop
3943                   + I Raise
3944
3945              where ontop is the highest layer used in your setup.
3946
3947       RaiseLower
3948              Alternately raises and lowers a window.  The window is raised if
3949              it is obscured by any window (except for its own transients when
3950              RaiseTransient style is used; see the Style command) otherwise
3951              it is lowered.
3952
3953       Resize [[frame] [direction dir] [warptoborder automatic]
3954       [fixeddirection] [w]width[p | c | wa | da] [w]height[p | c]]
3955              Allows for resizing a window.  If called from somewhere in a
3956              window or its border, then that window is resized.  If called
3957              from the root window then the user is allowed to select the
3958              target window.
3959
3960              The operation can be aborted with Escape or by pressing any
3961              mouse button (except button 1 which confirms it).
3962
3963              If the optional arguments width and height are provided, then
3964              the window is resized so that its dimensions are width by
3965              height.  The units of width and height are percent-of-screen,
3966              unless a letter 'p' is appended to one or both coordinates, in
3967              which case the location is specified in pixels.  With a 'c'
3968              suffix the unit defined by the client application (hence the c)
3969              is used.  With the suffix 'wa' the value is a percentage of the
3970              width or height size of the EWMH working area, and with the
3971              suffix 'da' it is a percentage of the width or height of the
3972              EWMH dynamic working area.  So you can say
3973
3974                  Resize 80c 24c
3975
3976              to make a terminal window just big enough for 80x24 characters.
3977
3978              If the width or height is prefixed with the letter 'w' the size
3979              is not taken as an absolute value but added to the current size
3980              of the window.  Example:
3981
3982                  # Enlarge window by one line
3983                  Resize keep w+1c
3984
3985              Both, width and height can be negative.  In this case the new
3986              size is the screen size minus the given value.  If either value
3987              is "keep", the corresponding dimension of the window is left
3988              untouched.  The new size is the size of the client window, thus
3989
3990                  Resize 100 100
3991
3992              may make the window bigger than the screen.  To base the new
3993              size on the size of the whole fvwm window, add the frame option
3994              after the command.  The options fixeddirection, direction and
3995              warptoborder are only used in interactive move operations.  With
3996              fixeddirection the same border is moved even if the pointer
3997              moves past the opposite border.  The direction option must be
3998              followed by a direction name such as "NorthWest", "South" or
3999              "East" (you get the idea).  Resizing is started immediately,
4000              even if the pointer is not on a border.  If the special option
4001              automatic is given as a direction argument, then the direction
4002              to resize is calculated based on the position of the pointer in
4003              the window.  If the pointer is in the middle of the window, then
4004              no direction is calculated.  The warptoborder option can be used
4005              to warp the pointer to the direction indicated.  As with the
4006              automatic option for direction, the border to warp to is
4007              calculated based on the pointer's proximity to a given border.
4008              Also, if resizing is started by clicking on the window border,
4009              the pointer is warped to the outer edge of the border.
4010
4011                  AddToFunc ResizeSE I Resize Direction SE
4012                  Mouse 3 A M ResizeSE
4013
4014       Resize [bottomright | br x y]
4015              An alternate syntax is used if the keyword bottomright or in
4016              short br follows the command name.  In this case, the arguments
4017              x and y specify the desired position of the bottom right corner
4018              of the window.  They are interpreted exactly like the x and y
4019              arguments of the Move command.  Actually, any of the options
4020              accepted by the Move command can be used.
4021
4022       ResizeMaximize [resize-arguments]
4023              Combines the effects of Resize and Maximize in a single command.
4024              When used on a maximized window, the window is resized and is
4025              still in the maximized state afterwards.  When used on an
4026              unmaximized window, the window is resized and put into the
4027              maximized state afterwards.  This is useful if the user wants to
4028              resize the window temporarily and then return to the original
4029              geometry.  The resize-arguments are the same as for the Resize
4030              command.
4031
4032       ResizeMove resize-arguments move-arguments
4033              This command does the same as the Resize and Move commands, but
4034              in a single call which is less visually disturbing.  The
4035              resize-arguments are exactly the same arguments as for the
4036              Resize command and the move-arguments are exactly the same
4037              arguments as for the Move command except the pointer option
4038              which is not supported by the ResizeMove command.
4039
4040              Examples:
4041
4042                  # Move window to top left corner and cover
4043                  # most of the screen
4044                  ResizeMove -10p -20p 0 0
4045
4046                  # Grow the focused window towards the top of screen
4047                  Current Resize keep w+$[w.y]p keep 0
4048
4049              Note: Fvwm may not be able to parse the command properly if the
4050              option bottomright of the Resize command is used.
4051
4052       ResizeMoveMaximize resize-arguments move-arguments
4053              Combines the effects of ResizeMove and Maximize in a single
4054              command.  When used on a maximized window, the window is resized
4055              and moved and is still in the maximized state afterwards.  When
4056              used on an unmaximized window, the window is resized and put
4057              into the maximized state afterwards.  This is useful if the user
4058              wants to resize the window temporarily and then return to the
4059              original geometry.  The resize-arguments and move-arguments are
4060              the same as for the ResizeMove command.
4061
4062       RestackTransients
4063              This command regroups the transients of a window close to it in
4064              the stacking order as if the window had just been lowered and
4065              then raised.  The position of the window itself is not altered.
4066              Only windows that use either the RaiseTransient or
4067              LowerTransient style are affected at all.  When
4068              RestackTransients is used on a transient window with the
4069              StackTransientParent style set, it is redirected to the parent
4070              window.
4071
4072       SetAnimation milliseconds-delay [fractions-to-move-list]
4073              Sets the time between frames and the list of fractional offsets
4074              to customize the animated moves of the AnimatedMove command and
4075              the animation of menus (if the menu style is set to animated;
4076              see MenuStyle command).  If the fractions-to-move-list is
4077              omitted, only the time between frames is altered.  The
4078              fractions-to-move-list specifies how far the window should be
4079              offset at each successive frame as a fraction of the difference
4080              between the starting location and the ending location.  e.g.:
4081
4082                  SetAnimation 10 -.01 0 .01 .03 .08 .18 .3 \
4083                    .45 .6 .75 .85 .90 .94 .97 .99 1.0
4084
4085              Sets the delay between frames to 10 milliseconds, and sets the
4086              positions of the 16 frames of the animation motion.  Negative
4087              values are allowed, and in particular can be used to make the
4088              motion appear more cartoonish, by briefly moving slightly in the
4089              opposite direction of the main motion.  The above settings are
4090              the default.
4091
4092       SnapAttraction [proximity [behaviour] [Screen]]
4093              The SnapAttraction command is obsolete.  It has been replaced by
4094              the Style command option SnapAttraction.
4095
4096       SnapGrid [x-grid-size y-grid-size]
4097              The SnapGrid command is obsolete.  It has been replaced by the
4098              Style command option SnapGrid.
4099
4100       WindowsDesk arg1 [arg2]
4101              Moves the selected window to another desktop.
4102
4103              This command has been removed and must be replaced by
4104              MoveToDesk, the arguments for which are the same as for the
4105              GotoDesk command.
4106
4107              Important
4108              You cannot simply change the name of the command: the syntax has
4109              changed.  If you used:
4110
4111
4112                  WindowsDesk n
4113
4114              to move a window to desk n, you have to change it to:
4115
4116                  MoveToDesk 0 n
4117
4118       XorPixmap [pixmap]
4119              Selects the pixmap with which bits are xor'ed when doing
4120              rubber-band window moving or resizing.  This has a better chance
4121              of making the rubber-band visible if XorValue does not give good
4122              results.  An example pixmap resize.rainbow.xpm is provided with
4123              the icon distribution.  To turn the XorPixmap off again use the
4124              XorValue command or omit the pixmap argument.
4125
4126       XorValue [number]
4127              Changes the value with which bits are xor'ed when doing
4128              rubber-band window moving or resizing.  Valid values range from
4129              zero to the maximum value of an unsigned long integer on your
4130              system.  Setting this value is a trial-and-error process.  The
4131              default value 0 tries to find a value that gives a good contrast
4132              to black and white.  The default value is used if the given
4133              number is omitted or invalid.
4134
4135   Focus & Mouse Movement
4136       CursorMove horizontal[p] vertical[p]
4137              Moves the mouse pointer by horizontal pages in the X direction
4138              and vertical pages in the Y direction.  Either or both entries
4139              may be negative.  Both horizontal and vertical values are
4140              expressed in percent of pages, so
4141
4142                  CursorMove 100 100
4143
4144              means to move down and right by one full page.
4145
4146                  CursorMove 50 25
4147
4148              means to move right half a page and down a quarter of a page.
4149              Alternatively, the distance can be specified in pixels by
4150              appending a 'p' to the horizontal and/or vertical specification.
4151              For example
4152
4153                  CursorMove -10p -10p
4154
4155              means move ten pixels up and ten pixels left.  The CursorMove
4156              function should not be called from pop-up menus.
4157
4158       FlipFocus [NoWarp]
4159              Executes a Focus command as if the user had used the pointer to
4160              select the window.  This command alters the order of the
4161              WindowList in the same way as clicking in a window to focus,
4162              i.e. the target window is removed from the WindowList and placed
4163              at the start.  This command is recommended for use with the
4164              Direction command and in the function invoked from WindowList.
4165
4166       Focus [NoWarp]
4167              Sets the keyboard focus to the selected window.  If the NoWarp
4168              argument is given, this is all it does.  Otherwise it also moves
4169              the viewport or window as needed to make the selected window
4170              visible.  This command does not automatically raise the window.
4171              Does not warp the pointer into the selected window (see
4172              WarpToWindow function).  Does not de-iconify.  This command does
4173              not alter the order of the WindowList, it rotates the WindowList
4174              around so that the target window is at the start.
4175
4176              When the NoWarp argument is given, Focus cannot transfer the
4177              keyboard focus to windows on other desks.
4178
4179              To raise and/or warp a pointer to a window together with Focus
4180              or FlipFocus, use a function, like:
4181
4182                  AddToFunc SelectWindow
4183                  + I Focus
4184                  + I Iconify false
4185                  + I Raise
4186                  + I WarpToWindow 50 8p
4187
4188       WarpToWindow [!raise | raise] x[p] y[p]
4189              Warps the cursor to the associated window and raises it (unless
4190              the option !raise is present).  The parameters x and y default
4191              to percentage of window down and in from the upper left hand
4192              corner (or number of pixels down and in if 'p' is appended to
4193              the numbers).  If a number is negative the opposite edge is used
4194              and the direction reversed.  This command works also with
4195              windows that are not managed by fvwm.  In this case fvwm does
4196              not bring the window onto the screen if it is not visible.  For
4197              example it is possible to warp the pointer to the center of the
4198              root window on screen 1:
4199
4200                  WindowId root 1 WarpToWindow 50 50
4201
4202   Window State
4203       Close
4204              If the window accepts the delete window protocol a message is
4205              sent to the window asking it to gracefully remove itself.  If
4206              the window does not understand the delete window protocol then
4207              the window is destroyed as with the Destroy command.  Note: if
4208              the window accepts the delete window protocol but does not close
4209              itself in response, the window is not deleted.
4210
4211       Delete
4212              Sends a message to a window asking that it remove itself,
4213              frequently causing the application to exit.
4214
4215       Destroy
4216              Destroys an application window, which usually causes the
4217              application to crash and burn.
4218
4219       Iconify [bool]
4220              Iconifies a window if it is not already iconified or
4221              de-iconifies it if it is already iconified.  The optional
4222              argument bool is a boolean argument.  "True" means only
4223              iconification is allowed, while "False" forces de-iconification.
4224              Using "toggle" switches between iconified and de-iconified
4225              states.
4226
4227              There are a number of Style options which influence the
4228              appearance and behavior of icons (e.g.  StickyIcon, NoIcon).
4229
4230              For backward compatibility, the optional argument may also be a
4231              positive number instead of "True", or a negative number instead
4232              of "False".  Note that this syntax is obsolete, and will be
4233              removed in the future.
4234
4235       Maximize [flags] [bool | forget] [horizontal[p]] [vertical[p]]
4236              Without its optional arguments (or if the bool bit has the value
4237              "toggle") Maximize causes the window to alternately switch from
4238              a full-screen size to its normal size.  To force a window into
4239              maximized (normal) state you can use a "True" or "False" value
4240              for the bool argument.
4241
4242              With just the parameter "forget" a maximized window reverts back
4243              into normal state but keeps its current maximized size.  This
4244              can be useful in conjunction with the commands ResizeMaximize
4245              and ResizeMoveMaximize.  If the window is not maximized, nothing
4246              happens.
4247
4248              With the optional arguments horizontal and vertical, which are
4249              expressed as percentage of a full screen, the user can control
4250              the new size of the window.  An optional suffix 'p' can be used
4251              to indicate pixels instead of percents of the screen size.  If
4252              horizontal is greater than 0 then the horizontal dimension of
4253              the window is set to horizontal*screen_width/100.  If the value
4254              is smaller than 0 the size is subtracted from the screen width,
4255              i.e. -25 is the same as 75.  If horizontal is "grow", it is
4256              maximized to curren available space until finding any obstacle.
4257              The vertical resizing is similar.  If both horizontal and
4258              vertical values are "grow", it expands vertically first, then
4259              horizontally to find space.  Instead of the horizontal "grow"
4260              argument, "growleft" or "growright" can be used respectively
4261              "growup" and "growdown".  The optional flags argument is a space
4262              separated list containing the following key words: fullscreen,
4263              ewmhiwa, growonwindowlayer, growonlayers and screen.  fullscreen
4264              causes the window to become fullscreened if the appropriate EWMH
4265              hint is set.  ewmhiwa causes fvwm to ignore the EWMH working
4266              area.  growonwindowlayer causes the various grow methods to
4267              ignore windows with a layer other than the current layer of the
4268              window which is maximized.  The growonlayers option must have
4269              two integer arguments.  The first one is the minimum layer and
4270              the second one the maximum layer to use.  Windows that are
4271              outside of this range of layers are ignored by the grow methods.
4272              A negative value as the first or second argument means to assume
4273              no minimum or maximum layer.  screen must have an argument which
4274              specifies the Xinerama screen on which to operate.  It can be
4275              'p' for the primary screen, 'c' for the current screen
4276              (containing the mouse pointer), 'g' for the global screen or the
4277              screen number itself (counting from zero).  This option is only
4278              useful with multiple Xinerama screens.
4279
4280              Here are some examples.  The following adds a title-bar button
4281              to switch a window to the full vertical size of the screen:
4282
4283                  Mouse 0 4 A Maximize 0 100
4284
4285              The following causes windows to be stretched to the full width:
4286
4287                  Mouse 0 4 A Maximize 100 0
4288
4289              This makes a window that is half the screen size in each
4290              direction:
4291
4292                  Mouse 0 4 A Maximize 50 50
4293
4294              To expand a window horizontally until any other window is found:
4295
4296                  Mouse 0 4 A Maximize 0 grow
4297
4298              To expand a window until any other window on the same or a
4299              higher layer is hit.
4300
4301                  Mouse 0 4 A Maximize growonlayers $[w.layer] -1 grow grow
4302
4303              To expand a window but leave the lower 60 pixels of the screen
4304              unoccupied:
4305
4306                  Mouse 0 4 A Maximize 100 -60p
4307
4308              Values larger than 100 can be used with caution.
4309
4310       Recapture
4311              This command is obsolete and should not be used anymore.  Should
4312              you want to do something specific that you cannot do without it,
4313              please report this to the fvwm-workers mailing list
4314              <fvwm-workers@fvwm.org>.  This command may be removed at some
4315              point in the future.  Please read the note at the end of the
4316              section Delayed Execution of Commands to learn about how to
4317              avoid the Recapture command.
4318
4319              Causes fvwm to recapture all of its windows.  This ensures that
4320              the latest style parameters are used.  The recapture operation
4321              is visually disturbing.
4322
4323              Since fvwm version 2.4 only a very few Style options need a
4324              Recapture to take effect (e.g.  UseStyle).
4325
4326       RecaptureWindow
4327              This command is obsolete and should not be used anymore.  See
4328              Recapture For details.
4329
4330              Causes fvwm to recapture the chosen window.
4331
4332       Refresh
4333              Causes all windows on the screen to redraw themselves.  All
4334              pending updates of all windows' styles and looks are applied
4335              immediately.  E.g. if Style or TitleStyle commands were issued
4336              inside a fvwm function.
4337
4338       RefreshWindow
4339              Causes the chosen window to redraw itself.  All pending updates
4340              of the window's style and look are applied immediately.  E.g. if
4341              Style or TitleStyle commands were issued inside a fvwm function.
4342
4343       Stick [bool]
4344              If the bool argument is empty or "toggle", the Stick command
4345              makes a window sticky if it is not already sticky, or non-sticky
4346              if it is already sticky.  To make a window sticky regardless of
4347              its current state the bool argument must be "True".  To make it
4348              non-sticky use "False".
4349
4350       StickAcrossPages [bool]
4351              Works like Stick but only sticks a window across pages, not
4352              across desks.
4353
4354       StickAcrossDesks [bool]
4355              Works like Stick but only sticks a window across desks, not
4356              across pages.
4357
4358       WindowShade [bool] | [[ShadeAgain] direction]
4359              Toggles the window shade feature for titled windows.  Windows in
4360              the shaded state only display a title-bar.  If bool is not given
4361              or "toggle", the window shade state is toggled.  If bool is
4362              "True", the window is forced to the shaded state.  If bool is
4363              "False", then the window is forced to the non-shaded state.  To
4364              force shading in a certain direction, the direction argument can
4365              be used.  Any of the strings "North", "South", "West", "East",
4366              "NorthWest", "NorthEast", "SouthWest", "SouthEast" or "Last" can
4367              be given.  The direction can be abbreviated with the usual one
4368              or two letters "N", "NW", etc.  Using a direction on a window
4369              that was already shaded unshades the window.  To shade it in a
4370              different direction, use the ShadeAgain option.  The direction
4371              Last shades the window in the direction it last was shaded.  If
4372              the window has never been shaded before it is shaded as if no
4373              direction had been given.  Windows without titles can be shaded
4374              too.  Please refer also to the options WindowShadeSteps,
4375              WindowShadeShrinks, WindowShadeScrolls, WindowShadeLazy,
4376              WindowShadeAlwaysLazy and WindowShadeBusy options of the Style
4377              command.  Examples:
4378
4379                  Style * WindowShadeShrinks, WindowShadeSteps 20, \
4380                          WindowShadeLazy
4381                  Mouse 1 - S WindowShade North
4382                  Mouse 1 [ S WindowShade West
4383                  Mouse 1 ] S WindowShade E
4384                  Mouse 1 _ S WindowShade S
4385
4386              Note: When a window that has been shaded with a direction
4387              argument changes the direction of the window title (see
4388              TitleAtTop Style option), the shading direction does not change.
4389              This may look very strange.  Windows that were shaded without a
4390              direction argument stay shaded in the direction of the title
4391              bar.
4392
4393              For backward compatibility, the optional argument may also be 1
4394              to signify "on", and 2 to signify "off".  Note that this syntax
4395              is obsolete, and will be removed in the future.
4396
4397       WindowShadeAnimate [steps [p]]
4398              This command is obsolete.  Please use the WindowShadeSteps
4399              option of the Style command instead.
4400
4401   Mouse, Key & Stroke Bindings
4402       IgnoreModifiers [Modifiers]
4403              Tells fvwm which modifiers to ignore when matching Mouse or Key
4404              bindings.  IgnoreModifiers affects the ClickToFocus style too.
4405              This command belongs into your config.  If you issue it when
4406              your fvwm session is already up and running the results are
4407              unpredictable.  The should appear before any applications or
4408              modules are started in your config file (e.g. with the Exec
4409              command).
4410
4411              Modifiers has the same syntax as in the Mouse or Key bindings,
4412              with the addition of 'L' meaning the caps lock key.  The default
4413              is "L".  Modifiers can be omitted, meaning no modifiers are
4414              ignored.  This command comes in handy if the num-lock and
4415              scroll-lock keys interfere with your shortcuts.  With XFree86
4416              '2' usually is the num-lock modifier and '5' refers to the
4417              scroll-lock key.  To turn all these pesky modifiers off you can
4418              use this command:
4419
4420                  IgnoreModifiers L25
4421
4422              If the Modifiers argument is the string "default", fvwm reverts
4423              back to the default value "L".
4424
4425              Important
4426              This command creates a lot of extra network traffic, depending
4427              on your CPU, network connection, the number of Key or Mouse
4428              commands in your configuration file and the number of modifiers
4429              you want to ignore.  If you do not have a lightning fast machine
4430              or very few bindings you should not ignore more than two
4431              modifiers.  I.e. do not ignore scroll-lock if you have no
4432              problem with it.  In the FAQ you can find a better solution of
4433              this problem.
4434
4435       EdgeCommand [direction [Function]]
4436              Binds a specified fvwm command Function to an edge of the
4437              screen.  Direction may be one of "North", "Top", "West", "Left",
4438              "South", "Bottom", "Right" and "East".  If Function is omitted
4439              the binding for this edge is removed.  If EdgeCommand is called
4440              without any arguments all edge bindings are removed.
4441
4442              Function is executed when the mouse pointer enters the invisible
4443              pan frames that surround the visible screen.  The binding works
4444              only if EdgeThickness is set to a value greater than 0.  If a
4445              function is bound to an edge, scrolling specified by EdgeScroll
4446              is disabled for this edge.  It is possible to bind a function
4447              only to some edges and use the other edges for scrolling.  This
4448              command is intended to raise or lower certain windows when the
4449              mouse pointer enters an edge.  FvwmAuto can be used get a delay
4450              when raising or lowering windows.  The following example raises
4451              FvwmButtons if the mouse pointer enters the top edge of the
4452              screen.
4453
4454                  # Disable EdgeScrolling but make it possible
4455                  # to move windows over the screen edge
4456                  EdgeResistance -1
4457                  Style * EdgeMoveDelay 250
4458                  Style * EdgeMoveResistance 20
4459
4460                  # Set thickness of the edge of the screen to 1
4461                  EdgeThickness 1
4462
4463                  # Give focus to FvwmButtons if the mouse
4464                  # hits top edge
4465                  EdgeCommand Top Next (FvwmButtons) Focus
4466                  # Make sure the Next command matches the window
4467                  Style FvwmButtons CirculateHit
4468
4469                  Module FvwmButtons
4470                  Module FvwmAuto 100 "Silent AutoRaiseFunction" \
4471                       "Silent AutoLowerFunction"
4472
4473                  # If any window except FvwmButtons has
4474                  # focus when calling this function
4475                  # FvwmButtons are lowered
4476                  DestroyFunc AutoLowerFunction
4477                  AddToFunc AutoLowerFunction
4478                  + I Current (!FvwmButtons) All (FvwmButtons) Lower
4479
4480                  # If FvwmButtons has focus when calling this function raise it
4481                  DestroyFunc AutoRaiseFunction
4482                  AddToFunc AutoRaiseFunction
4483                  + I Current (FvwmButtons) Raise
4484
4485              Normally, the invisible pan frames are only on the screen edges
4486              that border virtual pages.  If a screen edge has a command bound
4487              to it, the pan frame is always created on that edge.
4488
4489       EdgeLeaveCommand [direction [Function]]
4490              Binds a specified fvwm command Function to an edge of the
4491              screen.  Direction may be one of "North", "Top", "West", "Left",
4492              "South", "Bottom", "Right" and "East".  If Function is omitted
4493              the binding for this edge is removed.  If EdgeLeaveCommand is
4494              called without any arguments all edge bindings are removed.
4495
4496              Function is executed when the mouse pointer leaves the invisible
4497              pan frames that surround the visible screen.  The binding works
4498              only if EdgeThickness is set to a value greater than 0.  If a
4499              function is bound to an edge, scrolling specified by EdgeScroll
4500              is disabled for this edge.  It is possible to bind a function
4501              only to some edges and use the other edges for scrolling.  This
4502              command is intended to raise or lower certain windows when the
4503              mouse pointer leaves an edge.  FvwmAuto can be used get a delay
4504              when raising or lowering windows.  See example for EdgeCommand
4505
4506              Normally, the invisible pan frames are only on the screen edges
4507              that border virtual pages.  If a screen edge has a command bound
4508              to it, the pan frame is always created on that edge.
4509
4510       Key [(window)] Keyname Context Modifiers Function
4511              Binds a keyboard key to a specified fvwm command, or removes the
4512              binding if Function is '-'.  The syntax is the same as for a
4513              Mouse binding except that the mouse button number is replaced
4514              with a Keyname.  Normally, the key binding is activated when the
4515              key is pressed.  Keyname is a standard X11 key name as defined
4516              in /usr/include/X11/keysymdef.h, (without the XK_ prefix), or
4517              the keysym database /usr/X11R6/lib/X11/XKeysymDB.  Only key
4518              names that are generated with no modifier keys or with just the
4519              Shift key held are guaranteed to work.  The Context and
4520              Modifiers fields are defined as in the Mouse binding.  However,
4521              when you press a key the context window is the window that has
4522              the keyboard focus.  That is not necessarily the same as the
4523              window the pointer is over (with SloppyFocus or ClickToFocus).
4524              Note that key bindings with the 'R' (root window) context do not
4525              work properly with SloppyFocus and ClickToFocus.  If you
4526              encounter problems, use the PointerKey command instead.  If you
4527              want to bind keys to a window with SloppyFocus or ClickToFocus
4528              that are supposed to work when the pointer is not over the
4529              window, fvwm assumes the pointer is over the client window (i.e.
4530              you have to use the 'W' context).
4531
4532              The special context 'M' for menus can be used to (re)define the
4533              menu controls.  It be used alone or together with 'T', 'S', 'I',
4534              '[', ']', '-' and '_'.  See the Menu Bindings section for
4535              details.
4536
4537              The following example binds the built-in window list to pop up
4538              when Alt-Ctrl-Shift-F11 is hit, no matter where the mouse
4539              pointer is:
4540
4541                  Key F11 A SCM WindowList
4542
4543              Binding a key to a title-bar button causes that button to
4544              appear.  Please refer to the Mouse command for details.
4545
4546       Mouse [(window)] Button Context Modifiers Function
4547              Defines a mouse binding, or removes the binding if Function is
4548              '-'.  Button is the mouse button number.  If Button is zero then
4549              any button performs the specified function.  Note that only
4550              mouse buttons 1 to 5 are fully supported by X11.  Any number
4551              above this works only partially.  Complex functions can not be
4552              used with these buttons and neither any operation that requires
4553              dragging the pointer with the button held.  This is due to
4554              limitations of X11.  By default, the highest allowed button
4555              number is 9.
4556
4557              Context describes where the binding applies.  Valid contexts are
4558              'R' for the root window, 'W' for an application window, 'D' for
4559              a desktop application (as kdesktop or Nautilus desktop), 'T' for
4560              a window title-bar, 'S' for a window side, top, or bottom bar,
4561              '[', ']', '-' and '_' for the left, right, top or bottom side
4562              only, 'F' for a window frame (the corners), '<', '^', '>' and
4563              'v' for the top left, top right, bottom right or bottom left
4564              corner, 'I' for an icon window, or '0' through '9' for title-bar
4565              buttons, or any combination of these letters.  'A' is for any
4566              context.  For instance, a context of "FST" applies when the
4567              mouse is anywhere in a window's border except the title-bar
4568              buttons.  Only 'S' and 'W' are valid for an undecorated window.
4569
4570              The special context 'M' for menus can be used to (re)define the
4571              menu controls.  It can be used alone or together with 'T', 'S',
4572              'I', '[', ']', '-' and '_'.  See the Menu Bindings section for
4573              details.
4574
4575              The special context 'P' controls what buttons that can be used
4576              to place a window.  When using this context no modifiers are
4577              allowed (Modifiers must be N), no window is allowed, and the
4578              Function must be one of PlaceWindow, PlaceWindowDrag,
4579              PlaceWindowInteractive, CancelPlacement, CancelPlacementDrag,
4580              CancelPlacementInteractive or -.
4581
4582              PlaceWindow makes Button usable for window placement, both for
4583              interactive and drag move.  CancelPlacement does the inverse.
4584              That is makes Button to cancel move for both interactive and
4585              drag move.  It may however not override how new windows are
4586              resized after being placed.  This is controlled by the Emulate
4587              command.  Also a window being dragged can always be placed by
4588              releasing the button hold while dragging, regardless of if it is
4589              set to PlaceWindow or not.
4590
4591              PlaceWindowDrag and PlaceWindowInteractive/CancelPlacementDrag
4592              and CancelPlacementInteractive work as
4593              PlaceWindow/CancelPlacement with the exception that they only
4594              affect either windows dragged / placed interactively.
4595
4596              - is equivalent to CancelPlacement.
4597
4598              The following example makes all buttons but button 3 usable for
4599              interactive placement and makes drag moves started by other
4600              buttons than one cancel if button 1 is pressed before finishing
4601              the move:
4602
4603                  Mouse 0 P N PlaceWindow
4604                  Mouse 3 P N CancelPlacement
4605                  Mouse 1 P N CancelPlacementDrag
4606
4607              By default, the binding applies to all windows.  You can specify
4608              that a binding only applies to specific windows by specifying
4609              the window name in brackets.  The window name is a wildcard
4610              pattern specifying the class, resource or name of the window you
4611              want the binding to apply to.
4612
4613              The following example shows how the same key-binding can be used
4614              to perform different functions depending on the window that is
4615              focused:
4616
4617                  Key (rxvt)  V A C Echo ctrl-V-in-RXVT
4618                  Key (*term) V A C Echo ctrl-V-in-Term
4619                  Key (*vim)  V A C --
4620                  Key         V A C Echo ctrl-V-elsewhere
4621
4622              A '--' action indicates that the event should be propagated to
4623              the specified window to handle.  This is only a valid action for
4624              window-specific bindings.
4625
4626              This example shows how to display the WindowList when Button 3
4627              is pressed on an rxvt window:
4628
4629                  Mouse (rxvt) 3 A A WindowList
4630
4631              Note that Fvwm actually intercepts all events for a
4632              window-specific binding and (if the focused window doesn't match
4633              any of the bindings) sends a synthetic copy of the event to the
4634              window.  This should be transparent to most applications,
4635              however (for security reasons) some programs ignore these
4636              synthetic events by default - xterm is one of them.  To enable
4637              handling of these events, add the following line to your
4638              ~/.Xdefaults file:
4639
4640                  XTerm*allowSendEvents:  true
4641
4642              Modifiers is any combination of 'N' for no modifiers, 'C' for
4643              control, 'S' for shift, 'M' for Meta, 'L' for Caps-Lock or 'A'
4644              for any modifier.  For example, a modifier of "SM" applies when
4645              both the Meta and Shift keys are down.  X11 modifiers mod1
4646              through mod5 are represented as the digits '1' through '5'.  The
4647              modifier 'L' is ignored by default.  To turn it on, use the
4648              IgnoreModifiers command.
4649
4650              Function is one of fvwm's commands.
4651
4652              The title-bar buttons are numbered with odd numbered buttons on
4653              the left side of the title-bar and even numbers on the right.
4654              Smaller-numbered buttons are displayed toward the outside of the
4655              window while larger-numbered buttons appear toward the middle of
4656              the window (0 is short for 10).  In summary, the buttons are
4657              numbered:
4658
4659                  1 3 5 7 9    0 8 6 4 2
4660
4661              The highest odd numbered button which has an action bound to it
4662              determines the number of buttons drawn on the left side of the
4663              title bar.  The highest even number determines the number of
4664              right side buttons which are drawn.  Actions can be bound to
4665              either mouse buttons or keyboard keys.
4666
4667       PointerKey [(window)] Keyname Context Modifiers Function
4668              This command works exactly like the Key command.  The only
4669              difference is that the binding operates on the window under the
4670              pointer.  Normal key bindings operate on the focused window
4671              instead.  The PointerKey command can for example be used to bind
4672              keys to the root window if you are using SloppyFocus or
4673              ClickToFocus.  However, some applications (xterm is one example)
4674              are unable to handle this key anymore, even if the pointer is
4675              over the xterm window.  It is recommended to use the PointerKey
4676              command only for key combinations that are not needed in any
4677              application window.
4678
4679              Example:
4680
4681                  Style * SloppyFocus
4682                  PointerKey f1 a m Menu MainMenu
4683
4684       Stroke [(window)] Sequence Button Context Modifiers Function
4685              Binds a mouse stroke sequence to a specified fvwm command, or
4686              removes the binding if Function is '-'.  The syntax is the same
4687              as for a Mouse binding except that Sequence is inserted in front
4688              of the button number and a value of 0 for Button concerns the
4689              StrokeFunc command.  The Context and Modifiers fields are
4690              defined as in the Mouse binding.  However, only the 'R' Context
4691              really works (if you want to use other contexts you need to use
4692              the StrokeFunc below).
4693
4694              Strokes sequences are defined in a telephone grid like this:
4695
4696                   1  2  3
4697
4698                   4  5  6
4699
4700                   7  8  9
4701
4702              or in a numeric pad grid like this:
4703
4704                   7  8  9
4705
4706                   4  5  6
4707
4708                   1  2  3
4709
4710              The telephone grid is used by default, to use the numeric pad
4711              grid you should begin the sequence with a 'N'.  Note that a
4712              complex motion may produce several different sequences (see the
4713              "netscape" example below to handle such motion).  Moreover,
4714              sequences are limited to 20 elements (with the present version
4715              of libstroke), however, in practice it is preferable to use
4716              sequence with less than 12 elements.
4717
4718              Because of the default button menu in fvwm, you may need to
4719              remove a mouse button binding (using an empty action) before
4720              using the stroke
4721
4722                  Mouse 3 R N
4723
4724              Also, you can still use the stroke "sequence 0" to simulate a
4725              click:
4726
4727                  Stroke 0 3 R N Menu WindowList Nop
4728
4729              The following example starts xterm when the mouse drags an 'I'
4730              on the root window with button 3 pressed down:
4731
4732                  Stroke 258  3  R  N  Exec exec xterm
4733
4734              An example for Netscape:
4735
4736                  Stroke 7415963    3  R  N  Exec exec netscape
4737                  Stroke 74148963   3  R  N  Exec exec netscape
4738                  Stroke 74158963   3  R  N  Exec exec netscape
4739                  Stroke 7418963    3  R  N  Exec exec netscape
4740                  Stroke 415963     3  R  N  Exec exec netscape
4741
4742              You may prefer to use the numeric pad grid since you have such a
4743              grid on your machine.  Here an example:
4744
4745                  Stroke N78963214   3  R  N FvwmForm FvwmForm-QuitVerify
4746                  Stroke N789632147  3  R  N FvwmForm FvwmForm-QuitVerify
4747
4748              This example starts the "QuitVerify" form if you draw a box that
4749              begins in the top left corner.
4750
4751              Note: You need libstroke installed and fvwm compiled with stroke
4752              support.  libstroke can be obtained at
4753              http://www.etla.net/~willey/projects/libstroke/
4754
4755       StrokeFunc [Options]
4756              Causes fvwm to record a mouse stroke sequence and to execute the
4757              corresponding action as defined in a Stroke command.  The cursor
4758              is modified to the STROKE context of the CursorStyle command
4759              during recording.  When the stroke is finished StrokeFunc looks
4760              for a stroke binding of the form
4761
4762                  Stroke sequence 0 Context Modifiers action
4763
4764              and executes the corresponding action (Note the 0).  Normal use
4765              of this function is via a Mouse or Key command.  Examples:
4766
4767                  Mouse 3 A M StrokeFunc
4768                  Key x R N StrokeFunc
4769
4770              If you press mouse button 3 and Alt anywhere (respectively,
4771              press the key x when the cursor is on the root window), then
4772              fvwm records the mouse motions until the mouse button 3
4773              (respectively, the x key) is released and then check if the
4774              recorded sequence corresponds to a stroke binding of the form
4775
4776                  "Stroke sequence 0 A M action"
4777                  "Stroke sequence 0 R N action"
4778
4779              Note that the Context and Modifiers are taken at the beginning
4780              of the execution of the StrokeFunc command (so you can release
4781              the modifiers before the end of the stroke recording in the case
4782              of a mouse binding and if you used, say, a title-bar context the
4783              mouse motion can go through an application window).  The keys
4784              Escape and Delete allow you to abort the command.
4785
4786              The StrokeFunc command has five options: NotStayPressed,
4787              EchoSequence, DrawMotion, FeedBack and StrokeWidth.  These
4788              options are disabled by default.  EchoSequence causes fvwm to
4789              Echo the recorded stroke sequence.  DrawMotion causes fvwm to
4790              draw the mouse motion on the screen.  FeedBack causes fvwm to
4791              display during a fraction of second the cursor of the WAIT
4792              context of the CursorStyle command if the recorded stroke
4793              sequence corresponds to a stroke binding.  StrokeWidth takes an
4794              integer argument, which must be >= 0 and <= 100 and which
4795              defines the width of the line for the DrawMotion option.
4796
4797              NotStayPressed works only if StrokeFunc is used via a Mouse or a
4798              Key command.  This option removes the need to have a button or
4799              the key pressed during the stroke, but you have to do a mouse
4800              click or press the Return or Space key to finish the mouse
4801              motion recording (these keys also work without the
4802              NotStayPressed option).
4803
4804              You can use the StrokeFunc "alone".  In this case it works as
4805              above with the NotStayPressed option enabled.  However,
4806              Modifiers, in general, may not work as expected (i.e., in this
4807              case use 'A' or 'N' as Modifiers in the stroke bindings).
4808
4809              Note that some computers do not support key release events.  If
4810              that is the case the StrokeFunc used via a Key command works as
4811              if the NotStayPressed option is enabled.
4812
4813   Controlling Window Styles
4814       For readability, the commands in this section are not sorted
4815       alphabetically.  The description of the Style command can be found at
4816       the end of this section.
4817
4818       FocusStyle stylename options
4819              works exactly like the Style command, but accepts only the focus
4820              policy related styles beginning with "FP".  The prefix can be
4821              removed, but at the cost of a little bit of time.  FocusStyle is
4822              meant to make the configuration file more readable.  Example:
4823
4824                  FocusStyle * EnterToFocus, !LeaveToUnfocus
4825
4826              is equivalent to
4827
4828                  Style * FPEnterToFocus, !FPLeaveToUnfocus
4829
4830       DestroyStyle style
4831              deletes the style named style.  The changes take effect
4832              immediately.  Note that style is not a wild-carded search
4833              string, but rather a case-sensitive string that should exactly
4834              match the original Style command.
4835
4836              Destroying style "*" can be done, but isn't really to be
4837              recommended.  For example:
4838
4839                  DestroyStyle Application*
4840
4841              This removes all settings for the style named "Application*",
4842              NOT all styles starting with "Application".
4843
4844       DestroyWindowStyle
4845              deletes the styles set by the WindowStyle command on the
4846              selected window.  The changes take effect immediately.
4847
4848       UpdateStyles
4849              All pending updates of all windows' styles and looks are applied
4850              immediately.  E.g. if Style, WindowStyle or TitleStyle commands
4851              were issued inside a fvwm function.
4852
4853       Style stylename options ...
4854              The Style command is used to set attributes of a window to
4855              values other than the default or to set the window manager
4856              default styles.
4857
4858              stylename can be a window's name, class, visible name, or
4859              resource string.  It may contain the wildcards '*' and '?',
4860              which are matched in the usual Unix filename manner.  Multiple
4861              style options in a single Style command are read from left to
4862              right as if they were issued one after each other in separate
4863              commands.  A given style always overrides all conflicting styles
4864              that have been issued earlier (or further left on the same style
4865              line).
4866
4867              Note: windows that have no name (WM_NAME) are given a name of
4868              "Untitled", and windows that do not have a class (WM_CLASS,
4869              res_class) are given class "NoClass" and those that do not have
4870              a resource (WM_CLASS, res_name) are given resource "NoResource".
4871
4872              If a window has the resource "fvwmstyle" set, the value of that
4873              resource is used in addition to any window names when selecting
4874              the style.
4875
4876              options is a comma separated list containing one or more of the
4877              following keywords.  Each group of style names is separated by
4878              slashes ('/').  The last style in these groups is the default.
4879              BorderWidth, HandleWidth, !Icon / Icon, MiniIcon, IconBox,
4880              IconGrid, IconFill, IconSize, !Title / Title, TitleAtBottom /
4881              TitleAtLeft / TitleAtRight / TitleAtTop, LeftTitleRotatedCW /
4882              LeftTitleRotatedCCW, RightTitleRotatedCCW / RightTitleRotatedCW,
4883              TopTitleRotated / TopTitleNotRotated, BottomTitleRotated /
4884              BottomTitleNotRotated, !UseTitleDecorRotation /
4885              UseTitleDecorRotation, StippledTitle / !StippledTitle,
4886              StippledIconTitle / !StippledIconTitle, IndexedWindowName /
4887              ExactWindowName, IndexedIconName / ExactIconName, TitleFormat /
4888              IconTitleFormat / !Borders / Borders, !Handles / Handles,
4889              WindowListSkip / WindowListHit, CirculateSkip / CirculateHit,
4890              CirculateSkipShaded / CirculateHitShaded, CirculateSkipIcon /
4891              CirculateHitIcon, Layer, StaysOnTop / StaysOnBottom / StaysPut,
4892              Sticky / Slippery, StickyAcrossPages / !StickyAcrossPages,
4893              StickyAcrossDesks / !StickyAcrossDesks, !StickyStippledTitle /
4894              StickyStippledTitle, !StickyStippledIconTitle /
4895              StickyStippledIconTitle, StartIconic / StartNormal, Color,
4896              ForeColor, BackColor, Colorset, HilightFore, HilightBack,
4897              HilightColorset, BorderColorset, HilightBorderColorset,
4898              IconTitleColorset, HilightIconTitleColorset,
4899              IconBackgroundColorset, IconTitleRelief, IconBackgroundRelief,
4900              IconBackgroundPadding, Font, IconFont, StartsOnDesk /
4901              StartsOnPage / StartsAnyWhere, StartsOnScreen, StartShaded /
4902              !StartShaded, ManualPlacementHonorsStartsOnPage /
4903              ManualPlacementIgnoresStartsOnPage, CaptureHonorsStartsOnPage /
4904              CaptureIgnoresStartsOnPage, RecaptureHonorsStartsOnPage /
4905              RecaptureIgnoresStartsOnPage, StartsOnPageIncludesTransients /
4906              StartsOnPageIgnoresTransients, IconTitle / !IconTitle,
4907              MwmButtons / FvwmButtons, MwmBorder / FvwmBorder, MwmDecor /
4908              !MwmDecor, MwmFunctions / !MwmFunctions, HintOverride /
4909              !HintOverride, !Button / Button, ResizeHintOverride /
4910              !ResizeHintOverride, OLDecor / !OLDecor, GNOMEUseHints /
4911              GNOMEIgnoreHints, StickyIcon / SlipperyIcon,
4912              StickyAcrossPagesIcon / !StickyAcrossPagesIcon,
4913              StickyAcrossDesksIcon / !StickyAcrossDesksIcon, ManualPlacement
4914              / CascadePlacement / MinOverlapPlacement /
4915              MinOverlapPercentPlacement / TileManualPlacement /
4916              TileCascadePlacement / PositionPlacement,
4917              MinOverlapPlacementPenalties,
4918              MinOverlapPercentPlacementPenalties, DecorateTransient /
4919              NakedTransient, DontRaiseTransient / RaiseTransient,
4920              DontLowerTransient / LowerTransient, DontStackTransientParent /
4921              StackTransientParent, SkipMapping / ShowMapping,
4922              ScatterWindowGroups / KeepWindowGroupsOnDesk, UseDecor,
4923              UseStyle, !UsePPosition / NoPPosition / UsePPosition,
4924              !UseUSPosition, NoUSPosition / UseUSPosition,
4925              !UseTransientPPosition, NoTransientPPosition /
4926              UseTransientPPosition, !UseTransientUSPosition /
4927              NoTransientUSPosition / UseTransientUSPosition, !UseIconPosition
4928              / NoIconPosition / UseIconPosition, Lenience / !Lenience,
4929              ClickToFocus / SloppyFocus / MouseFocus|FocusFollowsMouse /
4930              NeverFocus, ClickToFocusPassesClickOff /
4931              ClickToFocusPassesClick, ClickToFocusRaisesOff /
4932              ClickToFocusRaises, MouseFocusClickRaises /
4933              MouseFocusClickRaisesOff, GrabFocus / GrabFocusOff,
4934              GrabFocusTransientOff / GrabFocusTransient, FPFocusClickButtons,
4935              FPFocusClickModifiers, !FPSortWindowlistByFocus /
4936              FPSortWindowlistByFocus, FPClickRaisesFocused /
4937              !FPClickRaisesFocused, FPClickDecorRaisesFocused /
4938              !FPClickDecorRaisesFocused, FPClickIconRaisesFocused /
4939              !FPClickIconRaisesFocused, !FPClickRaisesUnfocused /
4940              FPClickRaisesUnfocused, FPClickDecorRaisesUnfocused /
4941              !FPClickDecorRaisesUnfocused, FPClickIconRaisesUnfocused /
4942              !FPClickIconRaisesUnfocused, FPClickToFocus / !FPClickToFocus,
4943              FPClickDecorToFocus / !FPClickDecorToFocus, FPClickIconToFocus /
4944              !FPClickIconToFocus, !FPEnterToFocus / FPEnterToFocus,
4945              !FPLeaveToUnfocus / FPLeaveToUnfocus, !FPFocusByProgram /
4946              FPFocusByProgram, !FPFocusByFunction / FPFocusByFunction,
4947              FPFocusByFunctionWarpPointer / !FPFocusByFunctionWarpPointer,
4948              FPLenient / !FPLenient, !FPPassFocusClick / FPPassFocusClick,
4949              !FPPassRaiseClick / FPPassRaiseClick, FPIgnoreFocusClickMotion /
4950              !FPIgnoreFocusClickMotion, FPIgnoreRaiseClickMotion /
4951              !FPIgnoreRaiseClickMotion, !FPAllowFocusClickFunction /
4952              FPAllowFocusClickFunction, !FPAllowRaiseClickFunction /
4953              FPAllowRaiseClickFunction, FPGrabFocus / !FPGrabFocus,
4954              !FPGrabFocusTransient / FPGrabFocusTransient,
4955              FPOverrideGrabFocus / !FPOverrideGrabFocus, FPReleaseFocus /
4956              !FPReleaseFocus, !FPReleaseFocusTransient /
4957              FPReleaseFocusTransient, FPOverrideReleaseFocus /
4958              !FPOverrideReleaseFocus, StartsLowered / StartsRaised,
4959              IgnoreRestack / AllowRestack, FixedPosition / VariablePosition,
4960              FixedUSPosition / VariableUSPosition, FixedPPosition /
4961              VariablePPosition, FixedSize / VariableSize, FixedUSSize /
4962              VariableUSSize, FixedPSize / VariablePSize, !Closable /
4963              Closable, !Iconifiable / Iconifiable, !Maximizable /
4964              Maximizable, !AllowMaximizeFixedSize / AllowMaximizeFixedSize,
4965              IconOverride / NoIconOverride / NoActiveIconOverride,
4966              DepressableBorder / FirmBorder, MinWindowSize, MaxWindowSize,
4967              IconifyWindowGroups / IconifyWindowGroupsOff, ResizeOpaque /
4968              ResizeOutline, BackingStore / BackingStoreOff /
4969              BackingStoreWindowDefault, Opacity / ParentalRelativity,
4970              SaveUnder / SaveUnderOff, WindowShadeShrinks /
4971              WindowShadeScrolls, WindowShadeSteps, WindowShadeAlwaysLazy /
4972              WindowShadeBusy / WindowShadeLazy, EWMHDonateIcon /
4973              EWMHDontDonateIcon, EWMHDonateMiniIcon / EWMHDontDonateMiniIcon,
4974              EWMHMiniIconOverride / EWMHNoMiniIconOverride,
4975              EWMHUseStackingOrderHints / EWMHIgnoreStackingOrderHints,
4976              EWMHIgnoreStateHints / EWMHUseStateHints, EWMHIgnoreStrutHints /
4977              EWMHUseStrutHints, EWMHIgnoreWindowType / !EWMHIgnoreWindowType,
4978              EWMHMaximizeIgnoreWorkingArea / EWMHMaximizeUseWorkingArea /
4979              EWMHMaximizeUseDynamicWorkingArea,
4980              EWMHPlacementIgnoreWorkingArea / EWMHPlacementUseWorkingArea /
4981              EWMHPlacementUseDynamicWorkingArea, MoveByProgramMethod,
4982              Unmanaged, State, SnapGrid, SnapAttraction, EdgeMoveDelay,
4983              EdgeResizeDelay.  EdgeMoveResistance, InitialMapCommand
4984
4985              In the above list some options are listed as
4986              style-option/opposite-style-option.  The opposite-style-option
4987              for entries that have them describes the fvwm default behavior
4988              and can be used if you want to change the fvwm default behavior.
4989
4990              Focus policy
4991                     ClickToFocus instructs fvwm to give the focus to a window
4992                     when it is clicked in.  The default MouseFocus (or its
4993                     alias FocusFollowsMouse) tells fvwm to give a window the
4994                     focus as soon as the pointer enters the window, and take
4995                     it away when the pointer leaves the window.  SloppyFocus
4996                     is similar, but doesn't give up the focus if the pointer
4997                     leaves the window to pass over the root window or a
4998                     ClickToFocus window (unless you click on it, that is),
4999                     which makes it possible to move the mouse out of the way
5000                     without losing focus.  A window with the style NeverFocus
5001                     never receives the focus.  This is useful for modules
5002                     like FvwmButtons.  for example.  Note: Once any of the
5003                     "FP..." styles has been used, the defaults that come with
5004                     the basic focus policies are not restored when the latter
5005                     are used again.  For example, once !FPGrabFocus has been
5006                     used, using ClickToFocus does not restore FPGrabFocus.
5007
5008                     The focus model can be augmented with several additional
5009                     options.  In fvwm-2.5.3 and later, there are a large
5010                     number of advanced options beginning with "FP" or "!FP".
5011                     These options shall replace the older options one day and
5012                     are described first.  Using any of these new options may
5013                     limit compatibility with older releases.  In general,
5014                     options beginning with "FP" turn a feature on, while
5015                     those beginning with "!FP" turn it off.
5016
5017              Focusing the window
5018                     With FPEnterToFocus, when the pointer enters a window it
5019                     receives focus.
5020
5021                     With FPLeaveToUnfocus a window loses focus when the
5022                     pointer leaves it.
5023
5024                     With FPClickToFocus, FPClickDecorToFocus or
5025                     FPClickIconToFocus, a window receives focus when the
5026                     inside of the window or the decorations or its icon is
5027                     clicked.
5028
5029                     The FPFocusByProgram style allows windows to take the
5030                     focus themselves.
5031
5032                     The !FPFocusByFunction style forbids that a window
5033                     receives the focus via the Focus and FlipFocus commands.
5034
5035                     The FPFocusByFunctionWarpPointer style controls if the
5036                     pointer is warped to a selected window when the Focus
5037                     command is used.
5038
5039                     FPLenient allows focus on windows that do not want it,
5040                     like FvwmPager or xclock.
5041
5042                     The FPFocusClickButtons style takes a list of mouse
5043                     buttons that can be clicked to focus or raise a window
5044                     when the appropriate style is used.  The default is to
5045                     use the first three buttons ("123").
5046
5047                     The FPFocusClickModifiers style takes a list of modifier
5048                     keys just like the Key command.  The exact combination of
5049                     modifier keys must be pressed for the click to focus or
5050                     raise a window to work.  The default is to use no
5051                     modifiers ("N").
5052
5053                     With the FPPassFocusClick style, the click that was used
5054                     to focus a window is passed to the application.
5055
5056                     With the FPAllowFocusClickFunction style, the click that
5057                     was used to focus a window can also trigger a normal
5058                     action that was bound to the window with the Mouse
5059                     command).
5060
5061                     If the FPIgnoreFocusClickMotion style is used, clicking
5062                     in a window and then dragging the pointer with the button
5063                     held down does not count as the click to focus the
5064                     window.  Instead, the application processes these events
5065                     normally.  This is useful to select text in a terminal
5066                     window with the mouse without raising the window.
5067                     However, mouse bindings on the client window are not
5068                     guaranteed to work anymore (see Mouse command).  This
5069                     style forces the initial click to be passed to the
5070                     application.  The distance that the pointer must be moved
5071                     to trigger this is controlled by the MoveThreshold
5072                     command.
5073
5074                     The FPSortWindowlistByFocus and !FPSortWindowlistByFocus
5075                     styles control whether the internal window list is sorted
5076                     in the order the windows were focused or in the order
5077                     they were created.  The latter is the default for
5078                     ClickToFocus and SloppyFocus.
5079
5080                     Clicking the window to raise
5081
5082                     The styles FPClickRaisesFocused,
5083                     FPClickDecorRaisesFocused and FPClickIconRaisesFocused
5084                     allow one to raise the window when the interior or the
5085                     decorations or the icon of the window is clicked while
5086                     the window is already focused.
5087
5088                     The styles FPClickRaisesUnfocused,
5089                     FPClickDecorRaisesUnfocused and
5090                     FPClickIconRaisesUnfocused allow one to raise the window
5091                     when the interior or the decorations or the icon of the
5092                     window is clicked while the window is not yet focused.
5093
5094                     With the FPPassRaiseClick style, the click that was used
5095                     to raise the window is passed to the application.
5096
5097                     With the FPAllowRaiseClickFunction style, the click that
5098                     was used to raise the window can also trigger a normal
5099                     action that was bound to the window with the Mouse
5100                     command.
5101
5102                     If the FPIgnoreRaiseClickMotion style is used, clicking
5103                     in a window and then dragging the pointer with the button
5104                     held down does not count as the click to raise the
5105                     window.  Instead, the application processes these events
5106                     normally.  This is useful to select text in a terminal
5107                     window with the mouse without raising the window.
5108                     However, mouse bindings on the client window are not
5109                     guaranteed to work anymore (see Mouse command.  Note that
5110                     this style forces that the initial click is passed to the
5111                     application.  The distance that the pointer must be moved
5112                     to trigger this is controlled by the MoveThreshold
5113                     command.
5114
5115                     Grabbing the focus when a new window is created
5116
5117                     New normal or transient windows with the FPGrabFocus or
5118                     FPGrabFocusTransient style automatically receive the
5119                     focus when they are created.  FPGrabFocus is the default
5120                     for windows with the ClickToFocus style.  Note that even
5121                     if these styles are disabled, the application may take
5122                     the focus itself.  Fvwm can not prevent this.
5123
5124                     The OverrideGrabFocus style instructs fvwm to never take
5125                     away the focus from such a window via the GrabFocus or
5126                     GrabFocusTransient styles.  This can be useful if you
5127                     like to have transient windows receive the focus
5128                     immediately, for example in a web browser, but not while
5129                     you are working in a terminal window or a text processor.
5130
5131                     The above three styles are accompanied by FPReleaseFocus,
5132                     FPReleaseFocusTransient and FPOverrideReleaseFocus.
5133                     These control if the focus is returned to another window
5134                     when the window is closed.  Otherwise no window or the
5135                     window under the pointer receives the focus.
5136
5137                     ClickToFocusPassesClickOff and ClickToFocusPassesClick
5138                     controls whether a mouse click to focus a window is sent
5139                     to the application or not.  Similarly,
5140                     ClickToFocusRaisesOff/MouseFocusClickRaisesOff and
5141                     ClickToFocusRaises/MouseFocusClickRaises control if the
5142                     window is raised (but depending on the focus model).
5143
5144                     Note: in fvwm versions prior to 2.5.3, the "Click..."
5145                     options applied only to windows with ClickToFocus while
5146                     the "Mouse..." options applied to windows with a
5147                     different focus policy.  This is no longer the case.
5148
5149                     The old GrabFocus style is equivalent to using
5150                     FPGrabFocus + FPReleaseFocus.
5151
5152                     The old GrabFocusTransient style is equivalent to using
5153                     FPGrabFocusTransient + FPReleaseFocusTransient.
5154
5155                     Lenience is equivalent to the new style FPLenient.
5156
5157              Window title
5158                     The Title and !Title options determine if the window has
5159                     a title-bar or not.  By default all windows have a
5160                     title-bar.  NoTitle is equivalent to !Title but is
5161                     deprecated.
5162
5163                     Windows with the TitleAtBottom, TitleAtLeft or
5164                     TitleAtRight style have a title-bar below, to the left or
5165                     to the right of the window instead of above as usual.
5166                     The TitleAtTop style restores the default placement.
5167                     Even if the window has the !Title style set, this affects
5168                     the WindowShade command.  Please check the WindowShade
5169                     command for interactions between that command and these
5170                     styles.  Titles on the left or right side of the windows
5171                     are augmented by the following styles:
5172
5173                     Normally, the text in titles on the left side of a window
5174                     is rotated counterclockwise by 90 degrees from the normal
5175                     upright position and 90 degrees clockwise for titles on
5176                     the right side.  It can also be rotated in the opposite
5177                     directions with LeftTitleRotatedCW if TitleAtLeft is
5178                     used, and with RightTitleRotatedCCW if TitleAtRight is
5179                     used.  The defaults can be restored with
5180                     LeftTitleRotatedCCW and RightTitleRotatedCW.  A normal
5181                     horizontal text may be rotated as well with
5182                     TopTitleRotated if TitleAtTop is used, and with
5183                     BottomTitleRotated if TitleAtBottom is used.  The
5184                     defaults can be restored with TopTitleNotRotated and
5185                     BottomTitleNotRotated.
5186
5187                     By default the title bar decoration defined using the
5188                     TitleStyle command is rotated following the title text
5189                     rotation (see the previous paragraph).  This can be
5190                     disabled by using the !UseTitleDecorRotation style.
5191                     UseTitleDecorRotation reverts back to the default.
5192
5193                     With the StippledTitle style, titles are drawn with the
5194                     same effect that is usually reserved for windows with the
5195                     Sticky, StickyAcrossPages or StickyAcrossDesks style.
5196                     !StippledTitle reverts back to normal titles.
5197                     StippledTitleOff is equivalent to !StippledTitle but is
5198                     deprecated.
5199
5200                     Color takes two arguments.  The first is the window-label
5201                     text color and the second is the window decorations
5202                     normal background color.  The two colors are separated
5203                     with a slash.  If the use of a slash causes problems then
5204                     the separate ForeColor and BackColor options can be used.
5205
5206                     Colorset takes the colorset number as its sole argument
5207                     and overrides the colors set by Color.  Instead, the
5208                     corresponding colors from the given colorset are used.
5209                     Note that all other features of a colorset are not used.
5210                     Use the Colorset decoration style in the TitleStyle and
5211                     ButtonStyle command for that.  To stop using the
5212                     colorset, the colorset number is omitted.
5213
5214                     The HilightFore, HilightBack and HilightColorset style
5215                     options work exactly like ForeColor, BackColor and
5216                     Colorset but are used only if the window has the focus.
5217                     These styles replace the old commands HilightColor and
5218                     HilightColorset.
5219
5220                     BorderColorset takes the colorset number as its sole
5221                     argument and overrides the colors set by Color or
5222                     Colorset.  for the window border.  To stop using a
5223                     colorset, the argument is omitted.
5224
5225                     The HilightBorderColorset style option works similarly to
5226                     BorderColorset but is used when the window has the focus.
5227
5228                     !IconTitle disables displaying icon labels while the
5229                     opposite style IconTitle enables icon labels (default
5230                     behaviour).  NoIconTitle is equivalent to !IconTitle but
5231                     is deprecated.
5232
5233                     IconTitleColorset takes the colorset number as its sole
5234                     argument and overrides the colors set by Color or
5235                     Colorset.  To stop using this colorset, the argument is
5236                     omitted.
5237
5238                     HilightIconTitleColorset takes the colorset number as its
5239                     sole argument and overrides the colors set by
5240                     HilightColor or HilightColorset.  To stop using this
5241                     colorset, the argument is omitted.
5242
5243                     IconBackgroundColorset takes the colorset number as its
5244                     sole argument and uses it to set a background for the
5245                     icon picture.  By default the icon picture is not drawn
5246                     onto a background image.  To restore the default, the
5247                     argument is omitted.
5248
5249                     IconTitleRelief takes one numeric argument that may be
5250                     between -50 and +50 pixels and defines the thickness of
5251                     the 3D relief drawn around the icon title.  With negative
5252                     values the icon title gets a pressed in look.  The
5253                     default is 2 and it is restored if the argument is
5254                     omitted.
5255
5256                     IconBackgroundRelief takes one numeric argument that may
5257                     be between -50 and +50 pixels and defines the thickness
5258                     of the 3D relief drawn around the icon picture background
5259                     (if any).  With negative values the icon background gets
5260                     a pressed in look.  The default is 2 and it is restored
5261                     if the argument is omitted.
5262
5263                     IconBackgroundPadding takes one numeric argument that may
5264                     be between 0 and 50 pixels and defines the amount of free
5265                     space between the relief of the icon background picture
5266                     (if any) and the icon picture.  The default is 2 and it
5267                     is restored if the argument is omitted.
5268
5269                     The Font and IconFont options take the name of a font as
5270                     their sole argument.  This font is used in the window or
5271                     icon title.  By default the font given in the DefaultFont
5272                     command is used.  To revert back to the default, use the
5273                     style without the name argument.  These styles replace
5274                     the older WindowFont and IconFont commands.
5275
5276                     The deprecated IndexedWindowName style causes fvwm to use
5277                     window titles in the form
5278
5279                         name (i)
5280
5281                     where name is the exact window name and i is an integer
5282                     which represents the i th window with name as window
5283                     name.  This has been replaced with:
5284
5285                         TitleFormat %n (%t)
5286
5287                     ExactWindowName restores the default which is to use the
5288                     exact window name.  Deprecated in favour of:
5289
5290                             TitleFormat %n
5291
5292                     IndexedIconName and ExactIconName work the same as
5293                     IndexedWindowName and ExactWindowName styles but for the
5294                     icon titles.  Both are deprecated in favour of:
5295
5296                         IconTitleFormat %n (%t)
5297                         IconTitleFormat %n
5298
5299                     TitleFormat describes what the visible name of a window
5300                     should look like, with the following placeholders being
5301                     valid:
5302
5303                     %n
5304                         Insert the window's name.
5305
5306                     %i
5307                         Insert the window's icon name.
5308
5309                     %c
5310                         Insert the window's class name.
5311
5312                     %r
5313                         Insert the window's resource name.
5314
5315                     %t
5316                         Insert the window count.
5317
5318                     %I
5319                         Insert the window ID.
5320
5321                     %%
5322                         Insert a literal '%' character.
5323
5324                     Any amount of whitespace may be used, along with other
5325                     characters to make up the string -- but a valid
5326                     TitleFormat string must contain at least one of the
5327                     placeholders mentioned.  No quote stripping is performed
5328                     on the string, so for example the following is printed
5329                     verbatim:
5330
5331                             TitleFormat " %n " -> [%t] ->      [%c]
5332
5333                     Note: It's perfectly possible to use a TitleFormat which
5334                     can result in wiping out the visible title altogether.
5335                     For example:
5336
5337                             TitleFormat %z
5338
5339                     Simply because the placeholder '%z' isn't supported.
5340                     This is not a bug but rather a facet of how the
5341                     formatting parser works.
5342
5343                     IconTitleFormat describes what the visible icon name of a
5344                     window should look like, with the options being the same
5345                     as TitleFormat.
5346
5347              Title buttons
5348                     Button and !Button take a numeric argument which is the
5349                     number of the title-bar button which is to be shown or
5350                     omitted.  NoButton is equivalent to !Button but is
5351                     deprecated.
5352
5353                     MwmButtons makes the Maximize button look pressed-in when
5354                     the window is maximized.  See the MwmDecorMax flag in
5355                     ButtonStyle for more information.  To switch this style
5356                     off again, use the FvwmButtons style.
5357
5358              Borders
5359                     !Borders suppresses the window border (but not the title)
5360                     completely.  The Borders style enables them again.
5361                     Without borders, all other styles affecting window
5362                     borders are meaningless.
5363
5364                     MwmBorder makes the 3D bevel more closely match Mwm's.
5365                     FvwmBorder turns off the previous option.
5366
5367                     With the !Handles style, the window does not get the
5368                     handles in the window corners that are commonly used to
5369                     resize it.  With !Handles, the width from the BorderWidth
5370                     style is used.  By default, or if Handles is specified,
5371                     the width from the HandleWidth style is used.  NoHandles
5372                     is equivalent to !Handles but is deprecated.
5373
5374                     HandleWidth takes a numeric argument which is the width
5375                     of the border to place the window if it does have
5376                     resize-handles.  Using HandleWidth without an argument
5377                     restores the default.
5378
5379                     BorderWidth takes a numeric argument which is the width
5380                     of the border to place the window if it does not have
5381                     resize-handles.  It is used only if the !Handles style is
5382                     specified too.  Using BorderWidth without an argument
5383                     restores the default.
5384
5385                     DepressableBorder makes the border parts of the window
5386                     decoration look sunken in when a button is pressed over
5387                     them.  This can be disabled again with the FirmBorder
5388                     style.
5389
5390              Icons, shading, maximizing, movement, resizing
5391                     Icon takes an (optional) unquoted string argument which
5392                     is the icon bitmap or pixmap to use.  Icons specified
5393                     this way override pixmap icons, but not icon windows or
5394                     the ewmh icon, provided by the client in the application
5395                     (with the WM_HINTS property or with the ewmh _NET_WM_ICON
5396                     property).  The IconOverride style changes the behavior
5397                     to override any client-provided icons; the NoIconOverride
5398                     style changes the behavior to not override any
5399                     client-provided icons; the default overriding behavior
5400                     can be activated with the NoActiveIconOverride style.
5401                     With this style, fvwm uses application provided icons if
5402                     the icon is changed but uses the icon provided in the
5403                     configuration file until then.
5404
5405                     There is one exception to these rules, namely
5406
5407                         Style * Icon unknown.xpm
5408
5409                     doesn't force the unknown.xpm icon on every window, it
5410                     just sets the default icon like the DefaultIcon command.
5411                     If you really want all windows to have the same icon, you
5412                     can use
5413
5414                         Style ** Icon unknown.xpm
5415
5416                     If the NoIcon attribute is set then the specified window
5417                     simply disappears when it is iconified.  The window can
5418                     be recovered through the window-list.  If Icon is set
5419                     without an argument then the NoIcon attribute is cleared
5420                     but no icon is specified.  An example which allows only
5421                     the FvwmPager module icon to exist:
5422
5423                         Style * NoIcon
5424                         Style FvwmPager Icon
5425
5426                     IconBox takes no argument, four numeric arguments (plus
5427                     optionally a screen specification), an X11 geometry
5428                     string or the string "none":
5429
5430                         IconBox [screen scr-spec] l t r b
5431
5432                     or
5433
5434                         IconBox geometry
5435
5436                     Where l is the left coordinate, t is the top, r is right
5437                     and b is bottom.  Negative coordinates indicate distance
5438                     from the right or bottom of the screen.  If the first
5439                     argument is the word screen, the scr-spec argument
5440                     specifies the Xinerama screen on which the IconBox is
5441                     defined.  It can be the usual screen Xinerama
5442                     specification, 'p', ´c', 'g', a screen number or the
5443                     additional 'w' for the screen where the window center is
5444                     located.  This is only useful with multiple Xinerama
5445                     screens.  The "l t r b" specification is more flexible
5446                     than an X11 geometry.  For example:
5447
5448                         IconBox -80 240 -1 -1
5449
5450                     defines a box that is 80 pixels wide from the right edge,
5451                     240 pixels down from the top, and continues to the bottom
5452                     of the screen.
5453
5454                     Perhaps it is easier to use is an X11 geometry string
5455                     though:
5456
5457                         IconBox 1000x70-1-1
5458
5459                     places an 1000 by 70 pixel icon box on the bottom of the
5460                     screen starting in the lower right hand corner of the
5461                     screen.  One way to figure out a geometry like this is to
5462                     use a window that resizes in pixel increments, for
5463                     example, xv.  Then resize and place the xv window where
5464                     you want the iconbox.  Then use FvwmIdent to read the
5465                     windows geometry.  The icon box is a region of the screen
5466                     where fvwm attempts to put icons for any matching window,
5467                     as long as they do not overlap other icons.  Multiple
5468                     icon boxes can be defined as overflow areas.  When the
5469                     first icon box is full, the second one is filled.  All
5470                     the icon boxes for one style must be defined in one Style
5471                     command.  For example:
5472
5473                         Style * IconBox -80 240 -1 -1, \
5474                                 IconBox 1000x70-1-1
5475
5476                     A Style command with the IconBox option replaces any icon
5477                     box defined previously by another Style command for the
5478                     same style.  That's why the backslash in the previous
5479                     example is required.
5480
5481                     Note: The geometry for the icon box command takes the
5482                     additional screen specifier "@w" in case a Xinerama setup
5483                     is used.  This designates the screen where the window
5484                     center is located.  The additional screen specifier is
5485                     not allowed anywhere else.
5486
5487                     If you never define an icon box, or you fill all the icon
5488                     boxes, fvwm has a default icon box that covers the
5489                     screen, it fills top to bottom, then left to right, and
5490                     has an 80x80 pixel grid.  To disable all but the default
5491                     icon box you can use IconBox without arguments in a
5492                     separate Style command.  To disable all icon boxes
5493                     including the default icon box, the argument "none" can
5494                     be specified.
5495
5496                     Hint: You can auto arrange your icons in the icon box
5497                     with a simple fvwm function.  Put the
5498                     "DeiconifyAndRearrange" function below in your
5499                     configuration file:
5500
5501                         AddToFunc DeiconifyAndRearrange
5502                          + C Iconify off
5503                          + C All (CurrentPage, Iconic) PlaceAgain Icon
5504
5505                     And then replace all places where you call the Iconify
5506                     command to de-iconify an icon with a call to the new
5507                     function.  For example replace
5508
5509                         AddToFunc IconFunc
5510                          + C Iconify off
5511                          + M Raise
5512                          + M Move
5513                          + D Iconify off
5514
5515                         Mouse 1 I A Iconify off
5516
5517                     with
5518
5519                         AddToFunc IconFunc
5520                          + C DeiconifyAndRearrange
5521                          + M Raise
5522                          + M Move
5523                          + D DeiconifyAndRearrange
5524
5525                         Mouse 1 I A DeiconifyAndRearrange
5526
5527                     IconGrid takes 2 numeric arguments greater than zero.
5528
5529                         IconGrid x y
5530
5531                     Icons are placed in an icon box by stepping through the
5532                     icon box using the x and y values for the icon grid,
5533                     looking for a free space.  The default grid is 3 by 3
5534                     pixels which gives a tightly packed appearance.  To get a
5535                     more regular appearance use a grid larger than your
5536                     largest icon.  Use the IconSize argument to clip or
5537                     stretch an icon to a maximum size.  An IconGrid
5538                     definition must follow the IconBox definition that it
5539                     applies to:
5540
5541                         Style * IconBox -80x240-1-1, IconGrid 90 90
5542
5543                     IconFill takes 2 arguments.
5544
5545                         IconFill Bottom Right
5546
5547                     Icons are placed in an icon box by stepping through the
5548                     icon box using these arguments to control the direction
5549                     the box is filled in.  By default the direction is left
5550                     to right, then top to bottom.  This would be expressed
5551                     as:
5552
5553                         IconFill left top
5554
5555                     To fill an icon box in columns instead of rows, specify
5556                     the vertical direction (top or bottom) first.  The
5557                     directions can be abbreviated or spelled out as follows:
5558                     "t", "top", "b", "bot", "bottom", "l", "lft", "left",
5559                     "r", "rgt", "right".  An IconFill definition must follow
5560                     the IconBox definition that it applies to:
5561
5562                         Style * IconBox -80x240-1-1, IconFill b r
5563
5564                     IconSize sets limits on the size of an icon image.  Both
5565                     user-provided and application-provided icon images are
5566                     affected.
5567
5568                         IconSize [ width height [ maxwidth maxheight ] ]
5569
5570                     All arguments are measured in pixels.  When all four
5571                     arguments are passed to IconSize, width and height
5572                     represent the minimum size of an icon, and maxwidth and
5573                     maxheight represent the maximum size of an icon.  Icon
5574                     images that are smaller than the minimum size are padded.
5575                     Icon images that are bigger than the maximum size are
5576                     clipped.
5577
5578                     If only two arguments are passed to IconSize, width and
5579                     height represent the absolute size of an icon.  Icons
5580                     covered by this style are padded or clipped to achieve
5581                     the given size.
5582
5583                     If no arguments are specified, the default values are
5584                     used for each dimension.  This effectively places no
5585                     limits on the size of an icon.
5586
5587                     The value of "-1" can be used in place of any of the
5588                     arguments to specify the default value for that
5589                     dimension.
5590
5591                     In addition to the numeric arguments, 1 additional
5592                     argument can be "Stretched", "Adjusted", or "Shrunk".
5593
5594                     Note that module provided icon managers are not affected
5595                     by this style.
5596
5597              MiniIcon specifies a pixmap to use as the miniature icon for the
5598              window.  This miniature icon can be drawn in a title-bar button
5599              (see ButtonStyle), and can be used by various fvwm modules
5600              (FvwmIconMan and FvwmPager).  It takes the name of a pixmap as
5601              an argument.
5602
5603              WindowShadeShrinks and WindowShadeScrolls control if the
5604              contents of a window that is being shaded with the WindowShade
5605              command are scrolled (default) or if they stay in place.  The
5606              shrinking mode is a bit faster
5607
5608              The WindowShadeSteps option selects the number of steps for
5609              animation when shading a window with WindowShade.  It takes one
5610              number as its argument.  If the number has a trailing 'p' it
5611              sets the number of pixels to use as the step size instead of a
5612              fixed number of steps.  0 disables the animation.  This happens
5613              too if the argument is omitted or invalid.
5614
5615              The WindowShade command has two modes of operation: busy and
5616              lazy shading.  Busy shading can be 50% slower than lazy shading,
5617              but the latter can look strange under some conditions, for
5618              example, if the window borders, buttons or the title are filled
5619              with a tiled pixmap.  Also, the window handles are not drawn in
5620              lazy mode and the border relief may only be drawn partially
5621              right before the window reaches the shaded state or tight after
5622              leaves the unshaded state.  By default, fvwm uses lazy mode if
5623              there are no bad visual effects (not counting the window
5624              handles) and busy mode otherwise.  Use the WindowShadeAlwaysLazy
5625              or WindowShadeBusy to force using the lazy or busy mode.  The
5626              default setting is restored with WindowShadeLazy.
5627
5628              ResizeOpaque instructs fvwm to resize the corresponding windows
5629              with their contents visible instead of using an outline.  Since
5630              this causes the application to redraw frequently it can be quite
5631              slow and make the window flicker excessively, depending on the
5632              amount of graphics the application redraws.  The ResizeOutline
5633              style (default) negates the ResizeOpaque style.  Many
5634              applications do not like their windows being resized opaque,
5635              e.g. XEmacs, Netscape or terminals with a pixmap background.  If
5636              you do not like the result, do not use the ResizeOpaque style
5637              for these windows.  To exempt certain windows from opaque
5638              resizing you could use these lines in your configuration file:
5639
5640                  Style * ResizeOpaque
5641                  Style rxvt ResizeOutline
5642                  Style emacs ResizeOutline
5643
5644              Sticky makes the window sticky, i.e. it is always visible on
5645              each page and each desk.  The opposite style, Slippery reverts
5646              back to the default.
5647
5648              StickyIcon makes the window sticky when it's iconified.  It
5649              de-iconifies on top the active desktop.  SlipperyIcon reverts
5650              back to the default.
5651
5652              StickyAcrossPages and StickyAcrossPagesIcon work like Sticky and
5653              StickyIcon, but stick the window only across pages, not desks
5654              while StickyAcrossDesks and StickyAcrossDesksIcon works the
5655              other way round.
5656
5657              Windows that have been marked as Sticky or StickyAcrossDesks or
5658              StickyAcrossPages will have stipples drawn on the titlebar.
5659              This can be negated with the !StickyStippledTitle style.  The
5660              style StickyStippledTitle puts back the stipples where that
5661              window has also been marked as Sticky.  Note that this is the
5662              default style for Sticky windows.  Sticky icons will have
5663              stipples drawn on the icon title.  This can be disabled in the
5664              same way with the !StickyStippledIconTitle style.
5665
5666              Windows with the StartIconic style are shown as icons initially.
5667              Note that some applications counteract that by deiconifying
5668              themselves.  The default is to not iconify windows and can be
5669              set with the StartNormal style.
5670
5671              StickyIcon makes the window sticky when it's iconified.  It
5672              de-iconifies on top the active desktop.  SlipperyIcon reverts
5673              back to the default.
5674
5675              StickyIconPage works like StickyIcon, but sticks the icon only
5676              across pages, not desks while StickyIconDesk works the other way
5677              round.
5678
5679              StippledIconTitle works like StippledTitle in that it draws
5680              stipples on the titles of icons but doesn't make the icon
5681              sticky.
5682
5683              IgnoreRestack makes fvwm ignore attempts of clients to raise or
5684              lower their own windows.  By default, the opposite style,
5685              AllowRestack is active.
5686
5687              FixedPosition and FixedUSPosition make fvwm ignore attempts of
5688              the user to move the window.  It is still possible to move the
5689              window by resizing it.  To allow the user to move windows, use
5690              the VariablePosition or VariableUSPosition style.
5691
5692              FixedSize and FixedUSSize make fvwm ignore attempts of the user
5693              to resize the window.  To allow the user to resize windows, use
5694              the VariableSize or VariableUSSize style.
5695
5696              FixedPPosition and FixedPSize make fvwm ignore attempts of the
5697              program to move or resize its windows.  To allow this kind of
5698              actions, use the VariablePPosition or VariablePSize style.
5699              These styles may sometimes affect the initial placement and
5700              dimensions of new windows (depending on the application).  If
5701              windows are created at strange places, try either the
5702              VariablePPosition or !UsePPosition styles.  The FixedPSize style
5703              may screw up window dimensions for some applications.  Do Not
5704              use this style in this case.
5705
5706              MoveByProgramMethod affects how fvwm reacts to requests by the
5707              application to move its windows.  By default, fvwm tries to
5708              detect which method to use, but it sometimes detects the wrong
5709              method.  You may come across a window that travels across the
5710              screen by a few pixels when the application resizes it, moves to
5711              a screen border with the frame decorations off screen, that
5712              remembers its position for the next time it starts but appears
5713              in a slighly shifted position, or that attepmts to become full
5714              screen but has the.  Try out both options, UseGravity and
5715              IgnoreGravity on the window (and that window only) and see if
5716              that helps.  By default, fvwm uses the AutoDetect method.  Once
5717              the method was detected, it is never changed again.  As long as
5718              fvwm can not detect the proper method, it uses IgnoreGravity.
5719              To force fvwm to retry the detection, use one of the other two
5720              options first and then use AutoDetect again.
5721
5722              Note: This option was introduced to alleviate a problem with the
5723              ICCCM specification.  The ICCCM clearly states that the
5724              UseGravity option should be used, but traditionally applications
5725              ignored this rule.
5726
5727              Closable enables the functions Close, Delete and Destroy to be
5728              performed on the windows.  This is on by default.  The opposite,
5729              !Closable, inhibits the window to be closed.
5730
5731              Iconifiable enables the function Iconify to be performed on the
5732              windows.  This is on by default.  The opposite, !Iconifiable,
5733              inhibits the window from being iconified.
5734
5735              Maximizable enables the function Maximize to be performed on the
5736              windows.  This is on by default.  The opposite, !Maximizable,
5737              inhibits the window from being maximized.
5738
5739              AllowMaximizeFixedSize enables the function Maximize to be
5740              performed on windows that are not resizable, unless maximization
5741              has been disabled either using the style !Maximizable or through
5742              WM hints.  This is on by default.  The opposite,
5743              !AllowMaximizeFixedSize, inhibits all windows that are not
5744              resizable from being maximized.
5745
5746              ResizeHintOverride instructs fvwm to ignore the program supplied
5747              minimum and maximum size as well as the resize step size (the
5748              character size in many applications).  This can be handy for
5749              broken applications that refuse to be resized.  Do not use it if
5750              you do not need it.  The default (opposite) style is
5751              NoResizeOverride.
5752
5753              MinWindowSize [ width [ p ] height [ p ] ] Tells fvwm the
5754              minimum width and height of a window.  The values are the
5755              percentage of the total screen area.  If the letter 'p' is
5756              appended to either of the values, the numbers are interpreted as
5757              pixels.  This command is useful for certain versions of xemacs
5758              which freak out if their windows become too small.  If you omit
5759              he parameters or their values are invalid, both limits are set
5760              to 0 pixels (which is the default value).
5761
5762              MaxWindowSize [ width [ p ] height [ p ] ] Tells fvwm the
5763              maximum width and height of a window.  The values are the
5764              percentage of the total screen area.  If the letter 'p' is
5765              appended to either of the values, the numbers are interpreted as
5766              pixels.  This command is useful to force large application
5767              windows to be fully visible.  Neither height nor width may be
5768              less than 100 pixels.  If you omit the parameters or their
5769              values are invalid, both limits are set to 32767 pixels (which
5770              is the default).
5771
5772              With IconifyWindowGroups all windows in the same window group
5773              are iconified and deiconified at once when any window in the
5774              group is (de)iconified.  The default is IconifyWindowGroupsOff,
5775              which disables this behavior.  Although a number of applications
5776              use the window group hint, it is rarely used in a proper way, so
5777              it is probably best to use IconifyWindowGroups only for selected
5778              applications.
5779
5780              The option SnapAttraction affects interactive window movement:
5781              If during an interactive move the window or icon comes within
5782              proximity pixels of another the window or icon, it is moved to
5783              make the borders adjoin.  The default of 0 means that no
5784              snapping happens.  Calling this command without arguments turns
5785              off snap attraction and restores the default behavior.  Please
5786              refer also to the SnapGrid command.
5787
5788              The second argument determined is optional and may be set to one
5789              of the five following values: With All both icons and windows
5790              snap to other windows and other icons.  SameType lets windows
5791              snap only to windows, and icons snap only to icons.  With
5792              Windows windows snap only to other windows.  Similarly with
5793              Icons icons snap only to other icons.  With None no snapping
5794              takes place.  This option can be useful in conjunction with the
5795              following argument if you only want to snap against the screen
5796              edges.  The default behavior is All.
5797
5798              The third and last optional argument may be set to one of the
5799              four following values:
5800
5801              ·   With Screen the already snapping icons or windows, which is
5802                  controlled by the second argument, will snap now also to the
5803                  screen edges.
5804
5805              ·   ScreenWindows snaps only windows to the screen edges.
5806
5807              ·   ScreenIcons snaps only icons to the screen edges.
5808
5809              ·   ScreenAll snaps windows and icons to the screen edges.
5810
5811              The option SnapGrid defines an invisible grid on the screen.
5812              During an interactive move a window or icon is positioned such
5813              that its location (top left corner) is coincident with the
5814              nearest grid point.  The default x-grid-size and y-grid-size
5815              setting are both 1, which is effectively no grid all.
5816
5817              An interactive move with both SnapGrid and SnapAttraction
5818              results in the window being moved to be adjacent to the nearest
5819              window border (if within snap proximity) or grid position.  The
5820              window moves the shortest distance possible to satisfy both
5821              SnapGrid and SnapAttraction.  Note that the x and y coordinates
5822              are not coupled.  For example, a window may snap to another
5823              window on the x axis while snapping to a grid point on the y
5824              axis.  Using this style without arguments reinstates the default
5825              settings.
5826
5827              The styles EdgeMoveDelay and EdgeResizeDelay tells how hard it
5828              should be to change the desktop viewport by moving or resizing a
5829              window over the edge of the screen.  The parameter tells how
5830              many milliseconds the pointer must spend on the screen edge
5831              before fvwm moves the viewport.  The command EdgeScroll
5832              determines how far the viewport is scrolled.  If -1 is given as
5833              the delay, page flipping is disabled completely.  The defaults
5834              are no delay for moving (0) and no flipping for resizing (-1).
5835              Using these styles without any argument restores the default
5836              settings.  Note that, with
5837
5838                  EdgeScroll 0 0
5839
5840              it is still possible to move or resize windows across the edge
5841              of the current screen.  See also EdgeThickness.
5842
5843              The option EdgeMoveResistance makes it easier to place a window
5844              directly adjacent to the screen's or xinerama screen's border.
5845              It takes one or two parameters.  The first parameter tells how
5846              many pixels over the edge of the screen a window's edge must
5847              move before it actually moves partially off the screen.  The
5848              optional second parameter does the same as the first, but for
5849              individual Xinerama screens.  If omitted, the value of the first
5850              parameter is assumed for this type of movement.  Set the second
5851              parameter to 0 to zero to ignore individual xinerama screen
5852              edges.  Note that the center of the window being moved
5853              determines the xinerama screen on which the window should be
5854              kept.  Both values are 0 by default.  To restore the defaults,
5855              the option EdgeMoveResistance can be used without any
5856              parameters.
5857
5858              The option InitialMapCommand allows for any valid fvwm command
5859              or function to run when the window is initially mapped by fvwm.
5860              Example:
5861
5862                  Style MyWindow StartsOnPage 0 0, InitialMapCommand Iconify
5863
5864              This would hence place the window called MyWindow on page 0 0
5865              for the current desk, and immediately run the Iconify command on
5866              that window.
5867
5868              Note that should InitialMapCommand be used as a global option
5869              for all windows, but there is a need that some windows should
5870              not have this command applied, then an action of Nop can be used
5871              on those windows, as in the following example:
5872
5873                  Style * InitialMapCommand Iconify
5874                  Style XTeddy InitialMapCommand Nop
5875
5876       Window Manager placement
5877              Applications can place windows at a particular spot on the
5878              screen either by window manager hints or a geometry
5879              specification.  When they do neither, then the window manager
5880              steps in to find a place for the window.  Fvwm knows several
5881              ways to deal with this situation.  The default is
5882              TileCascadePlacement.
5883
5884              PositionPlacement [Center|UnderMouse|move-arguments] When used
5885              without an argument, new windows are placed in the top left
5886              corner of the display.  With the argument Center, all new window
5887              appear at the center of the screen, and with UnderMouse, windows
5888              are centered under the mouse pointer where possible.  If the
5889              window is unable to fit on the screen because the pointer is at
5890              the edge of the screen, then the window is forced on-screen
5891              using this option.  If any other move-arguments are given, they
5892              are interpreted exactly as the Move command does (with the
5893              exception that references to the current window position do not
5894              work as the window has not been placed yet).
5895
5896              CascadePlacement automatically place new windows in a cascading
5897              fashion.
5898
5899              TileCascadePlacement automatically places new windows in a smart
5900              location - a location in which they do not overlap any other
5901              windows on the screen.  If no such position can be found
5902              CascadePlacement is used as a fall-back method.
5903
5904              TileManualPlacement This is the same as TileCascadePlacement,
5905              but uses ManualPlacement as the fall-back method.
5906
5907              MinOverlapPlacement automatically places new windows in a
5908              location in which the overlapping area in pixels of other
5909              windows is minimized.  By default this placement policy tries to
5910              avoid overlapping icons and windows on higher layers.  This can
5911              be configured with the MinOverlapPlacementPenalties style.
5912
5913              MinOverlapPercentPlacement is similar to MinOverlapPlacement but
5914              tries to minimize the overlapped percentages of other windows
5915              instead of the overlapped area in pixels.  This placement policy
5916              tries to avoid covering other windows completely and tries even
5917              harder not to cover small windows.  This can be configured with
5918              the MinOverlapPlacementPenalties and
5919              MinOverlapPercentPlacementPenalties styles.
5920
5921              MinOverlapPlacementPenalties takes at most 6 positive or null
5922              decimal arguments:
5923
5924                  normal ontop icon sticky below strut
5925
5926              if trailing arguments are missing the default is used which is:
5927
5928                  1 5 10 1 0.05 50
5929
5930              To reset this style to the default values, prefix it with a '!'.
5931              This style configures the MinOverlapPlacement and
5932              MinOverlapPercentPlacement placement policy.  The normal factor
5933              affects normal windows, the ontop factor affects windows with a
5934              greater layer than the window being placed, the icon factor
5935              affects icons, the sticky factor affects sticky windows, the
5936              below factor affects windows with a smaller layer than the
5937              window being placed, the strut factor affects the complement of
5938              the EWMH working area if the window being placed has the
5939              EWMHPlacementUseWorkingArea style and windows with an EWMH strut
5940              hint (i.e., a "please do not cover me" hint) if the window being
5941              placed has the EWMHPlacementUseDynamicWorkingArea style.  These
5942              factors represent the amount of area that these types of windows
5943              (or area) are counted as, when a new window is placed.  For
5944              example, by default the area of ontop windows is counted 5 times
5945              as much as normal windows.  So MinOverlapPlacement and
5946              MinOverlapPercentPlacement covers 5 times as much area of
5947              another window before it will cover an ontop window.  To treat
5948              ontop windows the same as other windows, set this to 1.  To
5949              really, really avoid putting windows under ontop windows, set
5950              this to a high value, say 1000.  This style affects the window
5951              already mapped and not the window which is currently placed.
5952              There is one exception to this rule: in the case of the window
5953              being placed has the EWMHPlacementUseWorkingArea style the strut
5954              factor affects the placed window.
5955
5956              MinOverlapPercentPlacementPenalties takes at most 4 positive or
5957              null integer arguments:
5958
5959                  cover_100 cover_95 cover_85 cover_75
5960
5961              if trailing arguments are missing the defaults are used which
5962              are:
5963
5964                  12 6 4 1
5965
5966              To reset this style to the default values, prefix it with a '!'.
5967              This style affects the MinOverlapPercentPlacement placement
5968              policy and is similar to the MinOverlapPlacementPenalties style.
5969              The cover_xx factor is used when the window being placed covers
5970              at least xx percent of the window.  This factor is added to the
5971              factor determined by the MinOverlapPlacementPenalties style.
5972
5973              ManualPlacement (aka active placement).  The user is required to
5974              place every new window manually.  The window only shows as a
5975              rubber band until a place is selected manually.  The window is
5976              placed when a mouse button or any key except Escape is pressed.
5977              Escape aborts manual placement which places the window in the
5978              top left corner of the screen.  If mouse button 2 is pressed
5979              during the initial placement of a window (respectively Shift and
5980              mouse button 1 in case Mwm emulation has been enabled with the
5981              Emulate command), the user is asked to resize the window too.
5982
5983              It is possible to define buttons usable to place windows with
5984              the Move command and the special context 'P' for placement (see
5985              Move command).  However, you can't redefine the way to also
5986              resize the window other than the way it is affected by the
5987              Emulate command.  The button used for placing the window can be
5988              checked with the PlacedByButton condition (see Current command).
5989
5990              Example:
5991
5992                  Style * ManualPlacement
5993
5994                  *FvwmEvent: PassID
5995                  *FvwmEvent: add_window GrowDownFunc
5996                  AddToFunc StartFunction
5997                  + I FvwmEvent
5998
5999                  AddToFunc GrowDownFunc
6000                  + I windowid $0 (PlacedByButton 3) \
6001                    Resize bottomright keep -0p
6002
6003              Now, whenever a window is created and the user presses button 3
6004              to finish initial placement, the window is automatically
6005              enlarged until it hits the bottom screen border.
6006
6007              Old placement styles DumbPlacement / SmartPlacement /
6008              SmartPlacementOff, CleverPlacement / CleverPlacementOff,
6009              ActivePlacement / RandomPlacement,
6010              ActivePlacementsHonorsStartsOnPage /
6011              ActivePlacementsHonorsStartsOnPageOff, GlobalOpts
6012              SmartPlacementIsReallySmart / GlobalOpts SmartPlacementIsNormal
6013              are still supported but will be removed in the future.  The old
6014              and new styles can be translated according to the following
6015              table:
6016
6017                  GlobalOpts SmartPlacementIsReallySmart
6018                  Style * SmartPlacement
6019                  -->
6020                  Style * SmartPlacement, CleverPlacement
6021
6022                  GlobalOpts SmartPlacementIsNormal
6023                  Style * SmartPlacement
6024                    -->
6025                  Style * SmartPlacement, CleverPlacementOff
6026
6027                  Style * DumbPlacement, RandomPlacement
6028                    -->
6029                  Style * CascadePlacement
6030
6031                  Style * DumbPlacement, ActivePlacement
6032                    -->
6033                  Style * ManualPlacement
6034
6035                  Style * SmartPlacement, \
6036                  RandomPlacement, CleverPlacementOff
6037                    -->
6038                  Style * TileCascadePlacement
6039
6040                  Style * SmartPlacement, \
6041                  ActivePlacement, CleverPlacementOff
6042                    -->
6043                  Style * TileManualPlacement
6044
6045                  Style * SmartPlacement, CleverPlacement
6046                    -->
6047                  Style * MinOverlapPlacement
6048
6049                  Style * SmartPlacement, \
6050                  ActivePlacement, CleverPlacement
6051                    -->
6052                  Style * MinOverlapPercentPlacement
6053
6054                  Style * ActivePlacementsHonorsStartsOnPage
6055                    -->
6056                  Style * ManualPlacementsHonorsStartsOnPage
6057
6058                  Style * ActivePlacementsHonorsStartsOnPageOff
6059                    -->
6060                  Style * ManualPlacementsHonorsStartsOnPageOff
6061
6062       Placement policy options and window stacking
6063              !UsePPosition instructs fvwm to ignore the program specified
6064              position (PPosition hint) when adding new windows.  Using
6065              PPosition is required for some applications, but if you do not
6066              have one of those it's a real headache.  Many programs set
6067              PPosition to something obnoxious like 0,0 (upper left corner).
6068              Note: !UsePPosition is equivalent to the deprecated option
6069              !UsePPosition
6070
6071              !UseUSPosition works like !UsePPosition but applies suppresses
6072              using the user specified position indicated by the program
6073              (USPosition hint).  It is generally a bad thing to override the
6074              user's choice, but some applications misuse the USPosition hint
6075              to force their windows to a certain spot on the screen without
6076              the user's consent.  Note: !UseUSPosition is equivalent to the
6077              deprecated option !USPosition
6078
6079              NoUseTransientPPosition and UseTransientPPosition work like
6080              !UsePPosition and UsePPosition but apply only to transient
6081              windows.  Note: !UseTransientPPosition is equivalent to the
6082              deprecated option !TransientPPosition
6083
6084              NoUseIconPosition instructs fvwm to ignore the program specified
6085              icon position (IconPosition hint) when iconifying the window.
6086              Note: !UseIconPosition is equivalent to the deprecated option
6087              !IconPosition
6088
6089              StartsOnDesk takes a numeric argument which is the desktop
6090              number on which the window should be initially placed.  Note
6091              that standard Xt programs can also specify this via a resource
6092              (e.g. "-xrm '*Desk: 1'").
6093
6094              StartsOnPage takes 1, 2, or 3 numeric arguments.  If one or
6095              three arguments are given, the first (or only) argument is the
6096              desktop number.  If three arguments are given, the 2nd and 3rd
6097              arguments identify the x,y page position on the virtual window.
6098              If two arguments are given, they specify the page position, and
6099              indicate no desk preference.  If only one argument is given,
6100              StartsOnPage functions exactly like StartsOnDesk.  For those
6101              standard Xt programs which understand this usage, the starting
6102              desk/page can also be specified via a resource (e.g., "-xrm
6103              '*page: 1 0 2'").  StartsOnPage in conjunction with SkipMapping
6104              is a useful technique when you want to start an app on some
6105              other page and continue with what you were doing, rather than
6106              waiting for it to appear.
6107
6108              StartsOnScreen takes one argument.  It can be 'p' for the
6109              primary screen, 'c' for the current screen (containing the mouse
6110              pointer), 'g' for the global screen or the screen number itself
6111              (counting from zero).  A new window is placed on the specified
6112              Xinerama screen.  The default is to place windows on the screen
6113              that contains the mouse pointer at the time the window is
6114              created.  However, those windows which are not placed by fvwm
6115              (i.e., those with a USPosition hint from a user specified
6116              geometry) are normally placed in a position relative to the
6117              global screen.  The StartsOnScreen style is also useful to cause
6118              these windows to be placed relative to a specific Xinerama
6119              screen.  For example:
6120
6121                  Style * StartsOnScreen c
6122
6123              Would cause all windows, including those with their own geometry
6124              to be placed relative to the current Xinerama screen rather than
6125              the global screen.  For those standard Xt programs which
6126              understand this usage, the starting desk/page can also be
6127              specified via a resource (e.g., "-xrm '*fvwmscreen: c'").
6128              ('fvwmscreen' was chosen because some applications already use
6129              ´.screen' for other purposes.)
6130
6131              StartsOnPageIncludesTransients causes the StartsOnPage style to
6132              be applied even for transient windows.  This is not usually
6133              useful, since transients are usually pop ups that you want to
6134              appear in your visible viewport; but occasionally an application
6135              uses a transient for something like a startup window that needs
6136              to be coerced into place.
6137
6138              ManualPlacementIgnoresStartsOnPage suppresses StartsOnPage or
6139              StartsOnDesk placement in the event that both ManualPlacement
6140              and SkipMapping are in effect when a window is created.  This
6141              prevents you from interactively placing a window and then
6142              wondering where it disappeared to, because it got placed on a
6143              different desk or page.  ManualPlacementHonorsStartsOnPage
6144              allows this to happen anyway.  The option has no effect if
6145              SkipMapping is not in effect, because fvwm switches to the
6146              proper desk/page to perform interactive placement.  The default
6147              is ManualPlacementIgnoresStartsOnPage;
6148              ManualPlacementHonorsStartsOnPage matches the way the old
6149              StartsOnDesk style used to handle the situation.
6150
6151              CaptureHonorsStartsOnPage causes the initial capture (of an
6152              already existing window) at startup to place the window
6153              according to the StartsOnPage and StartsOnScreen desk, page and
6154              Xinerama screen specification.  CaptureIgnoresStartsOnPage
6155              causes fvwm to ignore these settings (including StartsOnDesk) on
6156              initial capture.  The default is CaptureIgnoresStartsOnPage.
6157
6158              RecaptureHonorsStartsOnPage causes a window to be placed
6159              according to, or revert to, the StartsOnPage and StartsOnScreen
6160              desk, page and Xinerama screen specification on Restart or
6161              Recapture.  RecaptureIgnoresStartsOnPage causes fvwm to respect
6162              the current window position on Restart or Recapture.  The
6163              default is RecaptureIgnoresStartsOnPage.
6164
6165              Layer accepts one optional argument: a non-negative integer.
6166              This is the layer the window is put in.  If no argument is
6167              given, any previously set value is deleted and the default layer
6168              is implied.
6169
6170              StaysOnTop puts the window in the top layer.  This layer can be
6171              changed by the command DefaultLayers; the default is 6.
6172
6173              StaysPut puts the window in the put layer.  This layer can be
6174              changed by the command DefaultLayers; the default is 4.
6175
6176              StaysOnBottom puts the window in the bottom layer.  This layer
6177              can be changed by the command DefaultLayers; the default is 2.
6178
6179              StartsLowered instructs fvwm to put the window initially at the
6180              bottom of its layer rather than the default StartsRaised.
6181
6182              StartShaded tells fvwm to shade the window.  An optional
6183              direction argument may be given, which can be one of "North",
6184              "South", "West", "East", "NorthWest", "NorthEast", "SouthWest",
6185              "SouthEast" or if no direction is given, the default is to shade
6186              north.
6187
6188              SkipMapping tells fvwm not to switch to the desk the window is
6189              on when it gets mapped initially (useful with StartsOnDesk or
6190              StartsOnPage).
6191
6192              KeepWindowGroupsOnDesk makes new windows that have the window
6193              group hint set appear on the same desk as the other windows of
6194              the same group.  Since this behavior may be confusing, the
6195              default setting is ScatterWindowGroups.  The window group hint
6196              is ignored when placing windows in this case.
6197
6198       Transient windows
6199              DecorateTransient causes transient windows, which are normally
6200              left undecorated, to be given the usual fvwm decorations (title
6201              bar, buttons, etc.).  Note that some pop-up windows, such as the
6202              xterm menus, are not managed by the window manager and still do
6203              not receive decorations.  NakedTransient (the default) causes
6204              transient windows not to be given the standard decorations.  You
6205              can only bind keys or mouse buttons to the sides and the client
6206              part of an undecorated window ('S' and ´W' contexts in bindings,
6207              see Mouse and Key commands).
6208
6209              A window with the RaiseTransient style that has transient
6210              windows raises all its transients when it is raised.  The
6211              DontRaiseTransient style disables this behavior.  All windows
6212              are then treated as if they had no transients.
6213
6214              A window with the LowerTransient style that has transient
6215              windows lowers all its transients when it is lowered.  The
6216              DontLowerTransient style disables this behavior.  All windows
6217              are then treated as if they had no transients.
6218
6219              The StackTransientParent style augments RaiseTransient and
6220              LowerTransient styles.  Raising a window with
6221              StackTransientParent style transfers the raise action to the
6222              main window if the window being raised is a transient and its
6223              main window has RaiseTransient style; this effect makes raise on
6224              a transient act just like raise on its main - the whole group is
6225              raised.  Similar behavior holds for lowering a whole group of
6226              transients when the main has LowerTransient style.
6227              DontStackTransientParent turns this behavior off.
6228              (Dont)StackTransientParent has no effect if RaiseTransient and
6229              LowerTransient are not used.
6230
6231              A reasonable emulation of Motif raise/lower on transients is
6232              possible like this
6233
6234                  Style * RaiseTransient
6235                  Style * LowerTransient
6236                  Style * StackTransientParent
6237
6238       Extended Window Manager Hints styles
6239              To understand the used terminology in this sub section, please
6240              read the Extended Window Manager Hints section.
6241
6242              EWMHDonateIcon instructs fvwm to set the application ewmh icon
6243              hint with the icon that is used by fvwm if the application does
6244              not provide such hint (and if the icon used by fvwm is not an
6245              icon window).  EWMHDonateMiniIcon does the same thing for mini
6246              icons.  This allows compliant pager, taskbar, iconbox ...etc to
6247              display the same (mini) icons as fvwm.  Note that on some
6248              hardware (e.g., 8-bit displays) these styles can slow down
6249              window mapping and that in general only one of these styles is
6250              needed by a compliant application.  EWMHDontDonateIcon and
6251              EWMHDontDonateMiniIcon restore the defaults which are to not set
6252              any ewmh (mini) icons hints.
6253
6254              By default, if an application provides an ewmh icon hint of
6255              small size (i.e., height and width less than or equal to 22),
6256              then fvwm uses this icon as its mini icon.  EWMHMiniIconOverride
6257              instructs fvwm to ignore ewmh icons and to use the mini icon
6258              provided by the MiniIcon style.  EWMHNoMiniIconOverride restores
6259              the default.
6260
6261              EWMHUseStackingOrderHints causes fvwm to use EWMH hints and
6262              respect EWMH hints which change the window layer.
6263              EWMHIgnoreStackingOrderHints causes fvwm to ignore EWMH layer
6264              hints.
6265
6266              An application can ask for some reserved space on the desktop by
6267              a hint.  In the EWMH terminology such a hint is called a strut
6268              and it is used to compute the working area and may be used for
6269              window placement and in the maximize command.
6270              EWMHIgnoreStrutHints causes fvwm to ignore such hints, as
6271              EWMHUseStrutHints, causes fvwm to use it which is the default.
6272
6273              EWMHIgnoreStateHints causes fvwm to ignore initial EWMH state
6274              hints when a new window is mapped.  The default
6275              EWMHUseStateHints causes fvwm to accept such hints.
6276
6277              EWMHIgnoreWindowType causes fvwm to ignore EWMH window type
6278              specification.  The default !EWMHIgnoreWindowType causes fvwm to
6279              style windows of specified types as such.
6280
6281              EWMHMaximizeIgnoreWorkingArea causes fvwm to ignore the EWMH
6282              working area when it executes a Maximize command.  With
6283              EWMHMaximizeUseWorkingArea the EWMH working area is used as with
6284              EWMHMaximizeUseDynamicWorkingArea the EWMH dynamic working area
6285              is used (the default).
6286
6287              EWMHPlacementIgnoreWorkingArea causes fvwm to ignore the EWMH
6288              working area when it places (or places again) a window.  With
6289              EWMHPlacementUseWorkingArea the EWMH working area is taken in
6290              account as with EWMHPlacementUseDynamicWorkingArea the EWMH
6291              dynamic working area is taken in account (the default).  Note
6292              that with the MinOverlapPlacement and MinOverlapPercentPlacement
6293              placement policy, the way the EWMH (dynamic) working area is
6294              taken in account is configurable with the
6295              MinOverlapPlacementPenalties style.
6296
6297       Miscellaneous
6298              The BackingStore, BackingStoreOff and BackingStoreWindowDefault
6299              determine if the X server uses backing store for the window or
6300              not.  BackingStore means that the X server tries to keep the
6301              obscured parts of a window in memory.  This is usually slower if
6302              the client runs on the same machine as the X server, but can be
6303              much faster if the connection is slow (see also SaveUnder
6304              below).  BackingStoreOff disables backing store for the window.
6305              By default, fvwm does not enable or disable backing store itself
6306              but leaves is as the window requested it.  To revert back to the
6307              application's choice, use the BackingStoreWindowDefault style.
6308
6309              Note: This style is useless if the X server does not allow
6310              backing store.
6311
6312              SaveUnder enables the corresponding window attribute in the X
6313              server.  For a window using this style, the X server tries to
6314              store the graphics below it in memory which is usually slower if
6315              the client runs on the same machine as the X server.  SaveUnder
6316              may speed up fvwm if the connection to the X server is slow
6317              (e.g. over a modem link).  To disable save under, use the
6318              SaveUnderOff style.  This is the default.  See also BackingStore
6319              above.
6320
6321              Note: This style is useless if the X server does not allow save
6322              under.
6323
6324              ParentalRelativity enables clients that use a background pixmap
6325              of type ParentRelative to achieve transparency.  Fvwm modules
6326              that support transparent colorsets require this setting.
6327              Opacity is the default and should be used for all
6328              non-transparent clients for better performance.
6329
6330              MwmDecor makes fvwm attempt to recognize and respect the mwm
6331              decoration hints that applications occasionally use.  To switch
6332              this style off, use the NoDecorHint style.
6333
6334              MwmFunctions makes fvwm attempt to recognize and respect the mwm
6335              prohibited operations hints that applications occasionally use.
6336              HintOverride makes fvwm shade out operations that mwm would
6337              prohibit, but it lets you perform the operation anyway.
6338              NoFuncHint allows turns off the mwm hints completely.
6339
6340              OLDecor makes fvwm attempt to recognize and respect the olwm and
6341              olvwm hints that many older XView and OLIT applications use.
6342              Switch this option off with NoOLDecor.
6343
6344              With GNOMEIgnoreHints fvwm ignores all GNOME hints for the
6345              window, even if GNOME compliance is compiled in.  This is useful
6346              for those pesky applications that try to be more clever than the
6347              user and use GNOME hints to force the window manager to ignore
6348              the user's preferences.  The GNOMEUseHints style switches back
6349              to the default behavior.
6350
6351              UseDecor This style is deprecated and will be removed in the
6352              future.  There are plans to replace it with a more flexible
6353              solution in fvwm-3.0.
6354
6355              UseDecor accepts one argument: the name of a decor created with
6356              AddToDecor.  If no decor name is specified, the "Default" decor
6357              is used.  Windows do not actually contain decors, but are always
6358              assigned to one.  If the decor is later modified with
6359              AddToDecor, the changes are visible for all windows which are
6360              assigned to it.  The decor for a window can be reassigned with
6361              ChangeDecor.
6362
6363              UseStyle This style is deprecated and will be removed in the
6364              future.  There are plans to replace it with a more flexible
6365              solution in fvwm-3.0.
6366
6367              UseStyle takes one arg, which is the name of another style.
6368              That way you can have unrelated window names easily inherit
6369              similar traits without retyping.  For example:
6370
6371                    Style rxvt UseStyle XTerm
6372
6373              Warning: If a style is built from one or more parent styles and
6374              the parent styles are changed, the derived style is not
6375              modified.  To achieve this you have to issue the UseStyle line
6376              again.
6377
6378              Unmanaged Windows with the Unmanaged style option are ignored by
6379              fvwm.  They are not decorated, can not be moved or resized, etc.
6380              You probably want to use Bugopts RaiseOverUnmanaged too.  This
6381              option can be turned off with the !Unmanaged style.  However,
6382              windows that are already ignored at the time when the option is
6383              set must be recaptured with the Recapture command in order to
6384              become managed.
6385
6386              State sets the initial value of one of the 32 user defined
6387              states which are associated with each window.  The state number
6388              ranges from 0 to 31 and must be given as an argument.  The
6389              states have no meaning in fvwm, but they can be checked in
6390              conditional commands like Next with the State condition and
6391              manipulated with the State command.
6392
6393                  # turn on state 11 for xterms ...
6394                  Style xterm State 11
6395                  # ... but not for rxvts.
6396                  Style rxvt !State 11
6397
6398
6399              Windows with the WindowListSkip styles do not appear in the menu
6400              that is created with the WindowList command or the lists shown
6401              in modules like FvwmIconMan.  In the modules, the style can
6402              usually be ignored with an option.  Please refer to the man page
6403              of the module in question for further information.  To disable
6404              this feature, use the default style WindowListHit.
6405
6406              The styles CirculateSkip and CirculateHit control whether the
6407              window is considered by conditional commands, for example Next,
6408              Prev or All.  Windows with CirculateSkip, are never selected by
6409              conditional commands.  However, the styles can be overridden
6410              explicitly in the condition with the CirculateHit,
6411              CirculateHitIcon or CirculateHitShaded conditions, and some
6412              conditional commands, e.g.  Current and All, do this by default.
6413              The styles CirculateSkipIcon, CirculateHitIcon,
6414              CirculateSkipShaded and CirculateHitShaded work like
6415              CirculateSkip and CirculateHit but apply only to iconic or
6416              shaded windows.  Note: if multiple ...Skip... options are
6417              combined, windows are only selected if they match none of the
6418              given conditions.  So, with
6419
6420                  Style * CirculateSkipIcon, CirculateSkipShaded
6421
6422              only windows that are neither iconic nor shaded are selected.
6423              Note: For historical reasons, the conditional commands
6424              understand the names of these styles as condition names.  Take
6425              care not to confuse them.
6426
6427       Examples
6428
6429                  # Change default fvwm behavior to no title-
6430                  # bars on windows! Also define a default icon.
6431                  Style *             !Title,                \
6432                                      Icon unknown1.xpm,     \
6433                                      BorderWidth 4,         \
6434                                      HandleWidth 5
6435
6436                  # now, window specific changes:
6437                  Style Fvwm*       !Handles, Sticky,        \
6438                                    WindowListSkip,          \
6439                                    BorderWidth 0
6440                  Style FvwmPager   StaysOnTop, BorderWidth 0
6441                  Style *lock       !Handles, Sticky,        \
6442                                    StaysOnTop, WindowListSkip
6443                  Style xbiff       Sticky, WindowListSkip
6444                  Style FvwmButtons !Handles, Sticky,        \
6445                                    WindowListSkip
6446                  Style sxpm        !Handles
6447
6448                  # Put title-bars back on xterms only!
6449                  Style xterm     Title, Color black/grey
6450
6451                  Style rxvt        Icon term.xpm
6452                  Style xterm       Icon rterm.xpm
6453                  Style xcalc       Icon xcalc.xpm
6454                  Style xbiff       Icon mail1.xpm
6455                  Style xmh         Icon mail1.xpm,         \
6456                                      StartsOnDesk 2
6457                  Style xman        Icon xman.xpm
6458                  Style matlab      Icon math4.xpm,         \
6459                                      StartsOnDesk 3
6460                  Style xmag        Icon magnifying_glass2.xpm
6461                  Style xgraph      Icon graphs.xpm
6462                  Style FvwmButtons Icon toolbox.xpm
6463                  Style Maker       StartsOnDesk 1
6464                  Style signal      StartsOnDesk 3
6465
6466                  # Fire up Netscape on the second desk, in the
6467                  # middle of my 3x3 virtual desktop, and do not
6468                  # bother me with it...
6469                  Style Netscape* SkipMapping,              \
6470                                  StartsOnPage 1 1 1
6471
6472              Note that all properties for a window are or'ed together.  In
6473              the above example "FvwmPager" gets the property StaysOnTop via
6474              an exact window name match but also gets !Handles, Sticky and
6475              WindowListSkip by a match to "Fvwm*".  It gets !Title by virtue
6476              of a match to "*".  If conflicting styles are specified for a
6477              window, then the last style specified is used.
6478
6479       WindowStyle options
6480              sets attributes (styles) on the selected window.  The options
6481              are exactly the same as for the Style command.
6482
6483   Window Styles
6484       AddButtonStyle button [state] [style] [-- [!]flag ...]
6485              Adds a button style to button.  button can be a button number,
6486              or one of "All", "Left" or "Right".  state can be "ActiveUp",
6487              "ActiveDown", "InactiveUp" or "InactiveDown", or "Active" (the
6488              same as both "ActiveUp" and "ActiveDown") or "Inactive" (the
6489              same as both "InactiveUp" and "InactiveDown") or any of these 6
6490              with "Toggled" prepended.  The "Active" states apply to the
6491              focused window, the "Inactive" ones apply to all other windows.
6492              The "Up" states apply to the non pressed buttons, the "Down"
6493              ones apply to pressed buttons.  The "Toggled" prefix refers to
6494              maximized, shaded or sticky windows that have the corresponding
6495              MwmDecor...  button style set.  Additionally, the following
6496              shortcuts may be used: "AllNormal", "AllToggled", "AllActive",
6497              "AllInactive", "AllUp", "AllDown".  They are actually different
6498              masks for 4 individual states from 8 total.  These are supported
6499              too: "AllActiveUp", "AllActiveDown", "AllInactiveUp",
6500              "AllInactiveDown".
6501
6502              If state is omitted, then the style is added to every state.  If
6503              the style and flags are enclosed in parentheses, then multiple
6504              state definitions can be placed on a single line.  Flags for
6505              additional button styles cannot be changed after definition.
6506
6507              Buttons are drawn in the order of definition, beginning with the
6508              most recent button style, followed by those added with
6509              AddButtonStyle.  To clear the button style stack, change style
6510              flags, or for descriptions of available styles and flags, see
6511              the ButtonStyle command.  Examples:
6512
6513                  ButtonStyle 1 Pixmap led.xpm -- Top Left
6514                  ButtonStyle 1 ActiveDown HGradient 8 grey black
6515                  ButtonStyle All --  UseTitleStyle
6516                  AddButtonStyle 1 \
6517                       ActiveUp (Pixmap a.xpm) \
6518                       ActiveDown (Pixmap b.xpm -- Top)
6519                  AddButtonStyle 1 Vector 4 50x30@1 70x70@0 30x70@0 50x30@1
6520
6521              Initially for this example all button states are set to a
6522              pixmap.  The second line replaces the "ActiveDown" state with a
6523              gradient (it overrides the pixmap assigned to it in the line
6524              before, which assigned the same style to every state).  Then,
6525              the UseTitleStyle flag is set for all buttons, which causes fvwm
6526              to draw any styles set with TitleStyle before drawing the
6527              buttons.  Finally, AddButtonStyle is used to place additional
6528              pixmaps for both "ActiveUp" and "ActiveDown" states and a vector
6529              button style is drawn on top of all states.
6530
6531       AddTitleStyle [state] [style] [-- [!]flag ...]
6532              Adds a title style to the title-bar.  state can be "ActiveUp",
6533              "ActiveDown", "InactiveUp" or "InactiveDown", or "Active" (the
6534              same as both "ActiveUp" and "ActiveDown") or "Inactive" (the
6535              same as both "InactiveUp" and "InactiveDown") or any of these 6
6536              with "Toggled" prepended.  If state is omitted, then the style
6537              is added to every state.  If the style and flags are enclosed in
6538              parentheses, then multiple state definitions can be placed on a
6539              single line.  This command is quite similar to the
6540              AddButtonStyle command.
6541
6542              Title-bars are drawn in the order of definition, beginning with
6543              the most recent TitleStyle, followed by those added with
6544              AddTitleStyle.  To clear the title style stack, change style
6545              flags, or for the descriptions of available styles and flags,
6546              see the TitleStyle and ButtonStyle commands.
6547
6548       AddToDecor decor
6549              This command is deprecated and will be removed in the future.
6550              There are plans to replace it with a more flexible solution in
6551              fvwm-3.0.
6552
6553              Add or divert commands to the decor named decor.  A decor is a
6554              name given to the set of commands which affect button styles,
6555              title-bar styles and border styles.  If decor does not exist it
6556              is created; otherwise the existing decor is modified.  Note:
6557              Earlier versions allowed to use the HilightColor,
6558              HilightColorset and WindowFont commands in decors.  This is no
6559              longer possible.  Please use the Style command with the
6560              Hilight... and Font options.
6561
6562              New decors start out exactly like the "default" decor without
6563              any style definitions.  A given decor may be applied to a set of
6564              windows with the UseDecor option of the Style command.
6565              Modifying an existing decor affects all windows which are
6566              currently assigned to it.
6567
6568              AddToDecor is similar in usage to the AddToMenu and AddToFunc
6569              commands, except that menus and functions are replaced by
6570              ButtonStyle, AddButtonStyle, TitleStyle, AddTitleStyle and
6571              BorderStyle commands.  Decors created with AddToDecor can be
6572              manipulated with ChangeDecor, DestroyDecor, UpdateDecor and the
6573              Style option.
6574
6575              The following example creates a decor "FlatDecor" and style
6576              "FlatStyle".  They are distinct entities:
6577
6578                  AddToDecor FlatDecor
6579                  + ButtonStyle All Active (-- flat) Inactive (-- flat)
6580                  + TitleStyle  -- flat
6581                  + BorderStyle -- HiddenHandles NoInset
6582
6583                  Style FlatStyle \
6584                       UseDecor FlatDecor, HandleWidth 4, ForeColor white, \
6585                       BackColor grey40, HilightFore black, HilightBack grey70
6586
6587                  Style xterm UseStyle FlatStyle
6588
6589              An existing window's decor may be reassigned with ChangeDecor.
6590              A decor can be destroyed with DestroyDecor.
6591
6592                  DestroyDecor FlatDecor
6593                  AddToDecor FlatDecor ...
6594
6595                  Style FlatStyle UseDecor FlatDecor
6596
6597              and now apply the style again:
6598
6599                  Style xterm UseStyle FlatStyle
6600
6601       BorderStyle state [style] [-- [!]flag ...]
6602              Defines a border style for windows.  state can be either
6603              "Active" or "Inactive".  If state is omitted, then the style is
6604              set for both states.  If the style and flags are enclosed in
6605              parentheses, then multiple state definitions can be specified
6606              per line.
6607
6608              style is a subset of the available button styles, and can only
6609              be TiledPixmap (uniform pixmaps which match the bevel colors
6610              work best this way) or Colorset.  If a '!' is prefixed to any
6611              flag, the behavior is negated.  If style is not specified, then
6612              one can change flags without resetting the style.
6613
6614              The HiddenHandles flag hides the corner handle dividing lines on
6615              windows with handles (this option has no effect for !Handles
6616              windows).  By default, HiddenHandles is disabled.
6617
6618              The NoInset flag supplements HiddenHandles.  If given, the inner
6619              bevel around the window frame is not drawn.  If HiddenHandles is
6620              not specified, the frame looks a little strange.
6621
6622              Raised causes a raised relief pattern to be drawn (default).
6623              Sunk causes a sunken relief pattern to be drawn.  Flat inhibits
6624              the relief pattern from being drawn.
6625
6626              To decorate the active and inactive window borders with a
6627              textured pixmap, one might specify:
6628
6629                  BorderStyle Active TiledPixmap marble.xpm
6630                  BorderStyle Inactive TiledPixmap granite.xpm
6631                  BorderStyle Active -- HiddenHandles NoInset
6632
6633              To clear the style for both states:
6634
6635                  BorderStyle Simple
6636
6637              To clear for a single state:
6638
6639                  BorderStyle Active Simple
6640
6641              To unset a flag for a given state:
6642
6643                  BorderStyle Inactive -- !NoInset
6644
6645              title-bar buttons can inherit the border style with the
6646              UseBorderStyle flag (see ButtonStyle).
6647
6648       ButtonState [ActiveDown bool] [Inactive bool] [InactiveDown bool]
6649              The ButtonState command controls which states of the window
6650              titles and title buttons are used.  The default is to use all
6651              four states: "ActiveUp", "ActiveDown", "InactiveUp" and
6652              "InactiveDown" (see ButtonStyle and TitleStyle commands).  The
6653              bool argument after the key word controls if the designated
6654              state is used ("True") or not ("False").  The bool flag is the
6655              same as other commands, and not limited to just "True" or
6656              "False"; "Yes" and "No" may also be used.  The "ActiveUp" state
6657              cannot be deactivated.  If no arguments are provided or the
6658              given arguments are illegal, the default is restored.
6659
6660              If ActiveDown argument is "False", no different button style for
6661              the pressed down buttons used, instead "ActiveUp" state is used
6662              even when button is pressed.
6663
6664              If Inactive argument is "False", focused and unfocused windows
6665              look similarly, the corresponding "Active" states are always
6666              used.
6667
6668              If InactiveDown argument is "False" (only applied when Inactive
6669              is "True"), the pressed titles and title buttons in non-focused
6670              windows are drawn using "InactiveUp" or "ActiveUp" states
6671              depending on the values of the other key words.
6672
6673       ButtonStyle button [state] [style] [-- [!]flag ...]
6674              Sets the button style for a title-bar button.  button is the
6675              title-bar button number between 0 and 9, or one of "All",
6676              "Left", "Right", or "Reset".  Button numbering is described in
6677              the Mouse command section.  If the style and flags are enclosed
6678              in parentheses, then multiple state definitions can be specified
6679              per line.
6680
6681              state refers to which button state should be set.  Button states
6682              are defined as follows: "ActiveUp" and "ActiveDown" refer to the
6683              un-pressed and pressed states for buttons on active windows;
6684              while the "InactiveUp" and "InactiveDown" states denote buttons
6685              on inactive windows.  The shortcut "Active" denotes both
6686              "ActiveUp" and "ActiveDown" states.  Shortcut "Inactive" denotes
6687              both "InactiveUp" and "InactiveDown" states.  The similar state
6688              names like just described, but with the "Toggled" prefix are
6689              used instead for title buttons which have one of the
6690              MwmDecorMax, MwmDecorShade, MwmDecorStick or MwmDecorLayer
6691              hints, if the window is maximized, shaded, sticky or placed on
6692              specific layer, respectively.
6693
6694                  AddToDecor Default
6695                   + ButtonStyle 6                   \
6696                     Vector 4 50x25@1 85x75@0 15x75@0 50x25@1
6697                   + ButtonStyle 6 ToggledActiveUp   \
6698                     Vector 4 50x75@0 85x25@1 15x25@0 50x75@0
6699                   + ButtonStyle 6 ToggledActiveDown \
6700                     Vector 4 50x75@0 85x25@1 15x25@0 50x75@0
6701                   + ButtonStyle 6 ToggledInactive   \
6702                     Vector 4 50x75@0 85x25@1 15x25@0 50x75@0
6703                   + ButtonStyle 6 - MwmDecorShade
6704                  Mouse 0 6 N WindowShade
6705
6706              Additionally, the following shortcuts may be used: "AllNormal",
6707              "AllToggled", "AllActive", "AllInactive", "AllUp", "AllDown".
6708              They are actually different masks for 4 individual states from 8
6709              total.  These are supported too: "AllActiveUp", "AllActiveDown",
6710              "AllInactiveUp", "AllInactiveDown".
6711
6712              If state is specified, that particular button state is set.  If
6713              state is omitted, every state is set.  Specifying a style
6714              destroys the current style (use AddButtonStyle to avoid this).
6715
6716              If style is omitted, then state-dependent flags can be set for
6717              the primary button style without destroying the current style.
6718              Examples (each line should be considered independent):
6719
6720                  ButtonStyle Left -- flat
6721                  ButtonStyle All ActiveUp (-- flat) Inactive (-- flat)
6722
6723              The first line sets every state of the left buttons to flat,
6724              while the second sets only the "ActiveUp" and "Inactive" states
6725              of every button to flat (only flags are changed; the buttons'
6726              individual styles are not changed).
6727
6728              If you want to reset all buttons to their defaults:
6729
6730                  ButtonStyle Reset
6731
6732              To reset the "ActiveUp" button state of button 1 to the default:
6733
6734                  ButtonStyle 1 ActiveUp Default
6735
6736              To reset all button states of button 1 to the default of button
6737              number 2:
6738
6739                  ButtonStyle 1 Default 2
6740
6741              For any button, multiple state definitions can be given on one
6742              line by enclosing the style and flags in parentheses.  If only
6743              one definition per line is given the parentheses can be omitted.
6744
6745              flags affect the specified state.  If a '!'  is prefixed to any
6746              flag, its behavior is negated.  The available state-dependent
6747              flags for all styles are described here (the ButtonStyle entry
6748              deals with state-independent flags).
6749
6750              Raised causes a raised relief pattern to be drawn.
6751
6752              Sunk causes a sunken relief pattern to be drawn.
6753
6754              Flat inhibits the relief pattern from being drawn.
6755
6756              UseTitleStyle causes the given button state to render the
6757              current title style before rendering the buttons' own styles.
6758              The Raised, Flat and Sunk TitleStyle flags are ignored since
6759              they are redundant in this context.
6760
6761              UseBorderStyle causes the button to inherit the decorated
6762              BorderStyle options.
6763
6764              Raised, Sunk and Flat are mutually exclusive, and can be
6765              specified for the initial ButtonStyle only.  UseTitleStyle and
6766              UseBorderStyle are also mutually exclusive (both can be off
6767              however).  The default is Raised with both UseBorderStyle and
6768              UseTitleStyle left unset.
6769
6770              Important
6771              for the "ActiveDown" and "InactiveDown" states:  When a button
6772              is pressed, the relief is inverted.  Because of this, to obtain
6773              the raised look in "ActiveDown" or "InactiveDown" states you
6774              must specify the opposite of the desired relief (i.e.  Sunk for
6775              "ActiveDown" or "InactiveDown").  This behavior is consistent,
6776              but may seem confusing at first.  The same applies to the
6777              "Toggled" states.
6778
6779              Button styles are classified as non-destructive, partially
6780              destructive, or fully destructive.  Non-destructive styles do
6781              not affect the image.  Partially destructive styles can obscure
6782              some or all parts of the underlying image (i.e.  Pixmap).  Fully
6783              destructive styles obscure the entire underlying image (i.e.
6784              Solid or one of the gradient styles).  Thus, if stacking styles
6785              with AddButtonStyle (or AddTitleStyle for title-bars), use care
6786              in sequencing styles to minimize redraw.
6787
6788              The available styles are:
6789
6790              Simple, Default, Solid, Colorset, Vector, ?Gradient, Pixmap,
6791              AdjustedPixmap, ShrunkPixmap, StretchedPixmap, TiledPixmap,
6792              MiniIcon
6793
6794              The description of these styles and their arguments follow:
6795
6796              The Simple style does nothing.  There are no arguments, and this
6797              style is an example of a non-destructive button style.
6798
6799              The Default style conditionally accepts one argument: a number
6800              which specifies the default button number to load.  If the style
6801              command given is ButtonStyle or AddButtonStyle, the argument is
6802              optional (if given, it overrides the current button).  If a
6803              command other than ButtonStyle or AddButtonStyle is used, the
6804              number must be specified.
6805
6806              The Solid style fills the button with a solid color.  The relief
6807              border color is not affected.  The color is specified as a
6808              single argument.  This style is fully destructive.
6809
6810              The Colorset cs [alpha] style fills the button with the Colorset
6811              cs.  The optional alpha argument is a percentage between 0 and
6812              100.  It causes fvwm to merge the colorset background onto the
6813              button using this percentage.  If the percentage is 0 the
6814              colorset background is hidden and if it is 100 the colorset
6815              background is fully applied.  The default is 100.  So, the
6816              destructiveness depends on the alpha argument.
6817
6818              The Vector num X[offsetp]xY[offsetp]@C ...  style draws a line
6819              pattern.  Since this is a standard button style, the keyword
6820              Vector is optional, num is a number of point specifications of
6821              the form X[offsetp]xY[offsetp]@C ...  X and Y are point
6822              coordinates inside the button, given in percents (from 0 to
6823              100).  An optional absolute offset in pixels, can be given as
6824              "+<offset>p" for a positive or "-<offset>p" for a negative
6825              offset.
6826
6827              C specifies a line color (0 - the shadow color, 1 - the
6828              highlight color, 2 - the background color, 3 - the foreground
6829              color, 4 - only move the point, do not draw).  The first point
6830              color is not used.  You can use up to 10000 points in a line
6831              pattern.  This style is partially destructive.
6832
6833              The specification is a little cumbersome:
6834
6835                  ButtonStyle 2 Vector 4 50x30@1 70x70@0 30x70@0 50x30@1
6836
6837              then the button 2 decoration uses a 4-point pattern consisting
6838              of a line from (x=50,y=30) to (70,70) in the shadow color (@0),
6839              and then to (30,70) in the shadow color, and finally to (50,30)
6840              in the highlight color (@1).  Is that too confusing? See the
6841              fvwm web pages for some examples with screenshots.
6842
6843              A more complex example of Vector:
6844
6845                  ButtonStyle 8 Vector 10 45x65@2 45x75@3 \
6846                    20x75@3 20x50@3 35x50@3 35x65@1 35x25@1 \
6847                    75x25@1 75x65@0 35x65@0
6848                  ButtonStyle 0 Vector 10 45x65@2 45x75@0 \
6849                    20x75@0 20x50@1 45x50@1 45x65@0 75x65@3 \
6850                    75x25@3 35x25@3 35x47@3
6851
6852              The ?Gradient styles denote color gradients.  Fill in the
6853              question mark with any one of the defined gradient types.
6854              Please refer to the Color Gradients section for a description of
6855              the gradient syntax.  The gradient styles are fully destructive.
6856
6857              The Pixmap style displays a pixmap.  A pixmap should be
6858              specified as an argument.  For example, the following would give
6859              button number 2 the same pixmap for all 4 states (2 active and 2
6860              inactive), and button number 4 all different pixmaps.
6861
6862                  ButtonStyle 2 Pixmap my_pixmap.xpm
6863                  ButtonStyle 4 \
6864                       ActiveUp (Pixmap activeup.xpm) \
6865                       ActiveDown (Pixmap activedown.xpm) \
6866                       Inactive (Pixmap inactiveup.xpm)
6867                  ButtonStyle 4 \
6868                       InactiveDown Pixmap inactivedown.xpm
6869
6870              The pixmap specification can be given as an absolute or relative
6871              pathname (see ImagePath).  If the pixmap cannot be found, the
6872              button style reverts to Simple.  Flags specific to the Pixmap
6873              style are Left, Right, Top, and Bottom.  These can be used to
6874              justify the pixmap (default is centered for both directions).
6875              Pixmap transparency is used for the color "None." This style is
6876              partially destructive.
6877
6878              The AdjustedPixmap style is similar to the Pixmap style.  But
6879              the image is resized to exactly fit the button.
6880
6881              The ShrunkPixmap style is similar to the Pixmap style.  But if
6882              the image is bigger than the button the image is resized to fit
6883              into the button.
6884
6885              The StretchedPixmap style is similar to the Pixmap style.  But
6886              if the image is smaller than the button the image is resized to
6887              cover the button.
6888
6889              The TiledPixmap style accepts a pixmap to be tiled as the button
6890              background.  One pixmap is specified as an argument.  Pixmap
6891              transparency is not used.  This style is fully destructive.
6892
6893              The MiniIcon style draws the window's miniature icon in the
6894              button, which is specified with the MiniIcon option of the Style
6895              command.  This button style accepts no arguments.  Example:
6896
6897                  Style *     MiniIcon mini-bx2.xpm
6898                  Style xterm MiniIcon mini-term.xpm
6899                  Style Emacs MiniIcon mini-doc.xpm
6900
6901                  ButtonStyle 1 MiniIcon
6902
6903       ButtonStyle button - [!]flag ...
6904              Sets state-independent flags for the specified button.
6905              State-independent flags affect button behavior.  Each flag is
6906              separated by a space.  If a '!'  is prefixed to the flag then
6907              the behavior is negated.  The special flag Clear clears any
6908              existing flags.
6909
6910              The following flags are usually used to tell fvwm which buttons
6911              should be affected by mwm function hints (see MwmFunctions
6912              option of the Style command.  This is not done automatically
6913              since you might have buttons bound to complex functions, for
6914              instance.
6915
6916              MwmDecorMenu should be assigned to title-bar buttons which
6917              display a menu.  The default assignment is the leftmost button.
6918              When a window with the MwmFunctions Style option requests not to
6919              show this button, it is hidden.
6920
6921              MwmDecorMin should be assigned to title-bar buttons which
6922              minimize or iconify the window.  The default assignment is the
6923              second button over from the rightmost button.  When a window
6924              with the MwmFunctions Style option requests not to show this
6925              button, it is hidden.
6926
6927              MwmDecorMax should be assigned to title-bar buttons which
6928              maximize the window.  The default assignment is the rightmost
6929              button.  When a window with the MwmFunctions Style option
6930              requests not to show this button, it is hidden.  When the window
6931              is maximized, the vector pattern on the button looks pressed in.
6932
6933              MwmDecorShade should be assigned to title-bar buttons which
6934              shade the window (see WindowShade command).  When the window is
6935              shaded, the vector pattern on the button looks pressed in.
6936
6937              MwmDecorStick should be assigned to title-bar buttons which make
6938              the window sticky.  When the window is sticky, the vector
6939              pattern on the button looks pressed in.
6940
6941              The flag MwmDecorLayer layer should be assigned to title-bar
6942              buttons which place the window in the layer numbered layer.
6943              When the window is on that specific layer, the vector pattern on
6944              the button looks pressed in.
6945
6946       ChangeDecor decor
6947              This command is deprecated and will be removed in the future.
6948              There are plans to replace it with a more flexible solution in
6949              fvwm-3.0.
6950
6951              Changes the decor of a window to decor.  decor is "Default" or
6952              the name of a decor defined with AddToDecor.  If decor is
6953              invalid, nothing occurs.  If called from somewhere in a window
6954              or its border, then that window is affected.  If called from the
6955              root window the user is allowed to select the target window.
6956              ChangeDecor only affects attributes which can be set using the
6957              AddToDecor command.
6958
6959                  ChangeDecor CustomDecor1
6960
6961       DestroyDecor [recreate] decor
6962              This command is deprecated and will be removed in the future.
6963              There are plans to replace it with a more flexible solution in
6964              fvwm-3.0.
6965
6966              Deletes the decor defined with AddToDecor, so that subsequent
6967              references to it are no longer valid.  Windows using this decor
6968              revert to the "Default" decor.  The optional parameter recreate
6969              tells fvwm not to throw away the decor completely but to throw
6970              away only its contents.  If the decor is created again later,
6971              windows do not use it before the UseDecor style is applied again
6972              unless the decor was destroyed with the recreate option.  The
6973              decor named "Default" cannot be destroyed.
6974
6975                  DestroyDecor CustomDecor1
6976
6977       TitleStyle [justification] [Height [num]] [MinHeight [num]]
6978              Sets attributes for the title-bar.  Justifications can be
6979              Centered, RightJustified or LeftJustified.  Height sets the
6980              title bar's height to an amount in pixels.  MinHeight sets the
6981              minimal height in pixels of the title bar.  Defaults are
6982              Centered, the window's font height and no minimal height.  To
6983              reset the font height to the default value, omit the num
6984              argument after the Height keyword.  The MinHeight height is
6985              reset by Height or if given with no argument.  Example:
6986
6987                  TitleStyle LeftJustified Height 24
6988
6989       TitleStyle [state] [style] [-- [!]flag ...]
6990              Sets the style for the title-bar.  See also AddTitleStyle and
6991              ButtonStyle state can be one of "ActiveUp", "ActiveDown",
6992              "InactiveUp", or "InactiveDown".  Shortcuts like "Active" and
6993              "Inactive" are allowed.  The states with the "Toggled" prefix
6994              are allowed too, the title itself does not use "Toggled" states,
6995              but these states are used for the buttons with ButtonStyle
6996              UseTitleStyle.  If state is omitted, then the style is added to
6997              every state.  If parentheses are placed around the style and
6998              flags, then multiple state definitions can be given per line.
6999              style can be omitted so that flags can be set while not
7000              destroying the current style.
7001
7002              If a '!'  is prefixed to any flag, its behavior is negated.
7003              Valid flags for each state include Raised, Flat and Sunk (these
7004              are mutually exclusive).  The default is Raised.  See the note
7005              in ButtonStyle regarding the "ActiveDown" state.  Examples:
7006
7007                  TitleStyle ActiveUp HGradient 16 navy black
7008                  TitleStyle \
7009                       ActiveDown (Solid red -- flat) \
7010                       Inactive (TiledPixmap wood.xpm)
7011                  TitleStyle \
7012                       ActiveUp (-- Flat) \
7013                       ActiveDown (-- Raised) \
7014                       InactiveUp (-- Flat) \
7015                       InactiveDown (-- Sunk)
7016
7017              This sets the "ActiveUp" state to a horizontal gradient, the
7018              "ActiveDown" state to solid red, and the "Inactive" states to a
7019              tiled wood pixmap.  Finally, "ActiveUp" and "InactiveUp" are set
7020              to look flat, while "ActiveDown" set to be sunk (the Raised flag
7021              for the "ActiveDown" state causes it to appear sunk due to
7022              relief inversion), and "InactiveDown" is set to look raised.  An
7023              example which sets flags for all states:
7024
7025                  TitleStyle -- flat
7026
7027              For a flattened look:
7028
7029                  TitleStyle -- flat
7030                  ButtonStyle All Active (-- flat) Inactive (-- flat)
7031
7032              TitleStyle accepts all the ButtonStyle styles and arguments:
7033
7034              Simple, Default, Solid, Colorset, Vector, ?Gradient, Pixmap,
7035              AdjustedPixmap, ShrunkPixmap, StretchedPixmap, TiledPixmap,
7036              MiniIcon.
7037
7038              See the ButtonStyle command for a description of all these
7039              styles and their arguments.
7040
7041              In addition to these styles TitleStyle accepts a powerful
7042              MultiPixmap option.  This allows you to specify different
7043              pixmaps, colorsets or colors for different parts of the
7044              titlebar.  Some of them are tiled or stretched to fit a
7045              particular space; others are discrete "transition" images.  The
7046              definable sections are:
7047
7048              Main
7049                  The full titlebar
7050
7051              LeftMain
7052                  Left of title text
7053
7054              RightMain
7055                  Right of title text
7056
7057              UnderText
7058                  Underneath title text
7059
7060              LeftOfText
7061                  just to the left of the title text
7062
7063              RightOfText
7064                  just to the right of the title text
7065
7066              LeftEnd
7067                  at the far left end of the titlebar (just after left buttons
7068                  if any)
7069
7070              RightEnd
7071                  at the far right end of the titlebar (just before right
7072                  buttons if any)
7073
7074              Buttons
7075                  under buttons in case of UseTitleStyle
7076
7077              LeftButtons
7078                  under left buttons in case of UseTitleStyle
7079
7080              RightButtons
7081                  under right buttons in case of UseTitleStyle
7082
7083              None of these are mandatory except for Main (or, if you do not
7084              define Main you must define both LeftMain and RightMain).  If no
7085              Buttons pixmaps are defined and UseTitleStyle is specified for
7086              one or more buttons, Main, LeftMain or RightMain are used as
7087              appropriate.
7088
7089              The syntax for this style type is:
7090
7091                  MultiPixmap section style arg, ...
7092
7093              continuing for whatever you want to define.  The style can be
7094              either TiledPixmap, AdjustedPixmap, Colorset or Solid.  See the
7095              ButtonStyle command for the description of these styles.  In the
7096              case of a transition section, LeftEnd, LeftOfText, RightOfText
7097              or RightEnd, AdjustedPixmap only resize the pixmap in the "y"
7098              direction.  For the Colorset and Solid styles a width of the
7099              half of the title bar height is assumed for the transition
7100              sections.
7101
7102              An example:
7103
7104                  MultiPixmap Main AdjustedPixmap foo.xpm, \
7105                              UnderText TiledPixmap bar.xpm, \
7106                              Buttons Colorset 2
7107
7108              Note that the old syntax is still supported: if the style is
7109              omitted, TiledPixmap is assumed and adding "(stretched)" between
7110              the section and the file name implies AdjustedPixmap.
7111
7112       UpdateDecor [decor]
7113              This command is deprecated and will be removed in the future.
7114              There are plans to replace it with a more flexible solution in
7115              fvwm-3.0.
7116
7117              This command is kept mainly for backward compatibility.  Since
7118              all elements of a decor are updated immediately when they are
7119              changed, this command is mostly useless.
7120
7121              Updates window decorations.  decor is an optional argument which
7122              specifies the decor to update.  If given, only windows which are
7123              assigned to that particular decor are updated.  This command is
7124              useful, for instance, after a ButtonStyle, TitleStyle or
7125              BorderStyle (possibly used in conjunction with AddToDecor).
7126              Specifying an invalid decor results in all windows being
7127              updated.  This command is less disturbing than Recapture, but
7128              does not affect window style options as Recapture does.
7129
7130   Controlling the Virtual Desktop
7131       Desk arg1 [arg2] [min max]
7132              This command has been renamed.  Please see GotoDesk command.
7133
7134       DesktopName desk name
7135              Defines the name of the desktop number desk to name.  This name
7136              is used in the WindowList command and in the FvwmPager where it
7137              override the Label configuration option.  Moreover, if
7138              consecutive names starting from desktop 0 are defined, then
7139              these names can be used by any EWMH compliant application (as a
7140              pager).
7141
7142       DesktopSize HorizontalxVertical
7143              Defines the virtual desktop size in units of the physical screen
7144              size.
7145
7146       EdgeResistance delayEdgeResistance scrolling moving
7147       [xinerama-scrolling]
7148              Tells how hard it should be to change the desktop viewport by
7149              moving the mouse over the edge of the screen.  The parameter
7150              tells how many milliseconds the pointer must spend on the screen
7151              edge before fvwm moves the viewport.  This is intended for
7152              people who use
7153
7154                  EdgeScroll 100 100
7155
7156              but find themselves accidentally flipping pages when they do not
7157              want to.  If -1 is given as the delay, scrolling is disabled
7158              completely.
7159
7160              The second form of invocation with two or three arguments is
7161              obsolete and should be replaced with the following three
7162              commands as needed:
7163
7164                  EdgeResistance scrolling
7165                  Style * EdgeMoveDelay scrolling
7166                  Style * EdgeMoveResistance moving
7167                  or
7168                  Style * EdgeMoveResistance moving xinerama-scrolling
7169
7170              Fvwm does this substitution automatically and prints a warning.
7171
7172       EdgeScroll horizontal[p] vertical[p] [wrap | wrapx | wrapy]
7173              Specifies the percentage of a page to scroll when the cursor
7174              hits the edge of a page.  A trailing 'p' changes the
7175              interpretation to mean pixels.  If you do not want any paging or
7176              scrolling when you hit the edge of a page include
7177
7178                  EdgeScroll 0 0
7179
7180              in your config file, or possibly better, set the EdgeThickness
7181              to zero.  See the EdgeThickness command.  If you want whole
7182              pages, use
7183
7184                  EdgeScroll 100 100
7185
7186              Both horizontal and vertical should be positive numbers.
7187
7188              If the horizontal and vertical percentages are multiplied by
7189              1000 or one of the keywords wrap, wrapx and wrapy is given then
7190              scrolling wraps around at the edge of the desktop.  If
7191
7192                  EdgeScroll 100000 100000
7193
7194              is used fvwm scrolls by whole pages, wrapping around at the edge
7195              of the desktop.
7196
7197       EdgeThickness 0 | 1 | 2
7198              This is the width or height of the invisible window that fvwm
7199              creates on the edges of the screen that are used for the edge
7200              scrolling feature.
7201
7202              In order to enable page scrolling via the mouse, four windows
7203              called the "pan frames" are placed at the very edge of the
7204              screen.  This is how fvwm detects the mouse's presence at the
7205              window edge.  Because of the way this works, they need to be at
7206              the top of the stack and eat mouse events, so if you have any
7207              kind of error along the lines of: "mouse clicks at the edge of
7208              the screen do the wrong thing" you're having trouble with the
7209              pan frames and (assuming you do not use the mouse to flip
7210              between pages) should set the EdgeThickness to 0.
7211
7212              A value of 0 completely disables mouse edge scrolling, even
7213              while dragging a window.  1 gives the smallest pan frames, which
7214              seem to work best except on some servers.
7215
7216              2 is the default.
7217
7218              Pan frames of 1 or 2 pixels can sometimes be confusing, for
7219              example, if you drag a window over the edge of the screen, so
7220              that it straddles a pan frame, clicks on the window, near the
7221              edge of the screen are treated as clicks on the root window.
7222
7223       EwmhBaseStruts left right top bottom
7224              Where left, right, top and bottom are positive or null integers
7225              which define bands at the edge of the screen.  left defines a
7226              band on the left of your screen of width left, right defines a
7227              band on the right of your screen of width right, top defines a
7228              band on the top of your screen of height top and bottom defines
7229              a band on the bottom of your screen of height bottom.  The unit
7230              is the pixel and the default is 0 0 0 0.  These areas define
7231              additional reserved space to the reserved space defined by some
7232              ewmh compliant applications.  This is used to compute the
7233              Working Area.  See the Extended Window Manager Hints section for
7234              a definition of the Working Area.
7235
7236       EwmhNumberOfDesktops num [max]
7237              This command is useful only for an ewmh compliant pager or
7238              taskbar (as kpager or kicker taskbar) and not for fvwm modules (
7239              FvwmPager or FvwmIconMan).  It causes a compliant application to
7240              consider at least num desktops (desktop 0 to desktop num-1).
7241              The optional argument max causes a compliant application to
7242              never consider more than max desktops.  If max is 0 (the
7243              default) there is no limitation.  The actual number of desktops
7244              is determined dynamically.  It is at least num, but it can be d
7245              if there is a window on desktop d-1 (or if the current desktop
7246              is desktop d-1) and d is less or equal to max or max is null.
7247              Moreover, a compliant pager can ask to change num itself.  This
7248              is accepted by fvwm only if this number is less than or equal to
7249              max or if max is null.  Note that negative desktops are not
7250              supported by the ewmh specification.  The default is 4 0.
7251
7252       GotoDesk [prev | arg1 [arg2] [min max]]
7253              Switches the current viewport to another desktop (workspace,
7254              room).
7255
7256              The command takes 1, 2, 3, or 4 arguments.  A single argument is
7257              interpreted as a relative desk number.  Two arguments are
7258              understood as a relative and an absolute desk number.  Three
7259              arguments specify a relative desk and the minimum and maximum of
7260              the allowable range.  Four arguments specify the relative,
7261              absolute, minimum and maximum values.  (Desktop numbers can be
7262              negative).  If a literal prev is given as the single argument,
7263              the last visited desk number is used.
7264
7265              If arg1 is non zero then the next desktop number is the current
7266              desktop number plus arg1.
7267
7268              If arg1 is zero then the new desktop number is arg2.  (If arg2
7269              is not present, then the command has no effect.)
7270
7271              If min and max are given, the new desktop number is no smaller
7272              than min and no bigger than max.  Values out of this range are
7273              truncated (if you gave an absolute desk number) or wrapped
7274              around (if you gave a relative desk number).
7275
7276              The syntax is the same as for MoveToDesk, which moves a window
7277              to a different desktop.
7278
7279              The number of active desktops is determined dynamically.  Only
7280              desktops which contain windows or are currently being displayed
7281              are active.  Desktop numbers must be between 2147483647 and
7282              -2147483648 (is that enough?).
7283
7284       GotoDeskAndPage prev | desk xpage ypage
7285              Switches the current viewport to another desktop and page,
7286              similar to the GotoDesk and GotoPage commands.  The new desk is
7287              desk and the new page is (xpage,ypage).
7288
7289       GotoPage prev | [options] x[p] y[p]
7290              Moves the desktop viewport to page (x,y).  The upper left page
7291              is (0,0), the upper right is (M,0), where M is one less than the
7292              current number of horizontal pages specified in the DesktopSize
7293              command.  The lower left page is (0,N), and the lower right page
7294              is (M,N), where N is the desktop's vertical size as specified in
7295              the DesktopSize command.  To switch to a page relative to the
7296              current one add a trailing 'p' after any or both numerical
7297              arguments.
7298
7299              Possible options are wrapx and wrapy to wrap around the x or y
7300              coordinate when the viewport is moved beyond the border of the
7301              desktop.
7302
7303              To go to the last visited page use prev as the first argument.
7304              The GotoPage function should not be used in a pop-up menu.
7305
7306              Examples:
7307
7308                  # Go to page (2,3)
7309                  GotoPage 2 3
7310
7311                  # Go to lowest and rightmost page
7312                  GotoPage -1 -1
7313
7314                  # Go to last page visited
7315                  GotoPage prev
7316
7317                  # Go two pages to the right and one page up
7318                  GotoPage +2p -1p
7319
7320       Scroll [horizonal[p] vertical[p] | reverse]
7321              Scrolls the virtual desktop's viewport by horizontal pages in
7322              the x-direction and vertical pages in the y-direction or starts
7323              interactive scrolling of the viewport.  Either or both entries
7324              may be negative.  Both horizontal and vertical values are
7325              expressed in percent of pages, so
7326
7327                  Scroll 100 100
7328
7329              means to scroll down and right by one full page.
7330
7331                  Scroll 50 25
7332
7333              means to scroll right half a page and down a quarter of a page.
7334              The Scroll function should not be called from pop-up menus.
7335              Normally, scrolling stops at the edge of the desktop.
7336
7337              If the horizontal and vertical percentages are 100 or more and
7338              are multiplied by 1000 then scrolling wraps around at the edge
7339              of the desktop.  If
7340
7341                  Scroll 100000 0
7342
7343              is executed over and over fvwm moves to the next desktop page on
7344              each execution and wraps around at the edge of the desktop, so
7345              that every page is hit in turn.
7346
7347              If the letter 'p' is appended to each coordinate (horizontal
7348              and/or vertical), then the scroll amount is measured in pixels.
7349
7350              Without arguments or if the option reverse is given interactive
7351              scrolling takes place.  The viewport scrolls as the mouse is
7352              moved.  With the reverse option scrolling is done in opposite
7353              direction of the mouse movement, and without it scrolling in the
7354              same direction as the mouse.
7355
7356              The binding
7357
7358                  Mouse 1 A CM Scroll reverse
7359
7360              gives an effect of grabbing and dragging the viewport with
7361              button 1 if Control and Meta is pressed.
7362
7363       Xinerama [bool]
7364              Enables Xinerama support if the boolean argument is true and
7365              disables it if the argument is false.  Calling this command
7366              without arguments turns on Xinerama support if it was disabled
7367              before and turns it off if it was enabled.  For example:
7368
7369                  # Turn Xinerama support on, use primary screen 2
7370                  XineramaPrimaryScreen 2
7371                  Xinerama on
7372                  # Turn it off again
7373                  Xinerama off
7374
7375       XineramaPrimaryScreen [primary-screen]
7376              Takes an integer number or 'g' or 'c' as its argument.  A number
7377              is taken as the number of the Xinerama screen that is to be used
7378              as the primary screen.  The primary screen can be used as the
7379              preferred screen to place windows with
7380
7381                  XineramaPrimaryScreen <screen number>
7382                  Style * StartsOnScreen p
7383
7384              The primary screen is used in some of the modules and for the
7385              default icon box too.  Any number that is zero or more is taken
7386              as the primary screen's number.  Instead, the letter 'c'
7387              indicates to use the current screen (containing the pointer)
7388              whenever the primary screen is used.  This may be very confusing
7389              under some circumstances.  With 'g', the global screen is used
7390              as the primary screen, effectively disabling the primary screen.
7391              Calling this function with any other argument (including none)
7392              resets the primary screen to 0.
7393
7394       XineramaSls [bool]
7395              For multi-screen implementations other than Xinerama, such as
7396              Single Logical Screen, it is possible to simulate a Xinerama
7397              configuration if the total screen seen by fvwm is made up of
7398              equal sized monitors in a rectangular grid.  The XineramaSls
7399              command turns SLS support on or off or toggles it to the
7400              opposite state, depending on if the boolean argument is "True",
7401              "False" or "toggle".  If no argument is given, this is treated
7402              like "toggle".  The default layout uses one by one screens.  To
7403              configure the layout, use the XineramaSlsSize or
7404              XineramaSlsScreens command.
7405
7406       XineramaSlsSize Horizontal Vertical
7407              This command configures the layout of the Single Logical screen
7408              feature.  It takes two arguments, Horizontal and Vertical which
7409              must be an integer value dividing evenly into the total desktop
7410              width, and height.  For an example with two monitors side by
7411              side which appear as one screen through the X-Server with the
7412              right screen as the primary screen, use:
7413
7414                  XineramaSlsSize 2x1
7415                  XineramaSls On
7416                  XineramaPrimaryScreen 1
7417                  Xinerama On
7418
7419       XineramaSlsScreens number-of-screens [screen-spec ...]
7420              This command configures the layout of the Single Logical screen
7421              feature.  Its first argument is the number of screens to use.
7422              It must be followed by exactly this number of screen-spec
7423              arguments.  Each of these can be written either in standard X
7424              geometry format: "<width>x<height>+<x>+<y>" or as a space
7425              separated list of numbers: "x y width height".  Both ways of
7426              describing screens can be mixed in a single command.  All four
7427              numbers must be supplied.  The x and y values specify the origin
7428              of the screen in relation to the global screen's origin while
7429              width and height specify the size of the screen in pixels.  No
7430              checks are done if the geometries make sense, so it is possible
7431              to define overlapping screens (with random results) or screens
7432              that are not visible at all.
7433
7434                  XineramaSlsScreens 3 \
7435                    512x768+0+0 512x300+512+0 512 300 512 468
7436                  XineramaSls On
7437                  XineramaPrimaryScreen 1
7438                  Xinerama On
7439
7440   User Functions and Shell Commands
7441       AddToFunc [name [I | J | M | C | H | D action]]
7442              Begins or adds to a function definition.  Here is an example:
7443
7444                  AddToFunc Move-or-Raise I Raise
7445                   + M Move
7446                   + D Lower
7447
7448              The function name is "Move-or-Raise", and it could be invoked
7449              from a menu or a mouse binding or key binding:
7450
7451                  Mouse 1 TS A Move-or-Raise
7452
7453              The name must not contain embedded whitespace.  No guarantees
7454              are made whether function names with embedded whitespace work or
7455              not.  This behavior may also change in the future without
7456              further notice.  The letter before the action tells what kind of
7457              action triggers the command which follows it.  'I' stands for
7458              "Immediate", and is executed as soon as the function is invoked.
7459              'J' is similar to "Immediate" but is delayed until a button is
7460              pressed or released or the pointer is moved, or the function
7461              completes.  It is always executed before the other function
7462              actions.  'M' stands for "Motion", i.e. if the user starts
7463              moving the mouse.  'C' stands for "Click", i.e., if the user
7464              presses and releases the mouse button.  'H' stands for "Hold",
7465              i.e. if the user presses a mouse button and holds it down for
7466              more than ClickTime milliseconds.  'D' stands for
7467              "Double-click".  The action 'I' causes an action to be performed
7468              on the button-press, if the function is invoked with prior
7469              knowledge of which window to act on.
7470
7471              There is a number of predefined symbols that are replaced by
7472              certain values if they appear on the command line.  Please refer
7473              to the Command Expansion section for details.
7474
7475              Warning
7476              Please read the comments on executing complex functions in the
7477              section Scripting and Complex Functions.
7478
7479              Examples:
7480
7481              If you call
7482
7483                  Key F10 R A Function MailFunction xmh "-font fixed"
7484
7485              and "MailFunction" is
7486
7487                  AddToFunc MailFunction
7488                   + I Next ($0) Iconify off
7489                   + I Next (AcceptsFocus, $0) Focus
7490                   + I None ($0) Exec exec $0 $1
7491
7492              Then the last line of the function becomes
7493
7494                   + I None (xmh) Exec exec xmh -font fixed
7495
7496              The expansion is performed as the function is executed, so you
7497              can use the same function with all sorts of different arguments.
7498              You could use
7499
7500                  Key F11 R A Function MailFunction zmail "-bg pink"
7501
7502              in the same config, if you wanted.  An example of using
7503              "$[w.id]" is:
7504
7505                  AddToFunc PrintFunction
7506                   + I Raise
7507                   + I Exec xdpr -id $[w.id]
7508
7509              Note that "$$" is expanded to '$'.
7510
7511              Another example: bind right mouse button within the window
7512              button number 6 (this is a minimize button for the win95 theme)
7513              to iconify all windows of the same resource:
7514
7515                  AddToFunc FuncIconifySameResource "I" All ($0) Iconify on
7516                  Mouse 3 6 A FuncIconifySameResource $[w.resource]
7517
7518       Beep
7519              As might be expected, this makes the terminal beep.
7520
7521       DestroyFunc function
7522              Deletes a function, so that subsequent references to it are no
7523              longer valid.  You can use this to change the contents of a
7524              function during a fvwm session.  The function can be rebuilt
7525              using AddToFunc.
7526
7527                  DestroyFunc PrintFunction
7528
7529       Echo string
7530              Prints a message to stderr.  Potentially useful for debugging
7531              things in your config.
7532
7533                  Echo Beginning style definitions...
7534
7535       EchoFuncDefinition function
7536              The EchoFuncDefinition is similar to the Echo command but prints
7537              the definition for the given function to stderr.  It is useful
7538              to find out how fvwm handles quoting and for debugging functions
7539
7540       Exec command
7541              Executes command.  You should not use an ampersand '&' at the
7542              end of the command.  You probably want to use an additional
7543              "exec" at the beginning of command.  Without that, the shell
7544              that fvwm invokes to run your command stays until the command
7545              exits.  In effect, you'll have twice as many processes running
7546              as you need.  Note that some shells are smart enough to avoid
7547              this, but it never hurts to include the "exec" anyway.
7548
7549              The following example binds function key F1 in the root window,
7550              with no modifiers, to the exec function.  The program rxvt is
7551              started with an assortment of options.
7552
7553                  Key F1 R N Exec exec rxvt -fg yellow -bg blue \
7554                    -e /bin/tcsh
7555
7556              Note that this function doesn't wait for command to complete, so
7557              things like:
7558
7559                  Exec "echo AddToMenu ... > /tmp/file"
7560                  Read /tmp/file
7561
7562              do not work reliably (see the PipeRead command).
7563
7564       ExecUseShell [shell]
7565              Makes the Exec command use the specified shell, or the value of
7566              the $SHELL environment variable if no shell is specified,
7567              instead of the default Bourne shell (/bin/sh).
7568
7569                  ExecUseShell
7570                  ExecUseShell /usr/local/bin/tcsh
7571
7572       Function FunctionName
7573              Used to bind a previously defined function to a key or mouse
7574              button.  The following example binds mouse button 1 to a
7575              function called "Move-or-Raise", whose definition was provided
7576              as an example earlier in this man page.  After performing this
7577              binding fvwm executes the "move-or-raise" function whenever
7578              button 1 is pressed in a window's title-bar.
7579
7580                  Mouse 1 T A Function Move-or-Raise
7581
7582              The keyword Function may be omitted if FunctionName does not
7583              coincide with an fvwm command.
7584
7585              Warning: Please read the comments on executing complex functions
7586              in the section Scripting and Complex Functions.
7587
7588       InfoStoreAdd key value
7589              Stores the value at the given key.  This is useful to store
7590              generic information used in the lifetime of an fvwm config file.
7591              For example storing program preferences for opening video files.
7592
7593              The purpose of this command is to store internal information to
7594              fvwm which can be used bu fvwm functions, or when opening
7595              programs of a certain type.  Previous to this command the only
7596              way to do this was via SetEnv but this is discouraged because it
7597              places such information in the environment, which pollutes it
7598              and makes the information global to other processes started by
7599              fvwm which may then modify them which might not be what's
7600              wanted.  Hence the point of InfoStoreAdd is to still allow for
7601              such information to be stored, but kept internal to fvwm.
7602
7603              In this way, one can build up as many key/value pairs as needed.
7604              Recalling the value of a given key happens through fvwm's usual
7605              expansion mechanism.  See the Command Expansion section for more
7606              details.  For example:
7607
7608
7609                      InfoStoreAdd teddybearprog xteddy
7610
7611                      # Echo the value of teddybearprog
7612                      Echo $[infostore.teddybearprog]
7613
7614              Removing an entry from the InfoStore is done with the
7615              InfoStoreRemove command.
7616
7617       InfoStoreRemove key
7618              Removes an entry at the given key from the InfoStore.  Example:
7619
7620
7621                  InfoStoreRemove teddybearprog
7622
7623       Nop
7624              Does nothing.  This is used to insert a blank line or separator
7625              in a menu.  If the menu item specification is
7626
7627                  AddToMenu MyMenu " " Nop
7628
7629              then a blank line is inserted.  If it looks like
7630
7631                  + "" Nop
7632
7633              then a separator line is inserted.  Can also be used as the
7634              double-click action for Menu or Popup.
7635
7636       PipeRead command [quiet]
7637              Causes fvwm to read commands from the output of the command.
7638              This command is executed by /bin/sh as if you typed it on the
7639              command line.  If the command consists of more than one word it
7640              must be quoted.  Useful for building up dynamic menu entries
7641              based on a directories contents, for example.  If the keyword
7642              Quiet follows the command no message is produced if the command
7643              is not found.
7644
7645              Example:
7646
7647                  AddToMenu HomeDirMenu
7648                  PipeRead 'for i in $HOME/*; \
7649                    do echo "+ $i Exec xterm -e vi $i"; done'
7650
7651              Note: The PipeRead changes the pointer to a watch cursor by
7652              default during execution.  However, some commands, for example
7653              xwd, need to take control of the pointer themselves and do not
7654              work.  To disable the watch cursor, use the command prior to
7655              PipeRead
7656
7657                  BusyCursor Read off
7658
7659              The PipeRead command executes synchronously.  If you want to
7660              Exec something, but need the command to run synchronously, you
7661              might do something like:
7662
7663                  PipeRead 'command 1>&2'
7664
7665              The redirection causes any output from the program to go to
7666              stderr instead of being read as a sequence of commands by fvwm.
7667              PipeRead returns 1 if the given command could be executed or -1
7668              if not (see the section Conditional Commands for the meaning of
7669              return codes).
7670
7671       Read filename [quiet]
7672              Causes fvwm to read commands from the file named filename.  If
7673              the keyword Quiet follows the command no message is produced if
7674              the file is not found.  If the file name does not begin with a
7675              slash ('/'), fvwm looks in the user's data directory, then the
7676              system data directory.  The user's data directory is by default
7677              $HOME/.fvwm.  It can be overridden by exporting FVWM_USERDIR set
7678              to any other directory.  The Read command returns 1 if the given
7679              file could be read or -1 if not (see the section Conditional
7680              Commands for the meaning of return codes).
7681
7682       SetEnv variable value
7683              Set an environment variable to a new value, similar to the
7684              shell's export or setenv command.  The variable and its value
7685              are inherited by processes started directly by fvwm.  This can
7686              be especially useful in conjunction with the FvwmM4 module.  For
7687              example:
7688
7689                  SetEnv height HEIGHT
7690
7691              makes the FvwmM4 set variable HEIGHT usable by processes started
7692              by fvwm as the environment variable $height.  If value includes
7693              whitespace, you should enclose it in quotes.  If no value is
7694              given, the variable is deleted.
7695
7696       Silent command
7697              A number of commands require a window to operate on.  If no
7698              window was selected when such a function is invoked the user is
7699              asked to select a window.  Sometimes this behavior is unwanted,
7700              for example if the function was called by a module and the
7701              window that was selected at first does not exist anymore.  You
7702              can prevent this by putting Silent in front of the fvwm command.
7703              If a function that needs a window is called with Silent without
7704              a window selected, it simply returns without doing anything.  If
7705              Silent is used on a user defined function it affects all
7706              function and sub function calls until the original function
7707              exits.
7708
7709              Another usage of Silent is with binding commands Key, PointerKey
7710              and Mouse, this disables error messages.
7711
7712              Silent also disables the error message for non-existent
7713              commands.  Note: This command is treated as a prefix to its
7714              command.  Expansion of the command line is done as if Silent was
7715              not there.
7716
7717              Examples:
7718
7719                  Silent Move 0 0
7720                  Silent User_defined_function
7721                  # do not complain on keyboards without "Help" key
7722                  Silent Key Help R A Popup HelpMenu
7723
7724       UnsetEnv [variable]
7725              Unset an environment variable, similar to shell's export or
7726              unsetenv command.  The variable then is removed from the
7727              environment array inherited by processes started directly by
7728              fvwm.
7729
7730       Wait window
7731              This command is intended to be used in fvwm functions only.  It
7732              causes execution of a function to pause until a new window
7733              matching window appears.  This can be a window's name, class, or
7734              resource string.  It may contain the wildcards '*' and '?',
7735              which are matched in the usual Unix filename manner.  This is
7736              particularly useful in the "InitFunction" if you are trying to
7737              start windows on specific desktops:
7738
7739                  AddToFunc InitFunction
7740                   + I Exec exec xterm -geometry 80x64+0+0
7741                   + I Wait xterm
7742                   + I GotoDesk 0 2
7743                   + I Exec exec xmh -font fixed -geometry \
7744                         507x750+0+0
7745                   + I Wait xmh
7746                   + I GotoDesk 0 0
7747
7748              The above function starts an xterm on the current desk, waits
7749              for it to map itself, then switches to desk 2 and starts an xmh.
7750              After the xmh window appears control moves to desk 0.
7751
7752              Fvwm remains partially functional during a wait, but any input
7753              from the modules is queued up and processed only after the
7754              window appears or the command is aborted.  For example, windows
7755              can not be focused with FvwmIconMan or FvwmPager during a wait.
7756
7757              You can escape from a Wait pause by pressing Ctrl-Alt-Escape
7758              (where Alt is the first modifier).  To redefine this key
7759              sequence see the EscapeFunc command.
7760
7761   Conditional Commands
7762       Conditional commands are commands that are only executed if certain
7763       conditions are met.  Most conditional commands work on windows, like
7764       Next, ThisWindow or All.  There is one conditional command, Test, that
7765       works on global conditions unrelated to windows.  The syntax of the
7766       conditions is described below.  For readability, the list of conditions
7767       is located at the end of this section.
7768
7769       Return Codes
7770              All commands in this section (unless specifically stated for the
7771              command) also have a return code that can be 1 (if the condition
7772              was met) or 0 (if the condition was not met).  Some commands may
7773              return -1 which means that an error occurred and the return code
7774              is useless.  The Break command returns -2.  Additionally, the
7775              return codes of commands run in a complex functions are passed
7776              to the invoking complex function.  The return code is used by
7777              the TestRc command.  Please refer to the commands' description
7778              for examples.  The return code can also be accessed through the
7779              variable $[cond.rc].  Non conditional commands do not modify the
7780              return code of the last conditional command.  Important note:
7781              return codes are only defined inside functions created with the
7782              AddToFunc command and are not inherited by sub functions.  To
7783              run a command without altering the return code, the KeepRc
7784              command can be used.
7785
7786       The Ring of Windows
7787              Fvwm stores windows in a ring internally.  Think of the focused
7788              window as a cursor on the current position in the ring.  The
7789              Next command and many other commands search forwards through the
7790              ring for a matching window, and Prev searches backwards.  The
7791              windows in the ring are either ordered by creation time (if the
7792              !FPSortWindowlistByFocus, NeverFocus or MouseFocus styles are
7793              used) or by the last time they had the focus.
7794
7795       List of Conditional Commands
7796              All [options] [(conditions)] command
7797                     Execute command on all windows meeting the conditions.
7798                     It returns 1 if any window matches the condition and 0
7799                     otherwise.  The execution starts at the top of the window
7800                     ring and continues towards the bottom.  The options can
7801                     be any combination of Reverse and UseStack.  If the
7802                     option Reverse is given the execution order is reversed.
7803                     The option UseStack makes All use the stacking order
7804                     instead of the window ring when walking through windows.
7805                     See the Conditions section for a list of conditions.
7806
7807                     This command implies the conditions CirculateHit,
7808                     CirculateHitIcon and CirculateHitShaded.  They can be
7809                     turned off by specifying !CirculateHit etc.  explicitly.
7810
7811              Any [(conditions)] command
7812                     Performs command if any window which satisfies all
7813                     conditions exists.  The command is run in the context of
7814                     the root window.  See the Conditions section for a list
7815                     of conditions.
7816
7817              Break [levels]
7818                     If the break command is used in a function, function
7819                     execution is terminated immediately.  Further commands of
7820                     the function are not processed.  Normally, all nested
7821                     invocations of complex functions are left.  An optional
7822                     integer number levels may be given to break out of the
7823                     given number of nested functions and continue execution
7824                     of a higher level function.  The Break command always has
7825                     the return code -2.  Example:
7826
7827                         AddToFunc PickWindowRaiseAndDeiconify
7828                         + I Pick
7829                         + I TestRc (Error) Break
7830                         + I Raise
7831                         + I Iconify off
7832
7833              Current [(conditions)] command
7834                     Performs command on the currently focused window if it
7835                     satisfies all conditions.  See the Conditions section for
7836                     a list of conditions.
7837
7838                     This command implies the conditions CirculateHit,
7839                     CirculateHitIcon and CirculateHitShaded.  They can be
7840                     turned off by specifying !CirculateHit etc.  explicitly.
7841
7842              Direction [FromPointer] direction [(conditions)] command
7843                     Performs command (typically Focus) on a window in the
7844                     given direction which satisfies all conditions.
7845                     Normally, the center of the currently focused window or
7846                     the context window in which the command was invoked is
7847                     taken as the starting point.  Lacking such a window, or
7848                     when the FromPointer option is given, the current
7849                     position of the pointer is taken as the starting point.
7850                     The direction may be one of "North", "Northeast", "East",
7851                     "Southeast", "South", "Southwest", "West", "Northwest"
7852                     and "Center".  Which window Direction selects depends on
7853                     angle and distance between the center points of the
7854                     windows.  Closer windows are considered a better match
7855                     than those farther away.  The Center direction simply
7856                     selects the window closest to the starting point.
7857                     Returns -1 if an invalid direction was given.  See the
7858                     Conditions section for a list of conditions.
7859
7860              KeepRc command
7861                     Runs the command but does not alter the return code of
7862                     the previous command.  Note: KeepRc is treated as a
7863                     prefix to its command.  Expansion of the command line is
7864                     done as if KeepRc was not there.
7865
7866              Next [(conditions)] command
7867                     Performs command (typically Focus) on the next window
7868                     which satisfies all conditions.  If the command is
7869                     running in a window context, it starts looking for a
7870                     matching window from there.  Otherwise it starts at the
7871                     focused window.  See Conditions section for a list of
7872                     conditions.
7873
7874              None [(conditions)] command
7875                     Performs command if no window which satisfies all
7876                     conditions exists.  The command is run in the context of
7877                     the root window.  Returns 1 if no window matches the
7878                     conditions and 0 otherwise.  See Conditions section for a
7879                     list of conditions.
7880
7881                     This command implies the conditions CirculateHit,
7882                     CirculateHitIcon and CirculateHitShaded.  They can be
7883                     turned off by specifying !CirculateHit etc.  explicitly.
7884
7885              NoWindow command
7886                     Performs command, but removes the window context if any.
7887                     This is not really a conditional command, but a prefix
7888                     that may be useful in menu items that should operate
7889                     without a window even if such menu is bound to window
7890                     decorations.
7891
7892              Pick [(conditions)] command
7893                     Pick works like Function if invoked in the context of a
7894                     window.  If invoked in the root window, it first asks the
7895                     user to pick a window and then executes the command in
7896                     the context of that window.  This avoids annoying
7897                     multiple selections with complex functions.  The command
7898                     is executed only if the given conditions are met.
7899                     Returns -1 if no window was selected.  See Conditions
7900                     section for a list of conditions.
7901
7902                     This command implies the conditions CirculateHit,
7903                     CirculateHitIcon and CirculateHitShaded.  They can be
7904                     turned off by specifying !CirculateHit etc.  explicitly.
7905
7906              PointerWindow [(conditions)] command
7907                     Performs command if the window under the pointer
7908                     satisfies all conditions.  Returns -1 if there is no
7909                     window under the pointer.  See Conditions section for a
7910                     list of conditions.
7911
7912                     This command implies the conditions CirculateHit,
7913                     CirculateHitIcon and CirculateHitShaded.  They can be
7914                     turned off by specifying !CirculateHit etc.  explicitly.
7915
7916              Prev [(conditions)] command
7917                     Performs command (typically Focus) on the previous window
7918                     which satisfies all conditions.  If the command is
7919                     running in a window context, it starts looking for a
7920                     matching window from there.  Otherwise it starts at the
7921                     focused window.  See Conditions section for a list of
7922                     conditions.
7923
7924              ScanForWindow [FromPointer] dir1 dir2 [(conditions)] command
7925                     Performs command (typically Focus) on a window in the
7926                     given direction which satisfies all conditions.
7927                     Normally, the center of the currently focused window or
7928                     the context window in which the command was invoked is
7929                     taken as the starting point.  Lacking such a window, or
7930                     when the FromPointer option is given, the current
7931                     position of the pointer is taken as the starting point.
7932                     The direction dir1 may be one of "North", "NorthEast",
7933                     "East", "SouthEast", "South", "SouthWest", "West", and
7934                     "NorthWest".  Which window ScanForWindow selects depends
7935                     first on the position along the primary axis given by
7936                     dir1.  If any windows have the exact same coordinate
7937                     along the primary axis, the secondary direction is used
7938                     to order the windows.  The direction dir2 may be one of
7939                     the same set of values as dir1.  If dir2 is not perfectly
7940                     perpendicular to dir1, ScanForWindow returns a failure.
7941                     When using ScanForWindow repeatedly with the same
7942                     arguments, it is guaranteed that all windows matching the
7943                     conditions will eventually be found.  If the focus
7944                     reaches a limit along the primary axis, it will wrap
7945                     around to the opposite side.  Returns -1 if an invalid
7946                     direction was given.  See Conditions section for a list
7947                     of conditions.
7948
7949              Test [(test-conditions)] command
7950                     Performs command if all test-conditions are satisfied.
7951                     The test-conditions are keywords with possible arguments
7952                     from the list below and are separated by commas or
7953                     whitespace.  They include: Version operator x.y.z,
7954                     EnvIsSet varname, EnvMatch varname pattern,
7955                     EdgeHasPointer direction, EdgeIsActive direction, Start,
7956                     Init, Restart, Exit, Quit, ToRestart, True, False, F, R,
7957                     W, X and I.  A test-condition prefixed with "!" is
7958                     negated.
7959
7960                     The Version operator x.y.z test-condition is fulfilled if
7961                     the logical condition of the expression is true.  Valid
7962                     operator values are: >=, >, <=, <, == and !=.
7963
7964                     Example:
7965
7966                         Test (Version >= 2.5.11) Echo 2.5.11 or later.
7967
7968                     The EnvIsSet varname test-condition is true if the given
7969                     environment variable is set.  The EnvMatch varname
7970                     pattern test-condition is true if pattern matches the
7971                     given environment or infostore variable value.  (See
7972                     InfoStoreAdd).  The pattern may contain special "*" and
7973                     "?" chars.  The "varname" is coded without the leading
7974                     dollar sign ($).
7975
7976                     The EdgeHasPointer [direction] test-condition is true if
7977                     the edge in the given direction currently contains the
7978                     pointer.  The EdgeIsActive [direction] test-condition is
7979                     true if the edge in the given direction currently is
7980                     active.  An edge is active, and can contain a pointer if
7981                     either a command is bound to it or edge scroll is
7982                     available in that direction.  The direction may be one of
7983                      Any, North, Top, Up, West, Left, South, Bottom,
7984                      Down, Right and  East.  If no direction is specified Any
7985                     is assumed.
7986
7987                     The Start test-condition is the same as either Init or
7988                     Restart.  It is only true on startup or restart prior and
7989                     during StartFunction execution.  The Exit test-condition
7990                     is the same as either Quit or ToRestart.  It is only
7991                     valid on shutdown during ExitFunction function execution.
7992
7993                     The True and False test-conditions are unconditionally
7994                     true and false.
7995
7996                     Additionally, if a test-condition name is not recognized,
7997                     the Error return code is set and the command is not
7998                     executed.
7999
8000                     The F file, R file, W file, X file and I file
8001                     test-conditions test for existence of the given [F]ile
8002                     (possibly with [R]ead/[W]rite permissions), e[X]ecutable
8003                     (in $PATH), or the [I]mage (in ImagePath).
8004
8005                     Example:
8006
8007                         AddToFunc StartFunction I Test (Init) Exec exec xterm
8008
8009                         AddToFunc VerifyVersion
8010                         + I Test (Version 2.5.*) Echo 2.5.x detected
8011                         + I TestRc (NoMatch) \
8012                              Test (!Version 2.6.*) Echo Future version
8013                         + I TestRc (NoMatch) \
8014                              Echo 2.6.x is detected
8015
8016                         Test (F $[FVWM_USERDIR]/local-config) Read local-config
8017                         Test (X xterm-utf16) Exec exec xterm-utf16
8018
8019              TestRc [([!]returncode)] command
8020                     Performs command if the last conditional command returned
8021                     the value returncode.  Instead of the numeric values 0
8022                     (no match), 1 (match), -1 (error), and -2 (break) the
8023                     symbolic names "NoMatch", "Match", "Error" and "Break"
8024                     can be used.  If no returncode is given, the default 0 is
8025                     assumed.  If the return code is prefixed with '!', the
8026                     command is executed if returncode does not match the
8027                     value returned by the conditional command.  The TestRc
8028                     command can only be used inside functions.  If the
8029                     command is another conditional command, the previous
8030                     return code is replaced by the new one.  Example:
8031
8032                         AddToFunc ToggleXterm
8033                         + I All (my_xtermwindow) Close
8034                         + I TestRc (NoMatch) Exec xterm -T my_xtermwindow
8035
8036              ThisWindow [(conditions)] command
8037                     ThisWindow executes the specified command in the context
8038                     of the current operand window.  If there is no operand
8039                     window (it is invoked in the root window), the command is
8040                     ignored.  ThisWindow is never interactive.  The command
8041                     is executed only if the given conditions are met.  It
8042                     returns -1 if used outside a window context.  See
8043                     Conditions section for a list of conditions.
8044
8045                     This command implies the conditions CirculateHit,
8046                     CirculateHitIcon and CirculateHitShaded.  They can be
8047                     turned off by specifying "!CirculateHit" etc.
8048                     explicitly.
8049
8050              WindowId [id] [(conditions)] | [root [screen]] command
8051                     The WindowId command looks for a specific window id and
8052                     runs the specified command on it.  The second form of
8053                     syntax retrieves the window id of the root window of the
8054                     given screen.  If no screen is given, the current screen
8055                     is assumed.  The window indicated by id may belong to a
8056                     window not managed by fvwm or even a window on a
8057                     different screen.  Although most commands can not operate
8058                     on such windows, there are some exceptions, for example
8059                     the WarpToWindow command.  Returns -1 if no window with
8060                     the given id exists.  See Conditions section for a list
8061                     of conditions.
8062
8063                     This command implies the conditions CirculateHit,
8064                     CirculateHitIcon and CirculateHitShaded.  They can be
8065                     turned off by specifying !CirculateHit etc.  explicitly.
8066
8067                     Examples:
8068
8069                         WindowId 0x34567890 Raise
8070                         WindowId root 1 WarpToWindow 50 50
8071                         WindowId $0 (Silly_Popup) Delete
8072
8073                     In the past this command was mostly useful for functions
8074                     used with the WindowList command, or for selective
8075                     processing of FvwmEvent calls (as in the last example),
8076                     but currently these handler functions are called within a
8077                     window context, so this command is not really needed in
8078                     these cases.  Still it may be useful if, for example, the
8079                     window id should be stored in the environment variable
8080                     for a further proceeding.
8081
8082                         Pick SetEnv BOOKMARKED_WINDOW $[w.id]
8083                         WindowId $[BOOKMARKED_WINDOW] WarpToWindow
8084
8085       Conditions
8086              The conditions that may be given as an argument to any
8087              conditional command are a list of keywords separated by commas,
8088              enclosed in parentheses.  Unless stated otherwise, conditional
8089              commands accept all the conditions listed below.  Note that
8090              earlier versions of fvwm required the conditions to be separated
8091              by whitespace instead of commas and enclosed in brackets instead
8092              of parentheses (this is still supported for backward
8093              compatibility).
8094
8095              In addition, the conditions may include one or more window names
8096              to match to.  If more than one window name is given, all of them
8097              must match.  The window name, icon name, class, and resource are
8098              considered when attempting to find a match.  Each name may
8099              include the wildcards '*' and '?', and may consist of two or
8100              more alternatives, separated by the character '|', which acts as
8101              an OR operator.  (If OR operators are used, they must not be
8102              separated by spaces from the names.) Each window name can begin
8103              with '!', which prevents command if any of the window name, icon
8104              name, class or resource match.  However, '!' must not be applied
8105              to individual names in a group separated by OR operators; it may
8106              only be applied to the beginning of the group, and then it
8107              operates on the whole group.
8108
8109              Examples:
8110
8111                  Next ("Netscape|konqueror|Mozilla*") WarpToWindow 99 90
8112
8113              This goes to the next web browser window, no matter which of the
8114              three named web browsers is being used.
8115
8116                  Next ("Mozilla*", "Bookmark*") WarpToWindow 99 90
8117
8118              This goes to Mozilla's bookmark manager window, ignoring other
8119              Mozilla windows and other browsers' bookmark windows.
8120
8121                  All ("XTerm|rxvt", !console) Iconify
8122
8123              This iconifies all the xterm and rxvt windows on the current
8124              page, except that the one named "console" (with the -name option
8125              to xterm) is excluded.
8126
8127                  Next (!"FvwmPager|FvwmForm*|FvwmButtons") Raise
8128                  Next (!FvwmPager, !FvwmForm*, !FvwmButtons) Raise
8129
8130              These two commands are equivalent; either one raises the next
8131              window which is not one of the named fvwm modules.
8132
8133              Any condition can be negated by using a an exclamation mark
8134              ('!')  directly in front of its name.
8135
8136              AcceptsFocus, AnyScreen, CirculateHit, CirculateHitIcon,
8137              CirculateHitShaded, Closable, CurrentDesk, CurrentGlobalPage,
8138              CurrentGlobalPageAnyDesk, CurrentPage, CurrentPageAnyDesk,
8139              CurrentScreen, Desk, FixedPosition, FixedSize, Focused,
8140              HasHandles, HasPointer, Iconic, Iconifiable, Layer [n],
8141              Maximizable, Maximized, Overlapped, PlacedByButton n,
8142              PlacedByButton3, PlacedByFvwm, Raised, Shaded, State n, Sticky,
8143              StickyAcrossDesks, StickyAcrossPages, StickyIcon,
8144              StickyAcrossDesksIcon, StickyAcrossPagesIcon, Transient,
8145              Visible.
8146
8147              The AcceptsFocus condition excludes all windows that do not want
8148              the input focus (the application has set the "Input hints" for
8149              the window to False) and do not use the Lenience option of the
8150              Style command.  Also, all windows using the NeverFocus style are
8151              ignored.  Note: !Lenience is equivalent to the deprecated option
8152              NoLenience.
8153
8154              With the AnyScreen condition used together with any of the
8155              Current...  conditions, windows that do not intersect the
8156              Xinerama screen containing the mouse pointer are considered for
8157              a match too.  For example:
8158
8159                  # Focus next window on current page,
8160                  # regardless of Xinerama screen
8161                  Next (CurrentPage, AnyScreen) Focus
8162
8163              The CirculateHit and CirculateHitIcon options override the
8164              CirculateSkip and CirculateSkipIcon Style attributes for normal
8165              or iconic windows.  The CirculateHitShaded option overrides the
8166              CirculateSkipShaded Style.  All three options are turned on by
8167              default for the Current command.  They can be turned off by
8168              specifying !CirculateHit etc.  explicitly.  Note: Do not confuse
8169              these conditions with the style options of the same name.
8170              Specifically,
8171
8172                  Style foo CirculateSkip
8173                  Next (foo, CirculateHit) ...
8174
8175              is not the same as
8176
8177                  Style foo CirculateHit ...
8178                  Next (foo)
8179
8180              The prior selects windows with the name foo only in the Next
8181              command.  In the second example, these windows are always
8182              matched in all conditional commands.
8183
8184              The Closable condition matches only windows that are allowed to
8185              be closed.
8186
8187              The CurrentDesk condition matches only windows that are on the
8188              current desk.
8189
8190              The CurrentGlobalPage condition matches only windows that are on
8191              the current page of the current desk, regardless of whether
8192              Xinerama support is enabled or not.  This condition implicitly
8193              activates the CurrentDesk condition.
8194
8195              The CurrentGlobalPageAnyDesk condition matches only windows that
8196              are on the current page of any desk, regardless of whether
8197              Xinerama support is enabled or not.
8198
8199              The CurrentPage condition matches only windows that are on the
8200              current page of the current desk.  If Xinerama support is
8201              enabled, it only matches windows that are at least partially on
8202              the Xinerama screen containing the mouse pointer.  This
8203              condition implicitly activates the CurrentDesk condition.
8204
8205              The CurrentPageAnyDesk and CurrentScreen conditions matches only
8206              windows that are on the current page of any desk.  If Xinerama
8207              support is enabled, they only match windows that are at least
8208              partially on the Xinerama screen containing the mouse pointer.
8209
8210              The Screen [n] condition matches only windows which are on the
8211              specified Xinerama screen.
8212
8213              The Desk [n] condition matches only windows which are on the
8214              specified desk.
8215
8216              The FixedPosition condition excludes all windows that do not
8217              have a fixed position, either set through WM hints or the Style
8218              option FixedPosition.  Example:
8219
8220                  DestroyFunc ToggleFixedGeometry
8221                  AddToFunc   ToggleFixedGeometry
8222                  + I Pick (FixedPosition) \
8223                       WindowStyle VariablePosition, VariableSize
8224                  + I TestRc (NoMatch) WindowStyle FixedPosition, FixedSize
8225
8226              The FixedSize condition excludes all windows that do not have a
8227              fixed size, either set through WM hints or the Style option
8228              FixedSize.
8229
8230              The Focused matches on the window that currently has the
8231              keyboard focus.  This is not useful for the Current command but
8232              can be used with the other conditional commands.
8233
8234              The HasHandles condition excludes all windows that do not have
8235              resize handles.
8236
8237              The HasPointer condition excludes all windows that do not
8238              contain the pointer.
8239
8240              The Iconic condition matches only iconic windows.
8241
8242              The Iconifiable condition matches only windows that are allowed
8243              to be iconified.
8244
8245              The Layer [n] condition matches only windows on the specified
8246              layer.  The optional argument of the Layer condition defaults to
8247              the layer of the focused window.  The negation !Layer switches
8248              off the Layer condition.
8249
8250              The Maximizable condition matches only windows that are allowed
8251              to be maximized.
8252
8253              The Maximized condition matches only maximized windows.
8254
8255              The Fullscreen condition matches only fullscreen windows.
8256
8257              The Overlapped condition matches only windows that are
8258              overlapped by other windows on the same layer (or unmanaged
8259              windows if the option RaiseOverUnmanaged of the BugOpts command
8260              is used).  Note that this condition can be slow if you have many
8261              windows or if RaiseOverUnmanaged is used and the connection to
8262              the X server is slow.
8263
8264              The PlacedByButton n condition is fulfilled if the last
8265              interactive motion of the window (with the Move command or as
8266              ManualPlacement) was ended by pressing mouse button n.  Example:
8267
8268                  Mouse   1 T     A       Function MoveWindow
8269
8270                  DestroyFunc MoveWindow
8271                  AddToFunc MoveWindow
8272                  + C Move
8273                  + C ThisWindow (PlacedByButton 5) WindowShade off
8274                  + C TestRc (Match) Maximize on 0 100
8275                  + C ThisWindow (PlacedByButton 4) WindowShade on
8276
8277              The PlacedByButton3 condition has the same meaning as
8278              PlacedByButton 3.  It remains only for backward compatibility.
8279
8280              The PlacedByFvwm condition excludes all windows that have been
8281              placed manually or by using the user or program position hint.
8282
8283              The Raised conditions matches only windows that are fully
8284              visible on the current viewport and not overlapped by any other
8285              window.
8286
8287              The Shaded conditions matches only shaded windows (see
8288              WindowShade command).
8289
8290              The State n or !State n conditions match only windows with the
8291              specified integer state set (or unset).  See the State command
8292              for details.  The argument may range from 0 to 31.
8293
8294              The Sticky, StickyAcrossDesks and StickyAcrossPages match only
8295              windows that are currently sticky, sticky across all desks or
8296              sticky across all pages.  Please refer to the Style options with
8297              the same name and the commands Stick, StickAcrossDesks and
8298              StickAcrossPages for details.
8299
8300              The StickyIcon, StickyAcrossDesksIcon and StickyAcrossPagesIcon
8301              match only windows that become sticky, sticky across all desks
8302              or sticky across all pages when they are in iconified state.
8303
8304              The Transient condition matches only windows that have the
8305              "transient" property set by the application.  This it usually
8306              the case for application popup menus and dialogs.  The FvwmIdent
8307              module can be used to find out whether a specific window is
8308              transient.
8309
8310              The Visible condition matches only windows that are at least
8311              partially visible on the current viewport and not completely
8312              overlapped by other windows.
8313
8314   Module Commands
8315       Fvwm maintains a database of module configuration lines in a form
8316
8317           *<ModuleName>: <Config-Resource>
8318
8319       where <ModuleName> is either a real module name or an alias.
8320
8321       This database is initially filled from config file (or from output of
8322       -cmd config command), and can be later modified either by user (via
8323       FvwmCommand) or by modules.
8324
8325       When modules are run, they read appropriate portion of database.  (The
8326       concept of this database is similar to one used in X resource
8327       database).
8328
8329       Commands for manipulating module configuration database are described
8330       below.
8331
8332       * module_config_line
8333              Defines a module configuration.  module_config_line consists of
8334              a module name (or a module alias) and a module resource line.
8335              The new syntax allows a delimiter, a colon and optional spaces,
8336              between the module name and the rest of the line, this is
8337              recommended to avoid conflicts.
8338
8339                  *FvwmPager: WindowBorderWidth 1
8340                  *FvwmButtons-TopRight: Geometry 100x100-0+0
8341                  *FvwmButtons-Bottom: Geometry +0-0
8342
8343       DestroyModuleConfig module_config
8344              Deletes module configuration entries, so that new configuration
8345              lines may be entered instead.  This also sometimes the only way
8346              to turn back some module settings, previously defined.  This
8347              changes the way a module runs during a fvwm session without
8348              restarting.  Wildcards can be used for portions of the name as
8349              well.
8350
8351              The new non-conflicting syntax allows a delimiter, a colon and
8352              optional spaces between the module name and the rest of the
8353              line.  In this case a module name (or alias) can't have
8354              wildcards.
8355
8356                  DestroyModuleConfig FvwmButtons*
8357                  DestroyModuleConfig FvwmForm: Fore
8358                  DestroyModuleConfig FvwmIconMan: Tips*
8359
8360       KillModule modulename [modulealias]
8361              Causes the module which was invoked with name modulename to be
8362              killed.  The name may include wildcards.  If modulealias is
8363              given, only modules started with the given alias are killed.
8364
8365                  # kill all pagers
8366                  KillModule FvwmPager
8367
8368                  Module FvwmEvent SoundEvent
8369                  KillModule FvwmEvent SoundEvent
8370
8371       Module modulename [moduleparams]
8372              Specifies a module with its optional parameters which should be
8373              spawned.  Currently several modules, including FvwmButtons,
8374              FvwmEvent, FvwmForm, FvwmPager, FvwmScript support aliases.
8375              Aliases are useful if more than one instance of the module
8376              should be spawned.  Aliases may be configured separately using *
8377              syntax.  To start a module FvwmForm using an alias MyForm, the
8378              following syntax may be used:
8379
8380                  Module FvwmForm MyForm
8381
8382              At the current time the available modules (included with fvwm)
8383              are FvwmAnimate (produces animation effects when a window is
8384              iconified or de-iconified), FvwmAuto (an auto raise module),
8385              FvwmBacker (to change the background when you change desktops),
8386              FvwmBanner (to display a spiffy XBM, XPM, PNG or SVG),
8387              FvwmButtons (brings up a customizable tool bar), FvwmCommandS (a
8388              command server to use with shell's FvwmCommand client),
8389              FvwmConsole (to execute fvwm commands directly), FvwmCpp (to
8390              preprocess your config with cpp), FvwmEvent (trigger various
8391              actions by events), FvwmForm (to bring up dialogs), FvwmIconMan
8392              (a flexible icon manager), FvwmIdent (to get window info),
8393              FvwmM4 (to preprocess your config with m4), FvwmPager (a mini
8394              version of the desktop), FvwmPerl (a Perl manipulator and
8395              preprocessor), FvwmProxy (to locate and control obscured windows
8396              by using small proxy windows), FvwmRearrange (to rearrange
8397              windows), FvwmScript (another powerful dialog toolkit), These
8398              modules have their own man pages.  There may be other modules
8399              out on there as well.
8400
8401              Modules can be short lived transient programs or, like
8402              FvwmButtons , can remain for the duration of the X session.
8403              Modules are terminated by the window manager prior to restarts
8404              and quits, if possible.  See the introductory section on
8405              modules.  The keyword Module may be omitted if modulename is
8406              distinct from all fvwm commands.
8407
8408       ModuleListenOnly modulename [moduleparams]
8409              This command works like the Module command, but fvwm never sends
8410              any messages to the module.  This may be handy to write a module
8411              as a shell script that is triggered by external events without
8412              the burden to answer packets sent by fvwm.  For example, a
8413              module written as a shell script may change labels of the
8414              FvwmButtons module to implement a simple clock.
8415
8416       ModulePath path
8417              Specifies a colon separated list of directories in which to
8418              search for modules.  To find a module, fvwm searches each
8419              directory in turn and uses the first file found.  Directory
8420              names on the list do not need trailing slashes.
8421
8422              The ModulePath may contain environment variables such as $HOME
8423              (or ${HOME}).  Further, a '+' in the path is expanded to the
8424              previous value of the path, allowing easy appending or
8425              prepending to the path.
8426
8427              For example:
8428
8429                  ModulePath ${HOME}/lib/fvwm/modules:+
8430
8431              The directory containing the standard modules is available via
8432              the environment variable $FVWM_MODULEDIR.
8433
8434       ModuleSynchronous [Expect string] [Timeout secs] modulename
8435              The ModuleSynchronous command is very similar to Module.  Fvwm
8436              stops processing any commands and user input until the module
8437              sends a string beginning with "NOP FINISHED STARTUP" back to
8438              fvwm.  If the optional Timeout is given fvwm gives up if the
8439              module sent no input back to fvwm for secs seconds.  If the
8440              Expect option is given, fvwm waits for the given string instead.
8441              ModuleSynchronous should only be used during fvwm startup to
8442              enforce the order in which modules are started.  This command is
8443              intended for use with the (currently hypothetical) module that
8444              should be in place before other modules are started.
8445
8446              Warning: It is quite easy to hang fvwm with this command, even
8447              if a timeout is given.  Be extra careful choosing the string to
8448              wait for.  Although all modules in the fvwm distribution send
8449              back the "NOP FINISHED STARTUP" string once they have properly
8450              started up, this may not be the case for third party modules.
8451              Moreover, you can try to escape from a locked ModuleSynchronous
8452              command by using the key sequence Ctrl-Alt-Escape (see the
8453              EscapeFunc).
8454
8455       ModuleTimeout timeout
8456              Specifies how many seconds fvwm waits for a module to respond.
8457              If the module does not respond within the time limit then fvwm
8458              kills it.  timeout must be greater than zero, or it is reset to
8459              the default value of 30 seconds.
8460
8461       SendToModule modulename string
8462              Sends an arbitrary string (no quotes required) to all modules,
8463              whose alias or name matching modulename, which may contain
8464              wildcards.  This only makes sense if the module is set up to
8465              understand and deal with these strings though.  Can be used for
8466              module to module communication, or implementation of more
8467              complex commands in modules.
8468
8469   Session Management Commands
8470       Quit
8471              Exits fvwm, generally causing X to exit too.
8472
8473       QuitScreen
8474              Causes fvwm to stop managing the screen on which the command was
8475              issued.
8476
8477       Restart [window_manager [params]]
8478              Causes fvwm to restart itself if window_manager is left blank,
8479              or to switch to an alternate window manager (or other fvwm
8480              version) if window_manager is specified.  If the window manager
8481              is not in your default search path, then you should use the full
8482              path name for window_manager.
8483
8484              This command should not have a trailing ampersand.  The command
8485              can have optional parameters with simple shell-like syntax.  You
8486              can use ~ (is expanded to the user's home directory) and
8487              environmental variables $VAR or ${VAR}.  Here are several
8488              examples:
8489
8490                  Key F1 R N Restart
8491                  Key F1 R N Restart fvwm -s
8492                  Key F1 R N Restart ~/bin/fvwm -f $HOME/.fvwm/main
8493                  Key F1 R N Restart fvwm1 -s -f .fvwmrc
8494                  Key F1 R N Restart xterm -n '"X console"' \
8495                    -T \"X\ console\" -e fvwm1 -s
8496
8497              If you need a native restart, we suggest only to use Restart
8498              command without parameters unless there is a reason not to.  If
8499              you still use an old command 'Restart fvwm2' that was correct in
8500              2.2.x, all current command line arguments are lost.  On a
8501              restart without parameters or with --pass-args, they are
8502              preserved.  Here are some cases when 'Restart fvwm2' or 'Restart
8503              fvwm' cause troubles:
8504
8505                  * running fvwm under a session manager
8506                  * running fvwm with multi headed displays
8507                  * having command line arguments, like
8508                    -f themes-rc or -cmd
8509                  * if the first fvwm2 in the $PATH is a
8510                    different one
8511
8512              This is why we are issuing a warning on an old usage.  If you
8513              really want to restart to fvwm with no additional arguments, you
8514              may get rid of this warning by using "Restart fvwm -s" or
8515              "Restart /full/path/fvwm".
8516
8517              Note, currently with multi headed displays, restart of fvwms on
8518              different screens works independently.
8519
8520       Restart --pass-args window_manager
8521              The same as Restart without parameters but the name for the
8522              current window manager is replaced with the specified
8523              window_manager and original arguments are preserved.
8524
8525              This command is useful if you use initial arguments like
8526
8527                  -cmd FvwmCpp
8528
8529              and want to switch to another fvwm version without losing the
8530              initial arguments.
8531
8532       Restart --dont-preserve-state [other-params]
8533              The same as
8534
8535                  Restart [other-params]
8536
8537              but it does not save any window states over the restart.
8538
8539              Without this option, Restart preserves most per-window state by
8540              writing it to a file named .fs-restart-$HOSTDISPLAY in the
8541              user's home directory.
8542
8543       SaveSession
8544              Causes a session manager (if any) to save the session.  This
8545              command does not work for xsm, it seems that xsm does not
8546              implement this functionality.  Use Unix signals to manage xsm
8547              remotely.
8548
8549       SaveQuitSession
8550              Causes a session manager (if any) to save and then shutdown the
8551              session.  This command does not work for xsm, it seems that xsm
8552              does not implement this functionality.  Use Unix signals to
8553              manage xsm remotely.
8554
8555   Colorsets
8556       Colorsets are a powerful method to control colors.  Colorsets create
8557       appearance resources that are shared by fvwm and its modules.  When a
8558       colorset is modified all parts of fvwm react to that change.  A
8559       colorset includes a foreground color, background color, shadow and
8560       highlight color (often based on the background color), background face
8561       (this includes images and all kinds of gradients).  There is a way to
8562       render background face and specify other color operations.
8563
8564       In the 2.4.x versions a special module FvwmTheme was introduced to
8565       manage colorsets.  Starting with the 2.5.x beta version, the FvwmTheme
8566       functionality was moved to the core fvwm, so this module became
8567       obsolete.  In 2.6.7 the FvwmTheme module was removed.
8568
8569       The old syntax:
8570
8571           DestroyModuleConfig FvwmTheme: *
8572           *FvwmTheme: Colorset 0 fg black, bg rgb:b4/aa/94
8573           *FvwmTheme: Colorset 1 fg black, bg rgb:a1/b2/c8
8574
8575       corresponds to the new syntax:
8576
8577           CleanupColorsets
8578           Colorset 0 fg black, bg rgb:b4/aa/94
8579           Colorset 1 fg black, bg rgb:a1/b2/c8
8580
8581
8582       Colorset num [options]
8583              Creates or modifies colorset num.  Colorsets are identified by
8584              this number.  The number can start at zero and can be a very
8585              large number.
8586
8587              Warning: The highest colorset number used determines memory
8588              consumption.  Thus, if you define 'Colorset 100000', the memory
8589              for 100001 colorsets is used.  Keep your colorset numbers as
8590              small as possible.
8591
8592              By convention, colorsets are numbered like this:
8593
8594                  # 0 = Default colors
8595                  # 1 = Inactive windows
8596                  # 2 = Active windows
8597                  # 3 = Inactive menu entry and menu background
8598                  # 4 = Active menu entry
8599                  # 5 = greyed out menu entry (only bg used)
8600                  # 6 = module foreground and background
8601                  # 7 = hilight colors
8602
8603              If you need to have more colors and do not want to reinvent the
8604              wheel, you may use the convention used in fvwm-themes, it
8605              defines the meaning of the first 40 colorsets for nearly all
8606              purposes:
8607
8608              http://fvwm-themes.sourceforge.net/doc/colorsets
8609
8610              Each colorset has four colors, an optional pixmap and an
8611              optional shape mask.  The four colors are used by modules as the
8612              foreground, background, highlight and shadow colors.  When a
8613              colorset is created it defaults to a foreground of black and
8614              background of gray.  The background and foreground are marked as
8615              "average" and "contrast" (see later) so that just specifying a
8616              pixmap or gradient gives sensible results.
8617
8618              options is a comma separated list containing some of the
8619              keywords: fg, Fore, Foreground, bg, Back, Background, hi,
8620              Hilite, Hilight, sh, Shade, Shadow, fgsh, Pixmap, TiledPixmap,
8621              AspectPixmap, Transparent, RootTransparent, Shape, TiledShape,
8622              AspectShape, NoShape, ?Gradient, Tint, fgTint, bgTint, Alpha,
8623              fgAlpha, Dither, NoDither, IconTint, IconAlpha, Plain.
8624
8625              fg, Fore and Foreground take a color name as an argument and set
8626              the foreground color.  The special name Contrast may be used to
8627              select a color that contrasts well with the background color.
8628              To reset the foreground color to the default value you can
8629              simply omit the color name.
8630
8631              bg, Back and Background take a color name as an argument and set
8632              the background color.  It also sets the highlight and shadow
8633              colors to values that give a 3d effect unless these have been
8634              explicitly set with the options below.  The special name Average
8635              may be used to select a color that is the average color of the
8636              pixmap.  If the pixmap is tinted with the Tint option, the tint
8637              is not taken in account in the computation of the average color.
8638              You should use the bgTint option to get the "real" average
8639              color.  The background color is reset to the default value if
8640              the color name is omitted.
8641
8642              hi, Hilite and Hilight take a color name as an argument and set
8643              the highlight color.  If the highlight color is not explicitly
8644              set, the default is to calculate it from the background color.
8645              To switch back to the default behavior the color name can be
8646              omitted.
8647
8648              sh, Shade and Shadow take a color name as an argument and set
8649              the shadow color.  If the shadow color is not explicitly set,
8650              the default is to calculate it from the background color.  To
8651              switch back to the default behavior the color name can be
8652              omitted.
8653
8654              fgsh takes a color name as an argument and sets the color used
8655              by the shadowing font effect.  See the Font Shadow Effects
8656              section of the fvwm man page.  By default this color is computed
8657              from the foreground and background colors.  To switch back to
8658              the default the color name can be omitted.
8659
8660              Pixmap, TiledPixmap and AspectPixmap take a file name as an
8661              argument, search the ImagePath and use it as the background
8662              pixmap.  Any transparent parts are filled with the background
8663              color.  Not specifying a file name removes any existing image
8664              from the colorset.  TiledPixmap produces repeated copies of the
8665              image with no scaling, Pixmap causes the image to be stretched
8666              to fit whatever object the colorset is applied to and
8667              AspectPixmap stretches to fit but retains the image aspect
8668              ratio.
8669
8670              Transparent creates a transparent background pixmap.  The pixmap
8671              is used as a window background to achieve root transparency.
8672              For this you should use the ParentalRelativity option to the
8673              Style command.  A subsequent root background change may be
8674              detected or not, this depends on the program used to set the
8675              background.  If you use fvwm-root, xsetbg (xli), FvwmBacker with
8676              solid or colorset colors or a recent version of Esetroot (>=
8677              9.2) a background change is detected.  If background changes are
8678              not detected (e.g., if you use xv or xsetroot) you can force
8679              detection by using the -d option of fvwm-root:
8680
8681                  xv -root -quit mybg.png; fvwm-root -d
8682
8683              Due to the way X implements transparency no guarantees can be
8684              made that the desired effect can be achieved.  The application
8685              may even crash.  If you experience any problems with this
8686              option, do not use it.
8687
8688              Using outline move and resize (see the OpaqueMoveSize command
8689              and the ResizeOpaque Style option) as well as setting the
8690              WindowShadeShrinks style may help.  The transparency achieved
8691              with Transparent depends on whether the colorset is applied to
8692              the foreground or the background of a window.  In the second
8693              case the transparency is relative to the parent window of the
8694              window on which the colorset is defined.  For example:
8695
8696                  Colorset 12 VGradient 200 grey30 grey60
8697                  Colorset 17 Transparent
8698                  *FvwmIconMan: Colorset 12
8699                  *FvwmIconMan: PlainColorset 17
8700
8701              gives an IconMan with a vertical grey gradient background and
8702              the buttons use the background (by transparency).  To obtain a
8703              (root) transparent IconMan:
8704
8705                  Colorset 12 Transparent
8706                  Colorset 17 Transparent
8707                  Colorset 18 Transparent
8708                  Colorset 19 Transparent
8709
8710                  *FvwmIconMan: Colorset 12
8711                  *FvwmIconMan: PlainColorset 17
8712                  *FvwmIconMan: FocusColorset 18
8713                  *FvwmIconMan: IconColorset  19
8714
8715              The Colorset IconMan option defines the IconMan window
8716              background, but the PlainColorset and the FocusColorset are
8717              drawn on the foreground.  So, the transparency of the IconMan
8718              buttons is achieved by drawing nothing.  Now if this IconMan is
8719              swallowed in an FvwmButtons as:
8720
8721                  FvwmButtons:(Colorset 10, Swallow "FvwmIconMan" 'FvwmIconMan')
8722
8723              then, FvwmIconMan becomes a child of FvwmButtons and it is
8724              transparent relative to FvwmButtons.  So, in this case
8725              FvwmIconMan uses Colorset 10 as background.  If you want root
8726              transparency use the RootTransparent option.  FvwmButtons
8727              FvwmIconMan, and FvwmIdent, are relatively simple.  There is one
8728              main colorset option which defines the background of the window
8729              and the other colorsets (if any) are drawn on the foreground.
8730              The case of FvwmProxy is simpler, the two colorsets refer to the
8731              window backgrounds.  FvwmPager is more complicated as almost
8732              everything in the pager are windows with some parental relations
8733              (the mini windows are the child and the desktops are the parents
8734              and all this is complicated by the hilighted page).  So, the
8735              colorsets apply to the background of these windows.  You should
8736              experiment.  For FvwmForm and FvwmScript the situation is
8737              similar.  There is a main window (a child of the root window)
8738              which corresponds to the main colorset and most of the widgets
8739              are windows which are children of the main window.  Tint may
8740              work or not with the Transparent option.  When the colorset is
8741              drawn on the foreground Tint should work.  In some cases,
8742              tinting may be very slow.  Tinting may work with fvwm menu
8743              (without animation).  Tinting may work better if your X server
8744              has backing store enabled (try xdpyinfo to see if this the
8745              case).  There is a chance that the backing store support of your
8746              X server does not work well with the terrible hack used to Tint
8747              the ParentRelative Pixmap.  So, to get tinted root transparency
8748              it is more safe to use the RootTransparent option.
8749
8750              RootTransparent [ buffer ] creates a root transparent
8751              background.  To make this option work, you must use an Esetroot
8752              compatible program, fvwm-root with the --retain-pixmap option or
8753              FvwmBacker with the RetainPixmap option (and colorset or solid
8754              backgrounds).  The buffer keyword is useful only when the Tint
8755              option is used too.  This speeds up creation of windows which
8756              use the colorset (useful for fvwm menus) at the cost of memory
8757              usage.  It also speeds up opaque move and resize which can be
8758              unacceptably slow without buffer.  However, this option may add
8759              a lot of memory to your X server (depending on the size of the
8760              image used to set the background).  In summary, using outline
8761              move and resize for modules which use such a colorset may be a
8762              good idea.
8763
8764              Shape, TiledShape and AspectShape take a file name as an
8765              argument, search the ImagePath and use it as the shape bitmap.
8766              TiledShape produces repeated copies of the bitmap with no
8767              scaling, Shape causes the bitmap to be stretched to fit whatever
8768              object the colorset is applied to and AspectShape stretches to
8769              fit but retains the bitmap aspect ratio.  If the file is a
8770              pixmap in xpm format the shape mask (all opaque pixels) of the
8771              pixmap is used.  For png and svg images, the shape mask is
8772              equivalent to all not completely transparent pixels (alpha > 0).
8773
8774              Warning
8775              Due to the way X11 implements shapes you cannot take back making
8776              windows shaped. You may have to restart fvwm or the shaped
8777              application.
8778
8779              ?Gradient ...  creates a pixmap and stretches it to fit the
8780              window.  ?Gradient may be one of HGradient, VGradient,
8781              DGradient, BGradient, SGradient, CGradient, RGradient or
8782              YGradient.  The gradient types are as follows: H is horizontal;
8783              V is vertical; D is diagonal from top left to bottom right; B is
8784              a backwards diagonal from bottom left to top right; S is
8785              concentric squares; C is concentric circles; R is a radar like
8786              pattern and Y is a Yin Yang style (but without the dots).
8787              Please refer to the Color Gradients section for the syntax of
8788              gradients.
8789
8790              Tint takes 2 arguments, a color and a percentage between 0 and
8791              100.  It causes the image defined using ?Pixmap or ?Gradient to
8792              be tinted with the specified color using the percentage.  If the
8793              image is transparent Tint tints only the image part.
8794              Unfortunately, a colorset background specified using the
8795              Transparent option can give strange results.  See the
8796              Transparent option for details.  With no arguments this option
8797              removes the tint.
8798
8799              fgTint takes 2 arguments, a color and a percentage between 0 and
8800              100.  It causes the color defined using fg to be tinted with the
8801              specified color using the percentage.  With no arguments this
8802              option removes the tint.
8803
8804              bgTint takes 2 arguments, a color and a percentage between 0 and
8805              100.  It causes the color defined using bg to be tinted with the
8806              specified color using the percentage.  If the sh and hi colors
8807              are not specified, they are recomputed from the tinted bg color.
8808              With no arguments this option removes the tint.
8809
8810              Alpha takes a percentage between 0 and 100 as an argument.  It
8811              causes fvwm to merge the image defined using ?Pixmap or
8812              ?Gradient with the bg color using the percentage.  If the
8813              percentage is 0 the image is hidden and if it is 100 the image
8814              is displayed as usual (no merge).  The default is 100 and it is
8815              restored if no argument is given.
8816
8817              fgAlpha takes a percentage between 0 and 100 as an argument.  It
8818              causes fvwm to merge the text and the colorset background using
8819              the percentage.  If the percentage is 0 the text is hidden and
8820              if it is 100 the text is displayed as usual (no merge).  This
8821              option has an effect only with fonts loaded by Xft, see the Font
8822              Names and Font Loading section.  The default is 100 and it is
8823              restored if no argument is given.
8824
8825              Dither causes fvwm to dither the image defined using ?Pixmap or
8826              ?Gradient.  This is useful only with displays with depth less
8827              than or equal to 16 (i.e., on displays which can only display
8828              less than 65537 colors at once).  The dithering effect lets you
8829              simulate having more colors available that you actually have.
8830              NoDither causes fvwm to do not dither the images.  Dither is the
8831              default if the depth is less than or equal to 8 (a screen with
8832              256 colors or less).  In depth 15 (32768 colors) and 16 (65536
8833              colors), the default is NoDither, however this effect can be
8834              useful with images which contain a lot of close colors.  For
8835              example a fine gradient looks more smooth.
8836
8837              IconTint takes 2 arguments, a color and a percentage between 0
8838              and 100.  It causes fvwm or a module to tint the "icons" which
8839              are rendered into the colorset background with the specified
8840              color using a percentage.  Here "icons" means, fvwm Icons, fvwm
8841              menu icons, MiniIcons which represent applications in various
8842              modules, images loaded by modules (e.g., images specified by the
8843              Icon FvwmButtons button option) ...etc.  With no arguments this
8844              option removes the icon tint.
8845
8846              IconAlpha takes a percentage between 0 and 100 as an argument.
8847              It causes fvwm to merge the "icons" which are rendered into the
8848              colorset background using this percentage.  The default is 100
8849              and it is restored if no argument is given.
8850
8851              Note: It is equivalent to use "Tint a_color rate" and "Alpha a"
8852              if a = 100 and the bg color is a_color.  This equivalence does
8853              not hold for IconAlpha and IconTint as the background can be an
8854              image or a gradient (and not a uniform color background).
8855              However, in some cases you can achieve (almost) the same effect
8856              by using IconTint in the place of IconAlpha.  This is preferable
8857              as, in general, IconAlpha generates more redrawing than
8858              IconTint.
8859
8860              NoShape removes the shape mask from the colorset while Plain
8861              removes the background pixmap or gradient.
8862
8863              Examples
8864
8865                  Colorset 3 fg tan, bg navy
8866
8867              If necessary this creates colorsets 0, 1, 2 and 3 and then
8868              changes colorset 3 to have a foreground of tan, a background of
8869              navy.
8870
8871                  Colorset 3 bg "navy blue"
8872
8873              changes the background color of colorset 3 to navy blue.  The
8874              foreground and pixmap are unchanged.
8875
8876                  Colorset 3 AspectPixmap large_murky_dungeon.xpm
8877
8878              causes depression.
8879
8880                  Colorset 3 bg Average
8881
8882              Sets the background color and the relief colors to match the
8883              background pixmap.  This is the default setting but it must be
8884              used if a background color was specified and is now not
8885              required.
8886
8887                  Colorset 3 YGradient 200 3 blue 1000 navy 1 blue 1000 navy
8888
8889              Adds a Yin Yang gradient background pixmap to colorset 3.  If
8890              the background is set to average it is recomputed along with the
8891              foreground if that is set to contrast.
8892
8893                  #!/bin/sh
8894                  FvwmCommand "Colorset 7 fg navy, bg gray"
8895                  while true
8896                  do
8897                    FvwmCommand "Colorset 7 fg gray"
8898                    sleep 1
8899                    FvwmCommand "Colorset 7 fg navy"
8900                    sleep 1
8901                  done
8902
8903              Makes colorset 7 blink.
8904
8905              The color names used in colorsets are saved as fvwm variables
8906              which can be substituted in any fvwm command.  For example:
8907
8908                  AddToFunc InitFunction
8909                  + I Exec exec xterm -fg $[fg.cs0] -bg $[bg.cs0]
8910
8911              Where $[fg.cs0] is the foreground color of colorset zero.
8912              Please refer to the Command Expansion section for more
8913              information.
8914
8915       CleanupColorsets
8916              Resets a definition of all colorsets.
8917
8918       Color Gradients
8919              A color gradient is a background that changes its color
8920              gradually from one hue to a different one.  Color gradients can
8921              be used by various commands and modules of fvwm.  There are
8922              eight types of gradients: HGradient is a horizontal gradient,
8923              VGradient is vertical, DGradient is diagonal from top left to
8924              bottom right, BGradient is backwards diagonal from bottom left
8925              to top right, SGradient is concentric squares, CGradient is
8926              concentric circles, RGradient is a radar like pattern and
8927              YGradient is a Yin Yang style (but without the dots).
8928
8929              The color gradient syntax has two forms:
8930
8931              ?Gradient colors start-color end-color
8932
8933              This form specifies a linear gradient.  The arguments denote the
8934              total number of colors to allocate (between 2 and 1000), the
8935              initial color and the final color.
8936
8937              Example:
8938
8939                  TitleStyle VGradient 20 rgb:b8/ce/bc rgb:5b/85/d0
8940
8941              ?Gradient colors segments color length color [length color] ...
8942
8943              The second form specifies a nonlinear gradient.  The arguments
8944              are: the total number of colors to allocate (between 2 and
8945              1000), then the number of segments.  For each segment, specify
8946              the starting color, a relative length, then the ending color.
8947              Each subsequent segment begins with the second color of the last
8948              segment.  The lengths may be any non-negative integers.  The
8949              length of one segment divided by the sum of all segments lengths
8950              is the fraction of the colors that are used for the segment.
8951
8952              Examples:
8953
8954                  MenuStyle * \
8955                       MenuFace DGradient 128 2 lightgrey 50 blue 50 white
8956
8957                  # 20% gradient from red to blue,
8958                  # 30% from blue to black,
8959                  # 50% from black to grey
8960                  MenuStyle * \
8961                       MenuFace DGradient 100 3 Red 20 Blue 30 Black 50 Grey
8962
8963                  # 50% from blue to green, then
8964                  # 50% from yellow to red
8965                  Colorset 0 HGradient 128 3 Blue 1000 Green 1 Yellow 1000 Red
8966

ENVIRONMENT

8968       The environment variables that have an effect on how fvwm operates are
8969       the following:
8970
8971       DISPLAY
8972           Fvwm starts on this display unless the -display option is given.
8973
8974       FVWM_MODULEDIR
8975           Set by fvwm to the directory containing the standard fvwm modules.
8976
8977       FVWM_USERDIR
8978           Used to determine the user's data directory for reading and
8979           sometimes writing personal files.  If this variable is not already
8980           set, it is set by fvwm to $HOME/.fvwm, which is the default user's
8981           data directory.
8982
8983       SESSION_MANAGER
8984           Fvwm tries to contact this session manager.
8985
8986       SESSION_MANAGER_NAME
8987           This is used mainly to determine xsm running to work around its
8988           bug.  If this variable is set to "xsm", DiscardCommand is set as
8989           xsm expects it and not as XSMP requires.  If you run fvwm under
8990           xsm, you should set this variable to "xsm", otherwise old state
8991           files are not removed.
8992
8993       SM_SAVE_DIR
8994           If this is set, fvwm saves its session data in this directory.
8995           Otherwise it uses $HOME.  Note, the state files are named
8996           .fs-??????  and normally are removed automatically when not used
8997           anymore.
8998

AUTHORS

9000       Robert Nation with help from many people, based on twm code, which was
9001       written by Tom LaStrange.  After Robert Nation came Charles Hines,
9002       followed by Brady Montz.  Currently fvwm is developed by a number of
9003       people on the fvwm-workers mailing list.
9004
9006       Fvwm and all the modules, scripts and other files coming with the
9007       distribution are subject to the GNU General Public License (GPL).
9008       Please refer to the COPYING file that came with fvwm for details.
9009

BUGS

9011       Bug reports can be sent to the fvwm-workers mailing list at
9012       <fvwm-workers@fvwm.org>
9013
9014       The official fvwm homepage is http://fvwm.org/.
9015
9016
9017
9018                                  05-Sep-2019                          FVWM(1)
Impressum