1= FVWM3(1)
2
3== NAME
4
5fvwm3 - F? Virtual Window Manager for X11
6
7== SYNOPSIS
8
9*fvwm3* [*-c* _config-command_] [*-d* _displayname_] [*-f*
10_config-file_] [*-r*] [*-s* [_screen_num_]] [*-V*] [*-C* _visual-class_
11| *-I* _visual-id_] [*-l* _colors_ [*-L*] [*-A*] [*-S*] [*-P*]] [*-D*]
12[*-h*] [*-i* _client-id_] [*-F* _state-file_] [*--debug-stack-ring*]
13[*-blackout*]
14
15== DESCRIPTION
16
17Fvwm is a window manager for X11. It is designed to minimize memory
18consumption, provide a 3D look to window frames, and a virtual desktop.
19
20Note that there are several window managers around that have "fvwm" in
21their name. Fvwm3 is the successor to fvwm2, which preceded the 1.x
22versions of fvwm. This version is simply called fvwm throughout this
23document, while the main executable is named fvwm3.
24
25Fvwm is intended to have a small memory footprint but a rich feature
26set, be extremely customizable and extendible, and have a high degree of
27Motif mwm compatibility. Fvwm provides both a large _virtual desktop_
28and _multiple disjoint desktops_ which can be used separately or
29together. The virtual desktop allows you to pretend that your video
30screen is really quite large, and you can scroll around within the
31desktop. The multiple disjoint desktops allow you to pretend that you
32really have several screens to work at, but each screen is completely
33unrelated to the others.
34
35Fvwm provides _keyboard accelerators_ that allow you to perform most
36window manager functions, including moving and resizing windows and
37operating the menus, using keyboard shortcuts.
38
39Fvwm has also overcome the distinction between configuration commands
40and action commands that most window managers make. Configuration
41commands typically set fonts, colors, menu contents, and key and mouse
42function bindings, while action commands do things like raise and lower
43windows. Fvwm makes no such distinction and allows anything to be
44changed at any time.
45
46Other noteworthy differences between fvwm and other X11 window managers
47are the introduction of the _SloppyFocus_ and _NeverFocus_ focus
48methods. Focus policy can be separately specified for different window
49groups. Windows using _SloppyFocus_ acquire focus when the pointer moves
50into them and retain focus until some other window acquires it. Such
51windows do not lose focus when the pointer moves into the root window.
52The _NeverFocus_ policy is provided for use with windows into which one
53never types (e.g. xclock, oclock, xbiff, xeyes, tuxeyes) - for example,
54if a SloppyFocus terminal window has focus, moving the pointer over a
55NeverFocus decoration window does not deprive the terminal of focus.
56
57== OPTIONS
58
59These are the command line options that are recognized by fvwm:
60
61*-i* | *--clientid* _id_::
62
63This option is used when fvwm is started by a session manager. Should
64not be used by a user.
65
66*-c* | *--cmd* _config-command_::
67
68Causes fvwm to use _config-command_ instead of '*Read* _config_' (or
69'*Read* _.fvwm2rc_') as its initialization command. (Note that up to 10
70*-f* and *-c* parameters can be given, and they are executed in the
71order specified.)
72+
73Any module started by command line arguments is assumed to be a module
74that sends back config commands. All command line modules have to quit
75before fvwm proceeds on to the StartFunction and setting border
76decorations and styles. There is a potential deadlock if you start a
77module other than *FvwmCpp*/*FvwmM4*/*FvwmPerl* but there is a timeout
78so fvwm eventually gets going.
79+
80As an example, starting the pager this way hangs fvwm until the timeout,
81but the following should work well:
82
83....
84fvwm -c "AddToFunc StartFunction I Module FvwmPager"
85....
86
87*-d* | *--display* _displayname_::
88
89Manage the display called _displayname_ instead of the name obtained
90from the environment variable _$DISPLAY_.
91
92*-D* | *--debug*::
93
94Puts X transactions in synchronous mode, which dramatically slows things
95down, but guarantees that fvwm's internal error messages are correct.
96
97*-f* _config-file_::
98
99Causes fvwm to read _config-file_ instead of _~/.fvwm/config_ as its
100initialization file. _$FVWM_USERDIR_ can also be used to change location
101of default user directory _~/.fvwm_.
102
103*-h* | *--help*::
104
105A short usage description is printed.
106
107*-r* | *--replace*::
108
109Try to take over from a previously running wm. This does not work unless
110the other wm is ICCCM2 2.0 compliant.
111
112*-F* | *--restore* _state-file_::
113
114This option is used when fvwm is started by a session manager. Should
115not be used by a user.
116
117*-s* | *--single-screen* [_screen_num_]::
118
119On a multi-screen display, run fvwm only on the screen named in the
120_$DISPLAY_ environment variable or provided through the *-d* option. The
121optional argument _screen_num_ should be positive or null and override
122the screen number. Normally, fvwm attempts to start up on all screens of
123a multi-screen display.
124
125*-V* | *--version*::
126
127Prints the version of fvwm to _stderr_. Also prints an information about
128the compiled in support for readline, xpm, png, svg, GNOME hints,
129EWMH hints, session management, bidirectional text, multibyte
130characters, RandR and Xft aa font rendering.
131
132*-C* | *--visual* _visual-class_::
133
134Causes fvwm to use _visual-class_ for the window borders and menus.
135_visual-class_ can be "StaticGray", "GrayScale", "StaticColor",
136"PseudoColor", "TrueColor" or "DirectColor".
137
138*-I* | *--visualid* _id_::
139
140Causes fvwm to use _id_ as the visual id for the window borders and
141menus. _id_ can be specified as N for decimal or 0xN for hexadecimal.
142See man page of xdpyinfo for a list of supported visuals.
143
144*-l* | *--color-limit* _limit_::
145
146Specifies a _limit_ on the colors used in image, gradient and possibly
147simple colors used by fvwm. In fact, fvwm (and all the modules) uses a
148palette with at most _limit_ colors. This option is only useful with
149screens that display 256 colors (or less) with a dynamic visual
150(PseudoColor, GrayScale or DirectColor). The default depends on your X
151server and how you run fvwm. In most case this default is reasonable.
152The *-l* option should be used only if you encounter problems with
153colors. By default, fvwm tries to detect large pre-allocated palettes.
154If such a palette is detected fvwm uses it and a priori the *-l* must
155not be used. Moreover, in this case the *-A* and *-S* options are
156forced. Note that XFree-4.2 pre-allocates 244 colors (if you use a
157driver with Render support) leaving only a few free colors. This may
158lead to some color problems (and nothing can be done). XFree-4.3 or
159better pre-allocate only 85 colors. If no pre-allocated palette is auto
160detected the defaults are as follow:
161+
162Display depth 8 (256 colors)
163+
164....
165PseudoColor: 68 (4x4x4 color cube + 4 grey)
166GrayScale: 64 regular grey
167DirectColor: 32 (3x3x3 color cube + 5 grey)
168....
169+
170Display depth 4 (16 colors)
171+
172....
173PseudoColor: 10 (2x2x2 color cube + 2 grey)
174GrayScale: 8 regular grey
175DirectColor: 10 (2x2x2 color cube + 2 grey)
176....
177+
178Note that if you use a private color map (i.e., fvwm is started with the
179*-C* or the *-I* options), then other defaults are used.
180+
181Now what to do if you encounter problems with colors? The first thing to
182do is to check if you really cannot run your X server with depth 15, 16
183or better. Check your X server documentation. Note that some hardware
184can support two different depths on the same screen (typically depth 8
185and depth 24). If depth 8 is the default, you can force fvwm to use the
186best depth by using the *-C* option with _TrueColor_ as argument. So now
187we assume that you are forced to run in depth 8 with a dynamic visual
188because your hardware/driver cannot do better or because you need to use
189an application which needs to run under this mode (e.g., because this
190application needs read-write colors). What it should be understand is
191that you have only 256 colors and that all the applications which use
192the default color map must share these colors. The main problem is that
193there are applications which use a lot or even all the colors. If you
194use such application you may have no more free colors and some
195applications (which used only a few colors) may fail to start or are
196unusable. There are three things that can be done (and fvwm does not
197really play a particular role, all applications are concerned). The
198first is to run the applications which waste your (default) color map
199with a private color map. For example, run netscape with the -install
200option, run KDE or QT applications with the --cmap option, use the *-C*
201option for fvwm. The disadvantage of this method is that it is visually
202disturbing (see the *ColormapFocus* command for a better control of the
203color maps switching). The second method is to limit the number of
204colors that the applications use. Again, some applications have options
205to specify a given color limit. With fvwm you may try various values, 61
206(a special "visual" palette), 56 (a 4x4x3 color cube plus 6 grey), 29 (a
2073x3x3 color cube plus 2 grey), 10 or 9. Also, you may use the *-L*
208option. However, limiting the number of colors is not the definitive
209solution. The definitive solution is to try cause applications which use
210a lot of colors use the same colors. This is a difficult task as there
211are no formal standards for this goal. However, some toolkits as QT and
212GTK use color cubes as palettes. So, the idea is to configure your
213applications/toolkits to all use the same color cube. Moreover, you can
214use the colors in this color cube in your X resources configuration
215files and/or as arguments to colors options. Fvwm can use any color cube
216of the form RxGxB with 2 <= R <= 6, R = G, R-1 =< B <= R and B >= 2. To
217get an RxGxB color cube give an argument to *-l* an integer c >= R*G*B
218and < (R+1)*(G+1)*B if B=R and < R*G*(B+1) if B < R (and different from
21961). If c > R*G*B, then some grey may be added to the color cube. You
220can use the *PrintInfo* _Colors_ [_1_] command to get information on
221your fvwm colors setting. In particular, this command prints the palette
222used by fvwm in rgb format (the last integer gives the number of times
223fvwm has allocated the colors).
224
225*-L* | *--strict-color-limit*::
226
227If the screen displays 256 colors (or less) and has a dynamic visual,
228causes fvwm to use its palette for all the colors. By default, the
229palette is used only for images and gradients.
230
231*-P* | *--visual-palette*::
232
233If the screen displays 256 colors (or less) and has a dynamic visual,
234this option causes fvwm to use a palette designed for limiting the
235"visual" color distance between the points of the palette. Moreover, for
236better color sharing, if possible colors with a name in the X rgb data
237base are used for defining the colors (with the hope that applications
238and images prefer to use named colors). If the *-l* option is not used
239this palette has 61 colors. This palette is also automatically selected
240if 61 or 9 is used as argument to the *-l* option.
241
242*-A* | *--allocate-palette*::
243
244If the screen displays 256 colors (or less) and has a dynamic visual
245this option causes fvwm to allocate all the colors of its palette at
246start up for reserving these colors for future use. This option forces
247the *-static-palette* option. By default, fvwm allocates (reserves) a
248color in its palette only if it needs this color.
249
250*-S* | *--static-palette*::
251
252If the screen displays 256 colors (or less) and has a dynamic visual
253this option causes fvwm to never free the colors in its palette. By
254default, when fvwm does not need a color any more it frees this color so
255that a new color can be used. This option may speed up image loading and
256save a few bits of memory.
257
258*-blackout*::
259
260This option is provided for backward compatibility only. Blacking out
261the screen during startup is not necessary (and doesn't work) anymore.
262This option will be removed in the future.
263
264*--debug-stack-ring*::
265
266Enables stack ring debugging. This option is only intended for internal
267debugging and should only be used by developers.
268
269*-v*::
270
271Enables debug logging. Writes in append mode to fvwm log file, which is
272~/.fvwm/fvwm3-output.log by default. See ENVIRONMENT section on how to
273override this location on fvwm3 startup using _$FVWM_USERDIR_ or
274_$FVWM3_LOGFILE_ .
275+
276Logging can also be dynamically toggled on and off using signals:
277+
278....
279SIGUSR1 : used as a signal to restart Fvwm
280SIGUSR2 : used as a signal to toggle opening/closing debug log file
281....
282
283== ANATOMY OF A WINDOW
284
285Fvwm puts a decorative border around most windows. This border consists
286of a bar on each side and a small L-shaped section on each corner. There
287is an additional top bar called the title-bar which is used to display
288the name of the window. In addition, there are up to 10 title-bar
289buttons. The top, side, and bottom bars are collectively known as the
290side-bars. The corner pieces are called the frame.
291
292With the built-in minimal configuration, dragging mouse button 1 in the
293frame or side-bars begins a resize operation on the window. Dragging
294mouse button 2 in the frame or side-bars begins a move operation. There
295are raise/lower operations bound to a single clicking on borders.
296Similarly for the window title.
297
298Up to ten title-bar buttons may exist. Their use is completely user
299definable. One popular configuration uses one button on the left that is
300used to bring up a list of window options and two buttons on the right
301used to iconify and maximize the window. Another popular configuration
302adds a close button to the right. The number of title-bar buttons used
303depends on which ones have mouse actions bound to them. See the *Mouse*
304command.
305
306== THE VIRTUAL DESKTOP
307
308Fvwm provides multiple virtual desktops for users who wish to use them.
309The screen is a viewport onto a _desktop_ which may be larger than the
310screen. Several distinct desktops can be accessed (concept: one desktop
311for each project, or one desktop for each application, when view
312applications are distinct). Since each desktop can be larger than the
313physical screen, divided into m by n _pages_ which are each the size of
314the physical screen, windows which are larger than the screen or large
315groups of related windows can easily be viewed.
316
317The (m by n) size (i.e. number of pages) of the virtual desktops can be
318changed any time, by using the *DesktopSize* command. All virtual
319desktops must be (are) the same size. The total number of distinct
320desktops does not need to be specified, but is limited to approximately
3214 billion total. All windows on a range of desktops can be viewed in the
322*FvwmPager*, a miniature view of the desktops. The pager is an accessory
323program, called a module, which is not essential for the window manager
324to operate. Windows may also be listed using the *WindowList* command or
325the *FvwmIconMan* module.
326
327Fvwm keeps the windows on the desktop in a layered stacking order; a
328window in a lower layer never obscures a window in a higher layer. The
329layer of a window can be changed by using the *Layer* command. The
330concept of layers is a generalization of the _StaysOnTop_ flag of older
331fvwm versions. The _StaysOnTop_ and _StaysPut_ *Style* options are now
332implemented by putting the windows in suitable layers and the previously
333missing _StaysOnBottom_ *Style* option has been added.
334
335_Sticky_ windows are windows which transcend the virtual desktop by
336"Sticking to the screen's glass". They always stay put on the screen.
337This is convenient for things like clocks and xbiffs, so you only need
338to run one such gadget and it always stays with you. Icons can also be
339made to stick to the glass, if desired.
340
341Window geometries are specified relative to the current viewport. That
342is:
343
344....
345xterm -geometry +0+0
346....
347
348creates a window in the upper left hand corner of the visible portion of
349the screen. It is permissible to specify geometries which place windows
350on the virtual desktop, but off the screen. For example, if the visible
351screen is 1000 by 1000 pixels, and the desktop size is 3x3, and the
352current viewport is at the upper left hand corner of the desktop,
353invoking:
354
355....
356xterm -geometry +1000+1000
357....
358
359places a window just off of the lower right hand corner of the screen.
360It can be found by moving the mouse to the lower right hand corner of
361the screen and waiting for it to scroll into view. A geometry specified
362as something like:
363
364....
365xterm -geometry -5-5
366....
367
368places the window's lower right hand corner 5 pixels from the lower
369right corner of the visible portion of the screen. Not all applications
370support window geometries with negative offsets. Some applications place
371the window's upper right hand corner 5 pixels above and to the left of
372the upper left hand corner of the screen; others may do just plain
373bizarre things.
374
375There are several ways to cause a window to map onto a desktop or page
376other than the currently active one. The geometry technique mentioned
377above (specifying x,y coordinates larger than the physical screen size),
378however, suffers from the limitation of being interpreted relative to
379the current viewport: the window may not consistently appear on a
380specific page, unless you always invoke the application from the same
381page.
382
383A better way to place windows on a different page, screen or desk from
384the currently mapped viewport is to use the _StartsOnPage_ or
385_StartsOnScreen_ style specification (the successors to the older
386_StartsOnDesk_ style) in your _config_ file. The placement is
387consistent: it does not depend on your current location on the virtual
388desktop.
389
390Some applications that understand standard Xt command line arguments and
391X resources, like xterm and xfontsel, allow the user to specify the
392start-up desk or page on the command line:
393
394....
395xterm -xrm "*Desk:1"
396....
397
398starts an xterm on desk number 1;
399
400....
401xterm -xrm "*Page:3 2 1"
402....
403
404starts an xterm two pages to the right and one down from the upper left
405hand page of desk number 3. Not all applications understand the use of
406these options, however. You could achieve the same results with the
407following lines in your _.Xdefaults_ file:
408
409....
410XTerm*Desk: 1
411....
412
413or
414
415....
416XTerm*Page: 3 2 1
417....
418
419== USE ON MULTI-SCREEN DISPLAYS
420
421If the *-s* command line argument is not given, fvwm automatically
422starts up on every screen on the specified display. After fvwm starts
423each screen is treated independently. Restarts of fvwm need to be
424performed separately on each screen. The use of
425
426....
427EdgeScroll 0 0
428....
429
430is strongly recommended for multi-screen displays. You may need to quit
431on each screen to quit from the X session completely. This is not to be
432confused with RandR support.
433
434== RANDR SUPPORT
435
436Fvwm supports the RandR X11 protocol. If Fvwm has been compiled wiith
437RandR support then it tracks the outputs (displays) which it finds.
438These outputs are stored by name, which can be found by running using
439the xrand(1) command.
440
441In doing so, Fvwm tracks events from RandR, such as when a given output
442changes size, or has been removed. In such cases, Fvwm will react by
443moving windows. If an output is removed, those windows on that removed
444output will be moved to the next active output (the output which
445contains the mouse pointer). If the same output reappears, Fvwm will
446move those windows back again.
447
448In addition to specific *FvwmEvent* conditions which can be used to track a
449monitor's change, there is a function called _RandRFunc_ which the user can
450define to be run when a screen event occurs (such as
451enabling/disabling/resolution change):
452
453....
454DestroyFunc RandRFunc
455AddToFunc   RandRFunc
456+ I Exec exec xmessage "A screen changed"
457....
458
459== DESKTOP BEHAVIOUR
460
461Because Fvwm has the capability to track outputs, Fvwm can be told how
462to handle those. This is controlled via the *DesktopConfiguration*
463command. By default, Fvwm treats all outputs it finds as one large
464screen, although Fvwm can be told to treat screens indepedantly of each
465other.
466
467== INITIALIZATION
468
469During initialization, fvwm searches for a configuration file which
470describes key and button bindings, and many other things. The format of
471these files is described later. Fvwm first searches for configuration
472files using the command
473
474....
475Read config
476....
477
478This looks for file _config_ in _$FVWM_USERDIR_ and _$FVWM_DATADIR_
479directories, as described in *Read*. If this fails more files are
480queried for backward compatibility. Here is the complete list of all
481file locations queried in the default installation (only the first found
482file is used):
483
484....
485$HOME/.fvwm/config
486/usr/local/share/fvwm/config
487
488$HOME/.fvwm/.fvwm2rc
489$HOME/.fvwm2rc
490/usr/local/share/fvwm/.fvwm2rc
491/usr/local/share/fvwm/system.fvwm2rc
492/etc/system.fvwm2rc
493....
494
495Please note, the last 5 locations are not guaranteed to be supported in
496the future.
497
498If a configuration file is not found, the left mouse button, or
499
500or
501
502keys on the root window bring up menus and forms that can create a
503starting configuration file.
504
505Fvwm sets two environment variables which are inherited by its children.
506These are _$DISPLAY_ which describes the display on which fvwm is
507running. _$DISPLAY_ may be _unix:0.0_ or _:0.0_, which doesn't work too
508well when passed through ssh to another machine, so _$HOSTDISPLAY_ is
509set to a network-ready description of the display. _$HOSTDISPLAY_ always
510uses the TCP/IP transport protocol (even for a local connection) so
511_$DISPLAY_ should be used for local connections, as it may use
512Unix-domain sockets, which are faster.
513
514If you want to start some applications or modules with fvwm, you can
515simply put
516
517....
518Exec app
519....
520
521or
522
523....
524Module FvwmXxx
525....
526
527into your _config_, but it is not recommended; do this only if you know
528what you are doing. It is usually important to start applications or
529modules after the entire config is read, because it contains styles or
530module configurations which can affect window appearance and
531functionality.
532
533The standard way to start applications or modules on fvwm's start up is
534to add them to an initialization function (usually *StartFunction* or
535*InitFunction*). This way they are only started after fvwm finishes to
536read and execute _config_ file.
537
538Fvwm has three special functions for initialization: *StartFunction*,
539which is executed on startups and restarts; *InitFunction* and
540*RestartFunction*, which are executed during initialization and restarts
541(respectively) just after StartFunction. These functions may be
542customized in a user's _config_ file using the *AddToFunc* command
543(described later) to start up modules, xterms, or whatever you'd like to
544have started by fvwm.
545
546Fvwm has also a special exit function: *ExitFunction*, executed when
547exiting or restarting before actually quitting. It could be used to
548explicitly kill modules, etc.
549
550If fvwm is run under a session manager, functions *SessionInitFunction*
551and *SessionRestartFunction* are executed instead of InitFunction and
552RestartFunction. This helps to define the user's _config_ file to be
553good for both running under a session manager and without it. Generally
554it is a bad idea to start xterms or other applications in "Session*"
555functions. Also someone can decide to start different modules while
556running under a session manager or not. For the similar purposes
557*SessionExitFunction* is used instead of ExitFunction.
558
559....
560DestroyFunc StartFunction
561AddToFunc StartFunction
562 + I Module FvwmPager * *
563 + I Module FvwmButtons
564
565DestroyFunc InitFunction
566AddToFunc InitFunction
567 + I Module FvwmBanner
568 + I Module FvwmIconMan
569 + I Exec xsetroot -solid cyan
570 + I Exec xterm
571 + I Exec netscape
572
573DestroyFunc RestartFunction
574AddToFunc RestartFunction
575 + I Module FvwmIconMan
576
577DestroyFunc SessionInitFunction
578AddToFunc SessionInitFunction
579 + I Module FvwmBanner
580
581DestroyFunc SessionRestartFunction
582AddToFunc SessionRestartFunction
583 + I Nop
584....
585
586You do not need to define all special functions if some are empty. Also
587note, all these special functions may be emulated now using
588*StartFunction* and *ExitFunction,* like this:
589
590....
591DestroyFunc StartFunction
592AddToFunc StartFunction
593+ I Test (Init) Module FvwmBanner
594+ I Module FvwmPager * *
595+ I Test (Restart) Beep
596
597DestroyFunc ExitFunction
598AddToFunc ExitFunction
599+ I Test (Quit) Echo Bye-bye
600+ I KillModule MyBuggyModule
601+ I Test (ToRestart) Beep
602....
603
604== COMPILATION OPTIONS
605
606Fvwm has a number of compile-time options. If you have trouble using a
607certain command or feature, check to see if support for it was included
608at compile time. Optional features are described in the _config.h_ file
609that is generated during compilation.
610
611== ICONS AND IMAGES
612
613Fvwm can load *.xbm,* *.xpm,* *.png* and *.svg* images. *XBM* images are
614monochrome. Fvwm can always display *XBM* files. *XPM* and *PNG* formats
615are color images. SVG is a vector graphics image format. Compile-time
616options determine whether fvwm can display *XPM*, *PNG* or *SVG* icons
617and images. See the _INSTALL.fvwm_ file for more information.
618
619The related *SHAPE* compile-time option can make fvwm display spiffy
620shaped icons.
621
622=== SVG rendering options
623
624SVG images are generated from (XML) text files. A really simple SVG file
625might look something like this:
626
627....
628<svg width="120" height="80">
629<rect fill="red"     width="40" height="40"  x="0"   y="0"  />
630<rect fill="lime"    width="40" height="40"  x="40"  y="0"  />
631<rect fill="blue"    width="40" height="40"  x="80"  y="0"  />
632<rect fill="cyan"    width="40" height="40"  x="0"   y="40" />
633<rect fill="magenta" width="40" height="40"  x="40"  y="40" />
634<rect fill="yellow"  width="40" height="40"  x="80"  y="40" />
635</svg>
636....
637
638By default, SVG images are rendered as the image creator intended them
639to. But since SVG is a vector graphics format, the images can be
640rendered at any chosen size and rotation, e.g. making it possible to use
641the same icon file rendered at different sizes for the _Icon_ and
642_MiniIcon_ styles.
643
644The rendering options are specified as a string appended to the SVG
645filename as follows:
646
647....
648_image.svg_:[!] [(1) _size_] [(2) _position_] [(3) _rotation_] [(4)
649_scale_] ...
650
651{empty}(1) [-]_width_{x}[-]_height_
652
653{empty}(2) {- | +}_xpos_{- | +}_ypos_
654
655{empty}(3) @[-]_angle_
656
657{empty}(4) {* | }[-]_factor_[x | y]
658....
659
660The option string always starts with a colon (':') to separate it from
661the filename. An empty option string can skip this colon, but it might
662still be a good idea to include it to prevent ambiguity if the filename
663contains any colon.
664
665....
666filename_without_colon.svg
667filename:with:colon.svg:
668....
669
670An exclamation point ('!') transposes the entire final image (including
671the rendering area), i.e. all the horizontal and all the vertical
672coordinates are swapped with each other.
673
674....
675image.svg:!
676....
677
678_width_ and _height_ specifies the dimensions of the rendering area in
679pixels, i.e. the dimensions of the resulting image. The actual image is
680fitted to fill the entire rendering area.
681
682....
683image.svg:60x60
684....
685
686Use a _width_ or _height_ value of 0 to keep the aspect ratio.
687
688....
689image.svg:0x60
690image.svg:60x0
691....
692
693A '-' before _width_ mirrors the rendering area horizontally.
694
695....
696image.svg:-0x0
697....
698
699A '-' before _height_ mirrors the rendering area vertically.
700
701....
702image.svg:0x-0
703....
704
705_xpos_ and _ypos_ specifies a translation of the image in pixels. A
706positive _xpos_ value moves the image to the right. A positive _ypos_
707value moves it down. Moving it partially outside of the rendering area
708results in a cropped image.
709
710....
711image.svg:-30-0
712image.svg:-0+10
713image.svg:-30+10
714....
715
716_angle_ specifies a rotation around the actual image center in degrees.
717This might result in a cropped image. A positive value rotates the image
718clockwise. Floating point values are recognized.
719
720....
721image.svg:@180
722image.svg:@-90
723image.svg:@30
724image.svg:@57.3
725....
726
727_factor_ specifes a scaling of the actual image (not the rendering
728area). Scaling it up results in a cropped image. Floating point values
729are recognized. Division by zero is ignored. If _factor_ is directly
730followed by a 'x' or a 'y', the scaling is horizontal or vertical
731respectively. Otherwise the scaling is uniform.
732
733....
734image.svg:*2
735image.svg:/2
736image.svg:/3x
737image.svg:/2y
738....
739
740Scaling down a translated or rotated image can prevent cropping.
741
742....
743image.svg:@30*0.6
744....
745
746Repeated usage of translation, rotation, and scaling is allowed.
747Translation and rotation are additive. Scaling is multiplicative.
748
749....
750image.svg:*2/3
751image.svg:/3x/2y
752....
753
754When combining affine transformations, the scaling is always done first,
755then the rotation, and finally the translation.
756
757....
758image.svg:-30+10@30/3x/2y
759....
760
761Use a negative scale _factor_ to mirror the actual image.
762
763....
764image.svg:-30+10@30/-3x/2y
765....
766
767Mirroring of the rendering area is done after any scaling, rotation or
768translation of the image.
769
770....
771image.svg:-0x0-30+10@30/3x/2y
772....
773
774Transposing is done last of all, after everything else.
775
776....
777image.svg:!-0x0-30+10@30/3x/2y
778....
779
780== MODULES
781
782A module is a separate program which runs as a separate Unix process but
783transmits commands to fvwm to execute. Users can write their own modules
784to do any weird or bizarre manipulations without bloating or affecting
785the integrity of fvwm itself.
786
787Modules must be spawned by fvwm so that it can set up two pipes for fvwm
788and the module to communicate with. The pipes are already open for the
789module when it starts and the file descriptors for the pipes are
790provided as command line arguments.
791
792Modules can be spawned by fvwm at any time during the X session by use
793of the *Module* command. Modules can exist for the duration of the X
794session, or can perform a single task and exit. If the module is still
795active when fvwm is told to quit, then fvwm closes the communication
796pipes and waits to receive a SIGCHLD from the module, indicating that it
797has detected the pipe closure and has exited. If modules fail to detect
798the pipe closure fvwm exits after approximately 30 seconds anyway. The
799number of simultaneously executing modules is limited by the operating
800system's maximum number of simultaneously open files, usually between 60
801and 256.
802
803Modules simply transmit commands to the fvwm command engine. Commands
804are formatted just as in the case of a mouse binding in the _config_
805setup file. Certain auxiliary information is also transmitted, as in the
806sample module *FvwmButtons*.
807
808Please refer to the *Module Commands* section for details.
809
810== ICCCM COMPLIANCE
811
812Fvwm attempts to be ICCCM 2.0 compliant. Check
813_http://tronche.com/gui/x/icccm/_ for more info. In addition, ICCCM
814states that it should be possible for applications to receive any
815keystroke, which is not consistent with the keyboard shortcut approach
816used in fvwm and most other window managers. In particular you cannot
817have the same keyboard shortcuts working with your fvwm and another fvwm
818running within Xnest (a nested X server running in a window). The same
819problem exists with mouse bindings.
820
821The ICCCM states that windows possessing the property
822
823....
824WM_HINTS(WM_HINTS):
825Client accepts input or input focus: False
826....
827
828should not be given the keyboard input focus by the window manager.
829These windows can take the input focus by themselves, however. A number
830of applications set this property, and yet expect the window manager to
831give them the keyboard focus anyway, so fvwm provides a window style,
832_Lenience_, which allows fvwm to overlook this ICCCM rule. Even with
833this window style it is not guaranteed that the application accepts
834focus.
835
836The differences between ICCCM 1.1 and 2.0 include the ability to take
837over from a running ICCCM 2.0 compliant window manager; thus
838
839....
840fvwm; vi ~/.fvwm/config; fvwm -replace
841....
842
843resembles the *Restart* command. It is not exactly the same, since
844killing the previously running wm may terminate your X session, if the
845wm was started as the last client in your _.Xclients_ or _.Xsession_
846file.
847
848Further additions are support for client-side colormap installation (see
849the ICCCM for details) and the urgency hint. Clients can set this hint
850in the WM_HINTS property of their window and expect the window manager
851to attract the user's attention to the window. Fvwm has two re-definable
852functions for this purpose, "UrgencyFunc" and "UrgencyDoneFunc", which
853are executed when the flag is set/cleared. Their default definitions
854are:
855
856....
857AddToFunc UrgencyFunc
858 + I Iconify off
859 + I FlipFocus
860 + I Raise
861 + I WarpToWindow !raise 5p 5p
862AddToFunc UrgencyDoneFunc
863 + I Nop
864....
865
866== GNOME COMPLIANCE
867
868Fvwm attempts to be GNOME (version 1) compliant. Check
869_http://www.gnome.org_ for what that may mean. To disable GNOME hints
870for some or all windows, the _GNOMEIgnoreHints_ style can be used.
871
872== EXTENDED WINDOW MANAGER HINTS
873
874Fvwm attempts to respect the extended window manager hints (ewmh or EWMH
875for short) specification:
876_https://specifications.freedesktop.org/wm-spec/wm-spec-1.3.html_ and
877some extensions of this specification. This allows fvwm to work with KDE
878version >= 2, GNOME version 2 and other applications which respect this
879specification (any application based on _GTK+_ version 2). Applications
880which respect this specification are called ewmh compliant applications.
881
882This support is configurable with styles and commands. These styles and
883commands have EWMH as the prefix (so you can find them easily in this
884man page).
885
886There is a new Context 'D' for the *Key*, *PointerKey*, *Mouse*
887commands. This context is for desktop applications (such as kdesktop and
888Nautilus desktop).
889
890When a compliant taskbar asks fvwm to activate a window (typically when
891you click on a button which represents a window in such a taskbar), then
892fvwm calls the complex function *EWMHActivateWindowFunc* which by
893default is Iconify Off, Focus and Raise. You can redefine this function.
894For example:
895
896....
897DestroyFunc EWMHActivateWindowFunc
898AddToFunc EWMHActivateWindowFunc I Iconify Off
899+ I Focus
900+ I Raise
901+ I WarpToWindow 50 50
902....
903
904additionally warps the pointer to the center of the window.
905
906The EWMH specification introduces the notion of Working Area. Without
907ewmh support the Working Area is the full visible screen (or all your
908screens if you have a multi head setup with RandR). However, compliant
909applications (such as a panel) can ask to reserve space at the edge of
910the screen. If this is the case, the Working Area is your full visible
911screen minus these reserved spaces. If a panel can be hidden by clicking
912on a button the Working Area does not change (as you can unhide the
913panel at any time), but the Dynamic Working Area is updated: the space
914reserved by the panel is removed (and added again if you pop up the
915panel). The Dynamic Working Area may be used when fvwm places or
916maximizes a window. To know if an application reserves space you can
917type "xprop | grep _NET_WM_STRUT" in a terminal and select the
918application. If four numbers appear then these numbers define the
919reserved space as explained in the *EwmhBaseStruts* command.
920
921== MWM COMPATIBILITY
922
923Fvwm provides options to emulate Motif Window Manager (Mwm) as well as
924possible. Please refer to the *Emulate* command as well as to the Mwm
925specific options of the *Style* and *MenuStyle* commands for details.
926
927== OPEN LOOK AND XVIEW COMPATIBILITY
928
929Fvwm supports all the Open Look decoration hints (except pushpins).
930Should you use any such application, please add the following line to
931your config:
932
933....
934Style * OLDecor
935....
936
937Most (perhaps all) Open Look applications have a strange notion of
938keyboard focus handling. Although a lot of work went into fvwm to work
939well with these, you may still encounter problems. It is recommended to
940use the _NeverFocus_ focus policy and the _Lenience_ style for all such
941applications (the windows still get the focus):
942
943....
944Style <application name> NeverFocus, Lenience
945....
946
947But in case you can not live with that focus policy, you can try using
948one of the other focus policies in combination with the _Lenience_
949style:
950
951....
952Style <application name> MouseFocus, Lenience
953Style <application name> SloppyFocus, Lenience
954Style <application name> ClickToFocus, Lenience
955....
956
957== CONFIGURATION
958
959=== Configuration Files
960
961The configuration file is used to describe mouse and button bindings,
962colors, the virtual display size, and related items. The initialization
963configuration file is typically called _config_ (or _.fvwm2rc_). By
964using the *Read* command, it is easy to read in new configuration files
965as you go.
966
967Lines beginning with '#' are ignored by fvwm. Lines starting with '*'
968are expected to contain module configuration commands (rather than
969configuration commands for fvwm itself). Like in shell scripts embedded
970newlines in a configuration file line can be quoted by preceding them
971with a backslash. All lines linked in this fashion are treated as a
972single line. The newline itself is ignored.
973
974Fvwm makes no distinction between configuration commands and action
975commands, so anything mentioned in the fvwm commands section can be
976placed on a line by itself for fvwm to execute as it reads the
977configuration file, or it can be placed as an executable command in a
978menu or bound to a mouse button or a keyboard key. It is left as an
979exercise for the user to decide which function make sense for
980initialization and which ones make sense for run-time.
981
982=== Supplied Configuration
983
984A sample configuration file, is supplied with the fvwm distribution. It
985is well commented and can be used as a source of examples for fvwm
986configuration. It may be copied from _/usr/local/share/fvwm/config_
987file.
988
989Alternatively, the built-in menu (accessible when no configuration file
990is found) has options to create an initial config file for the user.
991
992== FONTS
993
994=== Font names and font loading
995
996The fonts used for the text of a window title, icon titles, menus and
997geometry window can be specified by using the Font and IconFont *Style*,
998the Font *MenuStyle* and the *DefaultFont* commands. Also, all the
999Modules which use text have configuration command(s) to specify font(s).
1000All these styles and commands take a font name as an argument. This
1001section explains what is a font name for fvwm and which fonts fvwm
1002loads.
1003
1004First, you can use what we can call a usual font name, for example,
1005
1006....
1007-adobe-courier-bold-r-normal--10-100-75-75-m-60-ISO8859-1
1008-adobe-courier-bold-r-normal--10-*
1009-*-fixed-medium-o-normal--14-*-ISO8859-15
1010....
1011
1012That is, you can use an X Logical Font Description (XLFD for short).
1013Then the "first" font which matches the description is loaded and used.
1014This "first" font depends of your font path and also of your locale.
1015Fonts which match the locale charset are loaded in priority order. For
1016example with
1017
1018
1019....
1020-adobe-courier-bold-r-normal--10-*
1021....
1022
1023
1024if the locale charset is ISO8859-1, then fvwm tries to load a font which
1025matches
1026
1027....
1028-adobe-courier-bold-r-normal--10-*-ISO8859-1
1029....
1030
1031with the locale charset ISO8859-15 fvwm tries to load
1032
1033....
1034-adobe-courier-bold-r-normal--10-*-ISO8859-15.
1035....
1036
1037A font name can be given as an extended XLFD. This is a comma separated
1038list of (simple) XLFD font names, for example:
1039
1040....
1041-adobe-courier-bold-r-normal--14-*,-*-courier-medium-r-normal--14-*
1042....
1043
1044Each simple font name is tried until a matching font with the locale
1045charset is found and if this fails each simple font name is tried
1046without constraint on the charset.
1047
1048More details on the XLFD can be found in the X manual page, the X
1049Logical Font Description Conventions document (called xlfd) and the
1050XLoadFont and XCreateFontSet manual pages. Some useful font utilities
1051are: xlsfonts, xfontsel, xfd and xset.
1052
1053If you have Xft support you can specify an Xft font name (description)
1054of a true type (or Type1) font prefixed by "xft:", for example:
1055
1056....
1057"xft:Luxi Mono"
1058"xft:Luxi Mono:Medium:Roman:size=14:encoding=iso8859-1"
1059....
1060
1061The "first" font which matches the description is loaded. This first
1062font depends on the XftConfig configuration file with Xft1 and on the
1063/etc/fonts/fonts.conf file with Xft2. One may read the Xft manual page
1064and the fontconfig man page with Xft2. The first string which follows
1065"xft:" is always considered as the family. With the second example Luxi
1066Mono is the Family (Other XFree TTF families: "Luxi Serif", "Luxi
1067Sans"), Medium is the Weight (other possible weights: Light, DemiBold,
1068Bold, Black), Roman is the slant or the style (other possibilities:
1069Regular, Oblique, Italic) size specifies the point size (for a pixel
1070size use pixelsize=), encoding allows for enforce a charset (iso8859-1
1071or iso10646-1 only; if no encoding is given the locale charset is
1072assumed). An important parameter is "minspace=bool" where bool is True
1073or False. If bool is False (the default?) Xft gives a greater font
1074height to fvwm than if bool is True. This may modify text placement,
1075icon and window title height, line spacing in menus and *FvwmIdent*,
1076button height in some fvwm modules ...etc. With a LCD monitor you may
1077try to add "rgba=mode" where mode is either rgb, bgr, vrgb or vbgr to
1078enable subpixel rendering. The best mode depends on the way your LCD
1079cells are arranged. You can pass other specifications in between ":", as
1080"foundry=foundry_name", "spacing=type" where type can be monospace,
1081proportional or charcell, "charwidth=integer", "charheight=integer" or
1082"antialias=bool" where bool is True or False. It seems that these
1083parameters are not always taken in account.
1084
1085To determine which Xft fonts are really loaded you can export
1086XFT_DEBUG=1 before starting fvwm and take a look to the error log. With
1087Xft2 you may use fc-list to list the available fonts. Anyway, Xft
1088support is experimental (from the X and the fvwm point of view) and the
1089quality of the rendering depends on number of parameters (the XFree and
1090the freetype versions and your video card(s)).
1091
1092After an Xft font name you can add after a ";" an XLFD font name (simple
1093or extended) as:
1094
1095....
1096xft:Verdana:pixelsize=14;-adobe-courier-bold-r-normal--14-*
1097....
1098
1099then, if either loading the Xft font fails or fvwm has no Xft support,
1100fvwm loads the font "-adobe-courier-bold-r-normal--14-*". This allows
1101for writing portable configuration files.
1102
1103=== Font and string encoding
1104
1105Once a font is loaded, fvwm finds its encoding (or charset) using its
1106name (the last two fields of the name). fvwm assumes that the strings
1107which are displayed with this font use this encoding (an exception is
1108that if an iso10646-1 font is loaded, then UTF-8 is assumed for string
1109encoding). In a normal situation, (i) a font is loaded by giving a font
1110name without specifying the encoding, (ii) the encoding of the loaded
1111font is the locale encoding, and then (iii) the strings in the fvwm
1112configuration files should use the locale encoding as well as the window
1113and icon name. With Xft the situation is bit different as Xft supports
1114only iso10646-1 and iso8859-1. If you do not specify one of these
1115encodings in the Xft font name, then fvwm does strings conversion using
1116(iii). Note that with multibyte fonts (and in particular with "CJK"
1117fonts) for good text rendering, the locale encoding should be the
1118charset of the font.
1119
1120To override the previous rules, it is possible to specify the string
1121encoding in the beginning of a font description as follow:
1122
1123....
1124StringEncoding=enc:_full_font_name_
1125....
1126
1127where _enc_ is an encoding supported by fvwm (usually font name charset
1128plus some unicode encodings: UTF-8, USC-2, USC-4 and UTF-16).
1129
1130For example, you may use an iso8859-1 locale charset and have an
1131*FvwmForm* in Russian using koi8-r encoding. In this case, you just have
1132to ask *FvwmForm* to load a koi8-r font by specifying the encoding in
1133the font name. With a multibyte language, (as multibyte font works well
1134only if the locale encoding is the charset of the font), you should use
1135an iso10646-1 font:
1136
1137....
1138StringEncoding=jisx0208.1983-0:-*-fixed-medium-r-*-ja-*-iso10646-1
1139....
1140
1141or
1142
1143....
1144"StringEncoding=jisx0208.1983-0:xft:Bitstream Cyberbit"
1145....
1146
1147if your *FvwmForm* configuration uses jisx0208.1983-0 encoding. Another
1148possibility is to use UTF-8 encoding for your *FvwmForm* configuration
1149and use an iso10646-1 font:
1150
1151....
1152-*-fixed-medium-r-*-ja-*-iso10646-1
1153....
1154
1155or
1156
1157....
1158"StringEncoding=UTF-8:xft:Bitstream Cyberbit"
1159....
1160
1161
1162or equivalently
1163
1164....
1165"xft:Bitstream Cyberbit:encoding=iso10646-1"
1166....
1167
1168In general iso10646-1 fonts together with UTF-8 string encoding allows
1169the display of any characters in a given menu, *FvwmForm* etc.
1170
1171More and more, unicode is used and text files use UTF-8 encoding.
1172However, in practice the characters used range over your locale charset
1173(this is the case when you generate a menu with fvwm-menu-desktop with
1174recent versions of KDE and GNOME). For saving memory (an iso10646-1 font
1175may have a very large number of characters) or because you have a pretty
1176font without an iso10646-1 charset, you can specify the string encoding
1177to be UTF-8 and use a font in the locale charset:
1178
1179....
1180StringEncoding=UTF-8:-*-pretty_font-*-12-*
1181....
1182
1183In most cases, fvwm correctly determines the encoding of the font.
1184However, some fonts do not end with valid encoding names. When the font
1185name isn't normal, for example:
1186
1187....
1188-misc-fixed-*--20-*-my_utf8-36
1189....
1190
1191you need to add the encoding after the font name using a slash as a
1192delimiter. For example:
1193
1194
1195....
1196MenuStyle * Font -misc-fixed-*--20-*-my_utf8-36/iso10646-1
1197....
1198
1199If fvwm finds an encoding, fvwm uses the iconv system functions to do
1200conversion between encodings. Unfortunately, there are no standards. For
1201conversion between iso8859-1 and UTF-8: a GNU system uses "ISO-8859-1"
1202and other systems use "iso881" to define the converters (these two names
1203are supported by fvwm). Moreover, in some cases it may be necessary to
1204use machine specific converters. So, if you experience problems you can
1205try to get information on your iconv implementation ("man iconv" may
1206help) and put the name which defines the converter between the font
1207encoding and UTF-8 at the end of the font name after the encoding hint
1208and a / (another possible solution is to use GNU libiconv). For example
1209use:
1210
1211....
1212Style * Font -misc-fixed-*--14-*-iso8859-1/*/latin1
1213....
1214
1215to use latin1 for defining the converter for the iso8859-1 encoding. The
1216"*" in between the "/" says to fvwm to determine the encoding from the
1217end of the font name. Use:
1218
1219....
1220Style * Font \
1221-misc-fixed-*--14-*-local8859-6/iso8859-6/local_iso8859_6_iconv
1222....
1223
1224to force fvwm to use the font with iso8859-6 as the encoding (this is
1225useful for bi-directionality) and to use local_iso8859_6_iconv for
1226defining the converters.
1227
1228=== Font Shadow Effects
1229
1230Fonts can be given 3d effects. At the beginning of the font name (or
1231just after a possible StringEncoding specification) add
1232
1233....
1234Shadow=size [offset] [directions]]:
1235....
1236
1237_size_ is a positive integer which specifies the number of pixels of
1238shadow. _offset_ is an optional positive integer which defines the
1239number of pixels to offset the shadow from the edge of the character.
1240The default offset is zero. _directions_ is an optional set of
1241directions the shadow emanates from the character. The _directions_ are
1242a space separated list of fvwm directions:
1243
1244_N_, _North_, _Top_, _t_, _Up_, _u_, _-_
1245
1246_E_, _East_, _Right_, _r_, _Right_, _r_, _]_
1247
1248_S_, _South_, _Bottom_, _b_, _Down_, _d_, ___
1249
1250_W_, _West_, _Left_, _l_, _Left_, _l_, _[_
1251
1252_NE_, _NorthEast_, _TopRight_, _tr_, _UpRight_, _ur_, _^_
1253
1254_SE_, _SouthEast_, _BottomRight_, _br_, _DownRight_, _dr_, _>_
1255
1256_SW_, _SouthWest_, _BottomLeft_, _bl_, _DownLeft_, _dl_, _v_
1257
1258_NW_, _NorthWest_, _TopLeft_, _tl_, _UpLeft_, _ul_, _<_
1259
1260_C_, _Center_, _Centre_, _._
1261
1262A shadow is displayed in each given direction. _All_ is equivalent to
1263all the directions. The default _direction_ is _BottomRight_. With the
1264_Center_ direction, the shadow surrounds the whole string. Since this is
1265a super set of all other directions, it is a waste of time to specify
1266this along with any other directions.
1267
1268The shadow effect only works with colorsets. The color of the shadow is
1269defined by using the _fgsh_ option of the *Colorset* command. Please
1270refer to the *Colorsets* section for details about colorsets.
1271
1272Note: It can be difficult to find the font, _fg_, _fgsh_ and _bg_ colors
1273to make this effect look good, but it can look quite good.
1274
1275== BI-DIRECTIONAL TEXT
1276
1277Arabic and Hebrew text require bi-directional text support to be
1278displayed correctly, this means that logical strings should be converted
1279before their visual presentation, so left-to-right and right-to-left
1280sub-strings are determined and reshuffled. In fvwm this is done
1281automatically in window titles, menus, module labels and other places if
1282the fonts used for displaying the text are of one of the charsets that
1283require _bidi_ (bi-directional) support. For example, this includes
1284iso8859-6, iso8859-8 and iso10646-1 (unicode), but not other iso8859-*
1285fonts.
1286
1287This bi-directional text support is done using the _fribidi_ library
1288compile time option, see _INSTALL.fvwm_.
1289
1290== KEYBOARD SHORTCUTS
1291
1292Almost all window manager operations can be performed from the keyboard
1293so mouse-less operation should be possible. In addition to scrolling
1294around the virtual desktop by binding the *Scroll* command to
1295appropriate keys, *Popup*, *Move*, *Resize*, and any other command can
1296be bound to keys. Once a command is started the pointer is moved by
1297using the up, down, left, and right arrows, and the action is terminated
1298by pressing return. Holding down the Shift key causes the pointer movement to
1299go in larger steps and holding down the control key causes the pointer movement
1300to go in smaller steps. Standard emacs and vi cursor movement controls can be
1301used instead of the arrow keys.
1302
1303== SESSION MANAGEMENT
1304
1305Fvwm supports session management according to the X Session Management
1306Protocol. It saves and restores window position, size, stacking order,
1307desk, stickiness, shadiness, maximizedness, iconifiedness for all
1308windows. Furthermore, some global state is saved.
1309
1310Fvwm doesn't save any information regarding styles, decors, functions or
1311menus. If you change any of these resources during a session (e.g. by
1312issuing *Style* commands or by using various modules), these changes are
1313lost after saving and restarting the session. To become permanent, such
1314changes have to be added to the configuration file.
1315
1316Note further that the current implementation has the following anomaly
1317when used on a multi-screen display: Starting fvwm for the first time,
1318fvwm manages all screens by forking a copy of itself for each screen.
1319Every copy knows its parent and issuing a *Quit* command to any instance
1320of fvwm kills the master and thus all copies of fvwm. When you save and
1321restart the session, the session manager brings up a copy of fvwm on
1322each screen, but this time they are started as individual instances
1323managing one screen only. Thus a *Quit* kills only the copy it was sent
1324to. This is probably not a very serious problem, since with session
1325management, you are supposed to quit a session through the session
1326manager anyway. If it is really needed,
1327
1328....
1329Exec exec killall fvwm
1330....
1331
1332still kills all copies of fvwm. Your system must have the *killall*
1333command though.
1334
1335== BOOLEAN ARGUMENTS
1336
1337A number of commands take one or several boolean arguments. These take a
1338few equivalent inputs: "yes", "on", "true", "t" and "y" all evaluate to
1339true while "no", "off", "false", "f" and "n" evaluate to false. Some
1340commands allow "toggle" too which means that the feature is disabled if
1341it is currently enabled and vice versa.
1342
1343== BUILTIN KEY AND MOUSE BINDINGS
1344
1345The following commands are built-in to fvwm:
1346
1347....
1348Key Help R A Popup MenuFvwmRoot
1349Key F1 R A Popup MenuFvwmRoot
1350Key Tab A M WindowList Root c c NoDeskSort
1351Key Escape A MC EscapeFunc
1352
1353Mouse 1 R A Menu MenuFvwmRoot
1354Mouse 1 T   A FuncFvwmRaiseLowerX Move
1355Mouse 1 FS  A FuncFvwmRaiseLowerX Resize
1356Mouse 2 FST A FuncFvwmRaiseLowerX Move
1357
1358AddToFunc FuncFvwmRaiseLowerX
1359+ I Raise
1360+ M $0
1361+ D Lower
1362....
1363
1364
1365The Help and F1 keys invoke a built-in menu that fvwm creates. This is
1366primarily for new users that have not created their own configuration file.
1367Either key on the root (background) window pops up an menu to help you get
1368started.
1369
1370The Tab key pressed anywhere with the Alt key (same as the key on PC
1371keyboards) held down pop-ups a window list.
1372
1373Mouse button 1 on the title-bar or side frame can move, raise or lower a
1374window.
1375
1376Mouse button 1 on the window corners can resize, raise or lower a
1377window.
1378
1379You can override or remove these bindings. To remove the window list
1380binding, use this:
1381
1382....
1383Key Tab A M -
1384....
1385
1386== COMMAND EXECUTION
1387
1388=== Module and Function Commands
1389
1390If fvwm encounters a command that it doesn't recognize, it checks to see
1391if the specified command should have been
1392
1393....
1394Function (rest of command)
1395....
1396
1397or
1398
1399....
1400Module (rest of command)
1401....
1402
1403This allows complex functions or modules to be invoked in a manner which
1404is fairly transparent to the configuration file.
1405
1406Example: the _config_ file contains the line
1407
1408....
1409HelpMe
1410....
1411
1412Fvwm looks for an fvwm command called "HelpMe", and fails. Next it looks
1413for a user-defined complex function called "HelpMe". If no such function
1414exists, fvwm tries to execute a module called "HelpMe".
1415
1416=== Delayed Execution of Commands
1417
1418**Note**: There are many commands that affect look and feel of specific,
1419some or all windows, like *Style*, *Mouse*, *Colorset*, *TitleStyle* and
1420many others. For performance reasons such changes are not applied
1421immediately but only when fvwm is idle, i.e. no user interaction or
1422module input is pending. Specifically, new *Style* options that are set
1423in a function are not applied until after the function has completed.
1424This can sometimes lead to unwanted effects.
1425
1426To force that all pending changes are applied immediately, use the
1427*UpdateStyles*, *Refresh* or *RefreshWindow* commands.
1428
1429== QUOTING
1430
1431Quotes are required only when needed to make fvwm consider two or more
1432words to be a single argument. Unnecessary quoting is allowed. If you
1433want a quote character in your text, you must escape it by using the
1434backslash character. For example, if you have a pop-up menu called
1435"Window-Ops", then you do not need quotes:
1436
1437....
1438Popup Window-Ops
1439....
1440
1441but if you replace the dash with a space, then you need quotes:
1442
1443....
1444Popup "Window Ops"
1445....
1446
1447The supported quoting characters are double quotes, single quotes and
1448reverse single quotes. All three kinds of quotes are treated in the same
1449way. Single characters can be quoted with a preceding backslash. Quoting
1450single characters works even inside other kinds of quotes.
1451
1452== COMMAND EXPANSION
1453
1454Whenever an fvwm command line is executed, fvwm performs parameter
1455expansion. A parameter is a '$' followed by a word enclosed in brackets
1456($[...]) or a single special character. If fvwm encounters an unquoted
1457parameter on the command line it expands it to a string indicated by the
1458parameter name. Unknown parameters are left untouched. Parameter
1459expansion is performed before quoting. To get a literal '$' use "$$".
1460
1461If a command is prefixed with a '-' parameter expansion isn't performed.
1462This applies to the command immediately following the '-', in which the
1463expansion normally would have taken place. When uesed together with
1464other prefix commands it must be added before the other prefix.
1465
1466Example:
1467
1468....
1469Pick -Exec exec xmessage '$[w.name]'
1470....
1471
1472opens an xmessage dialog with "$[w.name]" unexpanded.
1473
1474The longer variables may contain additional variables inside the name,
1475which are expanded before the outer variable.
1476
1477In earlier versions of fvwm, some single letter variables were
1478supported. It is deprecated now, since they cause a number of problems.
1479You should use the longer substitutes instead.
1480
1481Example:
1482
1483....
1484# Print the current desk number, horizontal page number
1485# and the window's class (unexpanded here, no window).
1486Echo $[desk.n] $[page.nx] $[w.class]
1487....
1488
1489Note: If the command is called outside a window context, it prints
1490"$[w.class]" instead of the class name. It is usually not enough to have
1491the pointer over a window to have a context window. To force using the
1492window with the focus, the *Current* command can be used:
1493
1494....
1495Current Echo $[desk.n] $[page.nx] $[w.class]
1496....
1497
1498The parameters known by fvwm are:
1499
1500$$::
1501	A literal '$'.
1502
1503$.::
1504	The absolute directory of the currently Read file. Intended for creating
1505	relative and relocatable configuration trees. If used outside of any
1506	read file, the returned value is '.'.
1507
1508$0 to $9::
1509	The positional parameters given to a complex function (a function that
1510	has been defined with the *AddToFunc* command). "$0" is replaced with
1511	the first parameter, "$1" with the second parameter and so on. If the
1512	corresponding parameter is undefined, the "$..." is deleted from the
1513	command line.
1514
1515$*::
1516	All positional parameters given to a complex function. This includes
1517	parameters that follow after "$9".
1518
1519$[_n_]::
1520
1521The _n_:th positional parameter given to a complex function, counting
1522from 0. If the corresponding parameter is undefined, the "$[_n_]" is
1523deleted from the command line. The parameter is expanded unquoted.
1524
1525$[_n_-_m_]::
1526	The positional parameters given to a complex function, starting with
1527	parameter _n_ and ending with parameter _m_. If all the corresponding
1528	parameters are undefined, the "$[...]" is deleted from the command line.
1529	If only some of the parameters are defined, all defined parameters are
1530	expanded, and the remaining silently ignored. All parameters are
1531	expanded unquoted.
1532
1533$[_n_-]::
1534	All the positional parameters given to a complex function, starting with
1535	parameter _n_. If all the corresponding parameters are undefined, the
1536	"$[...]" is deleted from the command line. All parameters are expanded
1537	unquoted.
1538
1539$[*]::
1540	All the positional parameters given to a complex function. This is
1541	equivalent of $[0-].
1542
1543$[version.num]::
1544	The version number, like "2.6.0".
1545
1546$[version.info]::
1547	The version info, which contains the SHA of the latest commit (if
1548	compiled from git), or "(relesaed)" if a compiled from a release
1549	tarball.
1550
1551$[version.line]::
1552	The first line printed by the --version command line option.
1553
1554$[vp.x] $[vp.y] $[vp.width] $[vp.height]::
1555	Either coordinate or the width or height of the current viewport.
1556
1557$[wa.x] $[wa.y] $[wa.width] $[wa.height]::
1558	Either coordinate or the width or height of the EWMH working area.
1559
1560$[dwa.x] $[dwa.y] $[dwa.width] $[dwa.height]::
1561	Either coordinate or the width or height of the dynamic EWMH working area.
1562
1563$[desk.n]::
1564	The current desk number.
1565
1566$[desk.name<n>]::
1567	These parameters are replaced with the name of the desktop number <n>
1568	that is defined with the *DesktopName* command. If no name is defined,
1569	then the default name is returned.
1570
1571$[desk.width] $[desk.height]::
1572	The width or height of the whole desktop, i.e. the width or height
1573	multiplied by the number of pages in x or y direction.
1574
1575$[desk.pagesx] $[desk.pagesy]::
1576	The number of total pages in a desk in x or y direction. This is the
1577	same as the values set by *DesktopSize*.
1578
1579$[page.nx] $[page.ny]::
1580	The current page numbers, by X and Y axes, starting from 0. _page_ is
1581	equivalent to _area_ in the GNOME terminology.
1582
1583$[w.id]::
1584	The window-id (expressed in hex, e.g. 0x10023c) of the window the
1585	command was called for or "$[w.id]" if no window is associated with the
1586	command.
1587
1588$[w.name] $[w.iconname] $[w.class] $[w.resource] $[w.visiblename] $[w.iconfile] $[w.miniiconfile] $[w.iconfile.svgopts] $[w.miniiconfile.svgopts]::
1589	The window's name, icon name, resource class and resource name, visible
1590	name, file name of its icon or mini icon defined with the _Icon_ or
1591	_MiniIcon_ style (including the full path if the file was found on
1592	disk), and (if fvwm is compiled with SVG support) the icon or mini icon
1593	svg rendering options (including the leading colon), or unexpanded
1594	"$[w.<attribute>]" string if no window is associated with the command.
1595+
1596Note, the first 5 variables may include any kind of characters, so these
1597variables are quoted. It means that the value is surrounded by single
1598quote characters and any contained single quote is prefixed with a
1599backslash. This guarantees that commands like:
1600+
1601....
1602Style $[w.resource] Icon norm/network.png
1603....
1604+
1605work correctly, regardless of any special symbols the value may contain,
1606like spaces and different kinds of quotes.
1607+
1608In the case of the window's visible name, this is the value returned
1609from the literal title of the window shown in the titlebar. Typically
1610this will be the same as $[w.name] once expanded, although in the case
1611of using _IndexedWindowName_ then this is more useful a distinction, and
1612allows for referencing the specific window by its visible name for
1613inclusion in things like *Style* commands.
1614
1615$[w.x] $[w.y] $[w.width] $[w.height]::
1616	Either coordinate or the width or height of the current window if it is
1617	not iconified. If no window is associated with the command or the window
1618	is iconified, the string is left as is.
1619
1620$[w.pagex] $[w.pagey]::
1621	The X or Y page the window is on.
1622
1623$[w.desk]::
1624	The number of the desk on which the window is shown. If the window is
1625	sticky the current desk number is used.
1626
1627$[w.layer]::
1628	The layer of the window.
1629
1630$[w.screen]::
1631	The screen name the window is on. If RandR is not present, this does not
1632	expand.
1633
1634$[cw.x] $[cw.y] $[cw.width] $[cw.height]::
1635	These work like $[w.…] but return the geometry of the client part of the
1636	window. In other words: the border and title of the window is not taken
1637	into account.
1638
1639$[i.x], $[it.x], $[ip.x] $[i.y], $[it.y], $[ip.y] $[i.width], $[it.width], $[ip.width] $[i.height], $[it.height], $[ip.height]::
1640	These work like $[w.…] but return the geometry of the icon ($[i.…]), the
1641	icon title ($[it.…]) or the icon picture ($[ip.…]).
1642
1643$[pointer.x] $[pointer.y]::
1644	These return the position of the pointer on the screen. If the pointer
1645	is not on the screen, these variables are not expanded.
1646
1647$[pointer.wx] $[pointer.wy]::
1648	These return the position of the pointer in the selected window. If the
1649	pointer is not on the screen, the window is iconified or no window is
1650	selected, these variables are not expanded.
1651
1652$[pointer.cx] $[pointer.cy]::
1653	These return the position of the pointer in the client portion of the
1654	selected window. If the pointer is not on the screen, the window is
1655	shaded or iconified or no window is selected, these variables are not
1656	expanded.
1657
1658$[pointer.screen]::
1659	The screen name the pointer is currently on. No expansion if RandR is
1660	not enabled.
1661+
1662This command is deprecated; use $[monitor.current] instead.
1663
1664$[monitor.<n>.x], $[monitor.<n>.y], $[monitor.<n>.width], $[monitor.<n>.height], $[monitor.<n>.desk], $[monitor.<n>.pagex], $[monitor.<n>.pagey] $[monitor.primary], $[monitor.current], $[monitor.output], $[monitor.count], $[monitor.<n>.prev_desk], $[monitor.<n>.prev_pagex], $[monitor.<n>.prev_pagey]::
1665	Returns information about the selected monitor. These can be nested, for
1666	example: $[monitor.$[monitor.primary].width]
1667+
1668<n> should be a valid xrandr(1) output name.
1669+
1670"x" returns the monitor's x position; "y" returns the monitor's y
1671position; "width" returns the monitor's width (in pixels); "height"
1672returns the monitor's height (in pixels)
1673+
1674"current" is the same as the deprecated $[screen.pointer] variable; the
1675monitor which has the mouse pointer.
1676+
1677"count" returns the number of active monitors.
1678+
1679"desk" returns the current desk displayed on the referenced monitor.
1680+
1681"pagex" returns the X page on the referenced monitor.
1682+
1683"pagey" returns the Y page of the referenced monitor.
1684+
1685"primary" is the name of the output set as primary via xrandr(1).
1686+
1687"prev_desk" returns the previous desk on the referenced monitor.
1688+
1689"prev_pagex" returns the previous X page on the referenced monitor.
1690+
1691"prev_pagey" retuns the previous Y page on the referenced monitor.
1692
1693$[screen]::
1694	The screen number fvwm is running on. Useful for setups with multiple
1695	screens.
1696
1697$[screen.count]::
1698	The total number of screens detected. Assumes RandR.
1699+
1700This is deprecated; use $[monitor.count] instead.
1701
1702
1703$[fg.cs<n>] $[bg.cs<n>] $[hilight.cs<n>] $[shadow.cs<n>] $[fgsh.cs<n>]::
1704	These parameters are replaced with the name of the foreground (fg),
1705	background (bg), hilight (hilight), shadow (shadow), or the font shadow
1706	(fgsh) color that is defined in colorset <n> (replace <n> with zero or a
1707	positive integer). For example "$[fg.cs3]" is expanded to the name of
1708	the foreground color of colorset 3 (in rgb:rrrr/gggg/bbbb form).
1709+
1710If .lighten<p> or .darken<p> is appended to the parameters, they are
1711instead replaced with a color that is lighter or darker than the one
1712defined in colorset <n> by a percentage value <p> (between 0 and 100).
1713For example "$[bg.cs3.lighten15]" is expanded to the background color of
1714colorset 3 and then lightened 15% (in rgb:rrrr/gggg/bbbb form).
1715+
1716If .hash is appened to the end the color output will use #rrggbb form
1717(instead of rgb:rrrr/gggg/bbbb). For example, $[bg.cs3.hash] or
1718$[bg.cs3.lighten15.hash].
1719+
1720Please refer to the *Colorsets* section for details about colorsets.
1721
1722$[schedule.last]::
1723	This is replaced by the id of the last command that was scheduled with
1724	the *Schedule* command, even if this command was already executed.
1725
1726$[schedule.next]::
1727	This is replaced by the id the next command used with *Schedule* will
1728	get (unless a different id is specified explicitly).
1729
1730$[cond.rc]::
1731	The return code of the last conditional command. This variable is only
1732	valid inside a function and can not be used in a conditional command.
1733	Please refer to the section *Conditional Commands* in the command list.
1734
1735$[func.context]::
1736	The context character of the running command as used in the *Mouse*,
1737	*Key* or *PointerKey* command. This is useful for example with:
1738+
1739....
1740Mouse 3 FS N WindowShade $$[func.context]
1741....
1742
1743$[debuglog.state]::
1744	Either _0_ (debug log closed) or _1_. Indicates the current state of
1745	debugging and logging facility.
1746
1747$[gt._str_]::
1748	return the translation of _str_ by looking in the current locale
1749	catalogs. If no translation is found _str_ is returned as is. See the
1750	*LocalePath* command.
1751
1752$[infostore._key_]::
1753	Return the value of the item stored in the InfoStore at the given _key_.
1754	If no key is present, the unexpanded string is returned.
1755
1756$[...]::
1757	If the string within the braces is neither of the above, fvwm tries to
1758	find an environment variable with this name and replaces its value if
1759	one is found (e.g. "$[PAGER]" could be replaced by "more"). Otherwise
1760	the string is left as is.
1761+
1762Some examples can be found in the description of the *AddToFunc*
1763command.
1764
1765== SCRIPTING & COMPLEX FUNCTIONS
1766
1767To achieve the more complex effects, fvwm has a number of commands that
1768improve its scripting abilities. Scripts can be read from a file with
1769*Read*, from the output of a command with *PipeRead* or written as a
1770complex function with the *AddToFunc* command. For the curious, section
17717 of the fvwm FAQ shows some real life applications of scripting. Please
1772refer to the sections *User Functions and Shell Commands* and
1773*Conditional Commands* for details. A word of warning: during execution
1774of complex functions, fvwm needs to take all input from the mouse
1775pointer (the pointer is "grabbed" in the slang of X). No other programs
1776can receive any input from the pointer while a function is run. This can
1777confuse some programs. For example, the xwd program refuses to make
1778screen shots when run from a complex function. To achieve the same
1779functionality you can use the *Read* or *PipeRead* command instead.
1780
1781== LIST OF FVWM COMMANDS
1782
1783The command descriptions below are grouped together in the following
1784sections. The sections are hopefully sorted in order of usefulness to
1785the newcomer.
1786
1787* *Menu commands*
1788* *Miscellaneous commands*
1789* *Commands affecting window movement and placement*
1790* *Commands for focus and mouse movement*
1791* *Commands controlling window state*
1792* *Commands for mouse and key bindings*
1793* *The Style command (controlling window styles)*
1794* *Other commands controlling window styles*
1795* *Commands controlling the virtual desktop*
1796* *Commands for user functions and shell commands*
1797* *Conditional commands*
1798* *Module commands*
1799* *Quit, restart and session management commands*
1800* *Colorsets*
1801* *Color gradients*
1802
1803=== Menus
1804
1805Before a menu can be opened, it has to be populated with menu items
1806using the *AddToMenu* command and bound to a key or mouse button with
1807the *Key*, *PointerKey* or *Mouse* command (there are many other ways to
1808invoke a menu too). This is usually done in the configuration file.
1809
1810Fvwm menus are extremely configurable in look and feel. Even the
1811slightest nuances can be changed to the user's liking, including the
1812menu item fonts, the background, delays before popping up sub menus,
1813generating menus dynamically and many other features. Please refer to
1814the *MenuStyle* command to learn more.
1815
1816*Types of Menus*::
1817In fvwm there are four slightly different types of menus:
1818+
1819*Popup* menus can appear everywhere on the screen on their own or
1820attached to a part of a window. The *Popup* command opens popup menus.
1821If the popup menu was invoked with a mouse button held down, it is
1822closed when the button is released. The item under the pointer is then
1823activated and the associated action is executed.
1824+
1825*Menu* is a very similar command, but the menus it opens are slightly
1826less transient. When invoked by clicking a mouse button, it stays open
1827and can be navigated with no button held. But if it is invoked by a
1828button press followed by mouse motion, it behaves exactly like a popup
1829menu.
1830+
1831_Tear off menus_ or _Pin up menus_ are menus from either of the above
1832two commands that have been "torn off" their original context and
1833pinned on the desktop like a normal window. They are created from
1834other menus by certain key presses or mouse sequences or with the
1835*TearMenuOff* command from inside a menu.
1836+
1837_Sub menus_ are menus inside menus. When a menu item that has the
1838*Popup* command as its action is selected, the named menu is opened as
1839an inferior menu to the parent. Any type of menu can have sub menus.
1840
1841*Menu Anatomy*::
1842Menus consist of any number of titles which are inactive menu items
1843that usually appear at the top of the menu, normal items triggering
1844various actions when selected, separator lines between the items, tear
1845off bars (a horizontal broken line) that tear off the menu when
1846selected, and sub menu items indicated with a triangle pointing left
1847or right, depending on the direction in which the sub menu appears.
1848All the above menu items are optional.
1849+
1850Additionally, if the menu is too long to fit on the screen, the excess
1851menu items are put in a continuation menu and a sub menu with the
1852string "More..." is placed at the bottom of the menu. The "More..."
1853string honors the locale settings.
1854+
1855Finally, there may be a picture running up either side of the menu (a
1856"side bar").
1857
1858*Menu Navigation*::
1859Menus can be navigated either with the keyboard or with the mouse.
1860Many people prefer to use the mouse, but it can be rather tedious.
1861Once you get the hang of it, keyboard navigation can be much faster.
1862While fvwm displays a menu, it can do nothing else. For example, new
1863windows do not appear before the menu is closed. However, this is not
1864exactly true for tear off menus. See the *Tear Off Menus* section for
1865details.
1866
1867*Mouse Navigation*::
1868Moving the pointer over a menu selects the item below it. Normally
1869this is indicated by a 3d border around the item, but not all parts of
1870a menu can be selected. Pressing any mouse button while a menu is open
1871by default activates the item below it. Items of a popup menu are also
1872activated by releasing a held mouse button. In case of an item that
1873hides a sub menu, the sub menu is displayed if the pointer hovers over
1874the item long enough or moves close to the triangle indicating the sub
1875menu. This behaviour can be tuned with menu styles.
1876+
1877Scrolling a mouse wheel over a menu either wraps the pointer along the
1878menu (default), scrolls the menu under the pointer or act as if the
1879menu was clicked depending on the _MouseWheel_ menu style.
1880+
1881Clicking on a selected item activates it - what happens exactly
1882depends on the type of the item.
1883+
1884Clicking on a title, a separator, the side bar, or outside the menu
1885closes the menu (exception: tear off menus can not be closed this
1886way). Pressing mouse button 2 over a menu title or activating a tear
1887off bar creates a tear off menu from the current menu. Clicking on a
1888normal menu item invokes the command that is bound to it, and clicking
1889on a sub menu item either closes all open menus and replaces them with
1890the sub menu or posts the menu (default).
1891+
1892Posting menus is meant to ease mouse navigation. Once a sub menu is
1893posted, only items from that sub menu can be selected. This can be
1894very useful to navigate the menu if the pointer tends to stray off the
1895menu. To unpost the menu and revert back to normal operation, either
1896click on the same sub menu item or press any key.
1897
1898*Keyboard Navigation*::
1899Just like with mouse navigation, the item below the pointer is
1900selected. This is achieved by warping the pointer to the menu items
1901when necessary. While a menu is open, all key presses are intercepted
1902by the menu. No other application can get keyboard input (although
1903this is not the case for tear off menus).
1904+
1905Items can be selected directly by pressing a hotkey that can be
1906configured individually for each menu item. The hotkey is indicated by
1907underlining it in the menu item label. With the _AutomaticHotkeys_
1908menu style fvwm automatically assigns hotkeys to all menu items.
1909+
1910The most basic keys to navigate through menus are the cursor keys
1911(move up or down one item, enter or leave a sub menu),
1912+
1913(activate item) and
1914+
1915(close menu). Numerous other keys can be used to navigate through
1916menus by default:
1917+
1918_Enter_, _Return_, _Space_ activate the current item.
1919+
1920_Escape_, _Delete_, _Ctrl-G_ exit the current sequence of menus or
1921destroy a tear off menu.
1922+
1923_J_, _N_, _Cursor-Down_, _Tab_, _Meta-Tab_, _Ctrl-F_, move to the next
1924item.
1925+
1926_K_, _P_, _Cursor-Up_, _Shift-Tab_, _Shift-Meta-Tab_, _Ctrl-B_, move
1927to the prior item.
1928+
1929_L_, _Cursor-Right_, _F_ enter a sub menu.
1930+
1931_H_, _Cursor-Left_, _B_ return to the prior menu.
1932+
1933_Ctrl-Cursor-Up_, _Ctrl-K_ _Ctrl-P_, _Shift-Ctrl-Meta-Tab_, _Page-Up_
1934move up five items.
1935+
1936_Ctrl-Cursor-Down_, _Ctrl-J_ _Ctrl-N_, _Ctrl-Meta-Tab_ _Page-Down_
1937move down five items.
1938+
1939_Shift-P_, _Home_, _Shift-Cursor-Up_, _Ctrl-A_ move to the first item.
1940+
1941_Shift-N_, _End_, _Shift-Cursor-Down_, _Ctrl-E_ move to the last item.
1942+
1943_Meta-P_, _Meta-Cursor-Up_, _Ctrl-Cursor-Left_, _Shift-Ctrl-Tab_, move
1944up just below the next separator.
1945+
1946_Meta-N_, _Meta-Cursor-Down_, _Ctrl-Cursor-Right_, _Ctrl-Tab_, move
1947down just below the next separator.
1948+
1949_Insert_ opens the "More..." sub menu if any.
1950+
1951_Backspace_ tears off the menu.
1952
1953*Menu Bindings*::
1954The keys and mouse buttons used to navigate the menu can be configured
1955using the *Key* and *Mouse* commands with the special context 'M',
1956possible combined with 'T' for the menu title, 'I' for other menu
1957items, 'S' for any border or sidepic, '[' for left border including a
1958left sidepic, ']' for right border including a right sidepic, '-' for
1959top border, '_' for bottom border. The menu context uses its own set
1960of actions that can be bound to keys and mouse buttons. These are
1961_MenuClose_, _MenuCloseAndExec_, _MenuEnterContinuation_,
1962_MenuEnterSubmenu_, _MenuLeaveSubmenu_, _MenuMoveCursor_,
1963_MenuCursorLeft_, _MenuCursorRight_, _MenuSelectItem_, _MenuScroll_
1964and _MenuTearOff_.
1965+
1966It is not possible to override the key Escape with no modifiers for
1967closing the menu. Neither is it possible to undefine mouse button 1,
1968the arrow keys or the enter key for minimal navigation.
1969+
1970*MenuClose* exits from the current sequence of menus or destroys a
1971tear off menu.
1972+
1973*MenuCloseAndExec* exits from the current sequence of menus or
1974destroys a tear off menu and executes the rest of the line as a
1975command.
1976+
1977*MenuEnterContinuation* opens the "More..." sub menu if any.
1978+
1979*MenuEnterSubmenu* enters a sub menu.
1980+
1981*MenuLeaveSubmenu* returns to the prior menu.
1982+
1983*MenuMoveCursor* _n_ [_m_] moves the selection to another item. If the
1984first argument is zero the second argument specifies an absolute item
1985in the menu to move the pointer to. Negative items are counted from
1986the end of the menu. If the first argument is non-zero, the second
1987argument must be omitted, and the first argument specifies a relative
1988change in the selected item. The positions may be suffixed with a 's'
1989to indicate that the items should refer only to the first items after
1990separators.
1991+
1992*MenuCursorLeft* enters a sub menu with the _SubmenusLeft_ menu style,
1993and returns to the prior menu with the _SubmenusRight_ menu style.
1994+
1995*MenuCursorRight* enters a sub menu with the _SubmenusRight_ menu
1996style, and returns to the prior menu with the _SubmenusLeft_ menu
1997style.
1998+
1999*MenuSelectItem* triggers the action for the menu item.
2000+
2001**MenuScroll **__n__ performs menu scrolling according to the
2002_MouseWheel_ menu style with _n_ items. The distance can be suffixed
2003with an 's' to indicate the items should refer only to the first items
2004after separators.
2005+
2006*MenuTearOff* turns a normal menu into a "torn off" menu. See *Tear
2007Off Menus* for details.
2008
2009*Tear Off Menus*::
2010A tear off menu is any menu that has been "torn off" the window it was
2011attached to and pinned to the root window. There are three ways to
2012tear off a menu: click on the menu title with mouse button 2, press
2013+
2014in the menu or activate its tear off bar (a horizontal bar with a
2015broken line). Tear off bars must be added to the menu as any other
2016item by assigning them the command *TearMenuOff*.
2017+
2018The builtin tear off actions can be overridden by undefining the
2019builtin menu actions bound to tear off. To remove the builtin mouse
2020button 2 binding, use:
2021+
2022....
2023Mouse 2 MT A -
2024....
2025+
2026and to remove the builtin backspace binding, use:
2027+
2028....
2029Key Backspace M A -
2030....
2031+
2032See the section *Menu Bindings* for details on how to assign other
2033bindings for tear off.
2034+
2035Note that prior to fvwm 2.5.20 the tear off mouse bindings were
2036redefined in different way, which no longer work.
2037+
2038The window containing the menu is placed as any other window would be.
2039If you find it confusing to have your tear off menus appear at random
2040positions on the screen, put this line in your configuration file:
2041+
2042....
2043Style fvwm_menu UsePPosition
2044....
2045+
2046To remove borders and buttons from a tear-off menu but keep the menu
2047title, you can use
2048+
2049....
2050Style fvwm_menu !Button 0, !Button 1
2051Style fvwm_menu !Button 2, !Button 3
2052Style fvwm_menu !Button 4, !Button 5
2053Style fvwm_menu !Button 6, !Button 7
2054Style fvwm_menu !Button 8, !Button 9
2055Style fvwm_menu Title, HandleWidth 0
2056....
2057+
2058A tear off menu is a cross breeding between a window and a menu. The
2059menu is swallowed by a window and its title is stripped off and
2060displayed in the window title. The main advantage is that the menu
2061becomes permanent - activating an item does not close the menu.
2062Therefore, it can be used multiple times without reopening it. To
2063destroy such a menu, close its window or press the Escape key.
2064+
2065Tear off menus behave somewhat differently than normal menus and
2066windows. They do not take the keyboard focus, but while the pointer is
2067over one of them, all key presses are sent to the menu. Other fvwm key
2068bindings are disabled as long as the pointer is inside the tear off
2069menu or one of its sub menus. When the pointer leaves this area, all
2070sub menus are closed immediately. Note that the window containing a
2071tear off menu is never hilighted as if it had the focus.
2072+
2073A tear off menu is an independent copy of the menu it originated from.
2074As such, it is not affected by adding items to that menu or changing
2075its menu style.
2076+
2077To create a tear off menu without opening the normal menu first, the
2078option _TearOffImmediately_ can be added to the *Menu* or *Popup*
2079command.
2080
2081*AddToMenu* _menu-name_ [_menu-label_ _action_]::
2082Begins or adds to a menu definition. Typically a menu definition looks
2083like this:
2084+
2085....
2086AddToMenu Utilities Utilities Title
2087 + Xterm           Exec  exec xterm -e tcsh
2088 + Rxvt            Exec  exec rxvt
2089 + "Remote Logins" Popup Remote-Logins
2090 + Top             Exec  exec rxvt -T Top -n Top -e top
2091 + Calculator      Exec  exec xcalc
2092 + Xman            Exec  exec xman
2093 + Xmag            Exec  exec xmag
2094 + emacs           Exec  exec xemacs
2095 + Mail            MailFunction xmh "-font fixed"
2096 + ""              Nop
2097 + Modules         Popup Module-Popup
2098 + ""              Nop
2099 + Exit Fvwm       Popup Quit-Verify
2100....
2101+
2102The menu could be invoked via
2103+
2104....
2105Mouse 1 R A Menu Utilities Nop
2106....
2107+
2108or
2109+
2110....
2111Mouse 1 R A Popup Utilities
2112....
2113+
2114There is no end-of-menu symbol. Menus do not have to be defined in a
2115contiguous region of the _config_ file. The quoted (or first word)
2116portion in the above examples is the menu label, which appears in the
2117menu when the user pops it up. The remaining portion is an fvwm
2118command which is executed if the user selects that menu item. An empty
2119menu-label ("") and the *Nop* function are used to insert a separator
2120into the menu.
2121+
2122The keywords _DynamicPopUpAction_ and _DynamicPopDownAction_ have a
2123special meaning when used as the name of a menu item. The action
2124following the keyword is executed whenever the menu is popped up or
2125down. This way you can implement dynamic menus. It is even possible to
2126destroy itself with *DestroyMenu* and the rebuild from scratch. When
2127the menu has been destroyed (unless you used the _recreate_ option
2128when destroying the menu), do not forget to add the dynamic action
2129again.
2130+
2131Note: Do not trigger actions that require user interaction. They may
2132fail and may screw up your menus. See the *Silent* command.
2133+
2134*Warning* Do not issue *MenuStyle* commands as dynamic menu actions.
2135Chances are good that this crashes fvwm.
2136+
2137The keyword _Greyed_ will still render the menu item, but will grey it out
2138making the option unselectable.
2139+
2140There are several configurable scripts installed together with fvwm
2141for automatic menu generation. They have their own man pages. Some of
2142them, specifically *fvwm-menu-directory* and *fvwm-menu-desktop*, may
2143be used with _DynamicPopupAction_ to create a directory listing or
2144GNOME/KDE application listing.
2145+
2146Example (File browser):
2147+
2148....
2149# You can find the shell script fvwm_make_browse_menu.sh
2150# in the utils/ directory of the distribution.
2151AddToMenu BrowseMenu
2152+ DynamicPopupAction PipeRead \
2153'fvwm_make_browse_menu.sh BrowseMenu'
2154....
2155+
2156Example (Picture menu):
2157+
2158....
2159# Build a menu of all .jpg files in
2160# $HOME/Pictures
2161AddToMenu JpgMenu foo title
2162+ DynamicPopupAction Function MakeJpgMenu
2163
2164AddToFunc MakeJpgMenu
2165+ I DestroyMenu recreate JpgMenu
2166+ I AddToMenu JpgMenu Pictures Title
2167+ I PipeRead 'for i in $HOME/Pictures/*.jpg; \
2168do echo AddToMenu JpgMenu "`basename $i`" Exec xv $i; done'
2169....
2170+
2171The keyword _MissingSubmenuFunction_ has a similar meaning. It is
2172executed whenever you try to pop up a sub menu that does not exist.
2173With this function you can define and destroy menus on the fly. You
2174can use any command after the keyword, but if the name of an item
2175(that is a submenu) defined with *AddToFunc* follows it, fvwm executes
2176this command:
2177+
2178....
2179Function <function-name> <submenu-name>
2180....
2181+
2182i.e. the name is passed to the function as its first argument and can
2183be referred to with "$0".
2184+
2185The *fvwm-menu-directory* script mentioned above may be used with
2186_MissingSubmenuFunction_ to create an up to date recursive directory
2187listing.
2188+
2189Example:
2190+
2191....
2192# There is another shell script fvwm_make_directory_menu.sh
2193# in the utils/ directory of the distribution. To use it,
2194# define this function in your configuration file:
2195
2196DestroyFunc MakeMissingDirectoryMenu
2197AddToFunc MakeMissingDirectoryMenu
2198+ I PipeRead fvwm_make_directory_menu.sh $0
2199
2200DestroyMenu SomeMenu
2201AddToMenu SomeMenu
2202+ MissingSubmenuFunction MakeMissingDirectoryMenu
2203+ "Root directory" Popup /
2204....
2205+
2206This is another implementation of the file browser that uses sub menus
2207for subdirectories.
2208+
2209Titles can be used within the menu. If you add the option _top_ behind
2210the keyword *Title*, the title is added to the top of the menu. If
2211there was a title already, it is overwritten.
2212+
2213....
2214AddToMenu Utilities Tools Title top
2215....
2216+
2217All text up to the first Tab in the menu label is aligned to the left side of
2218t the menu, all text right of the first is aligned to the left in a second
2219column and all text thereafter is placed right aligned in the third column.
2220All other s are replaced by spaces. Note that you can change this format with
2221the _ItemFormat_ option of the *MenuStyle* command.
2222+
2223If the menu-label contains an ampersand ('&'), the next character is
2224taken as a hot-key for the menu item. Hot-keys are underlined in the
2225label. To get a literal '&', insert "&&". Pressing the hot-key moves
2226through the list of menu items with this hot-key or selects an item
2227that is the only one with this hot-key.
2228+
2229If the menu-label contains a sub-string which is set off by stars,
2230then the text between the stars is expected to be the name of an image
2231file to insert in the menu. To get a literal '*', insert "**". For
2232example
2233+
2234....
2235+ Calculator*xcalc.xpm* Exec exec xcalc
2236....
2237+
2238inserts a menu item labeled "Calculator" with a picture of a
2239calculator above it. The following:
2240+
2241....
2242+ *xcalc.xpm*           Exec exec xcalc
2243....
2244+
2245Omits the "Calculator" label, but leaves the picture.
2246+
2247If the menu-label contains a sub-string which is set off by percent
2248signs, then the text between the percent signs is expected to be the
2249name of image file (a so called mini icon to insert to the left of the
2250menu label. A second mini icon that is drawn at the right side of the
2251menu can be given in the same way. To get a literal '%', insert "%%".
2252For example
2253+
2254....
2255+ Calculator%xcalc.xpm% Exec exec xcalc
2256....
2257+
2258inserts a menu item labeled "Calculator" with a picture of a
2259calculator to the left. The following:
2260+
2261....
2262+ %xcalc.xpm%           Exec exec xcalc
2263....
2264+
2265Omits the "Calculator" label, but leaves the picture. The pictures
2266used with this feature should be small (perhaps 16x16).
2267+
2268If the menu-name (not the label) contains a sub-string which is set
2269off by at signs ('@'), then the text between them is expected to be
2270the name of an image file to draw along the left side of the menu (a
2271side pixmap). You may want to use the _SidePic_ option of the
2272*MenuStyle* command instead. To get a literal '@', insert "@@". For
2273example
2274+
2275....
2276AddToMenu StartMenu@linux-menu.xpm@
2277....
2278+
2279creates a menu with a picture in its bottom left corner.
2280+
2281If the menu-name also contains a sub-string surrounded by '^'s, then
2282the text between '^'s is expected to be the name of an X11 color and
2283the column containing the side picture is colored with that color. You
2284can set this color for a menu style using the _SideColor_ option of
2285the *MenuStyle* command. To get a literal '^', insert "^^". Example:
2286+
2287....
2288AddToMenu StartMenu@linux-menu.xpm@^blue^
2289....
2290+
2291creates a menu with a picture in its bottom left corner and colors
2292with blue the region of the menu containing the picture.
2293+
2294In all the above cases, the name of the resulting menu is name
2295specified, stripped of the substrings between the various delimiters.
2296
2297*ChangeMenuStyle* _menustyle_ _menu_ ...::
2298Changes the menu style of _menu_ to _menustyle_. You may specify more
2299than one menu in each call of *ChangeMenuStyle*.
2300
2301*CopyMenuStyle* _orig-menustyle_ _dest-menustyle_::
2302Copy _orig-menustyle_ to _dest-menustyle_, where _orig-menustyle_ is
2303an existing menu style. If the menu style _dest_menustyle_ does not
2304exist, then it is created.
2305
2306*DestroyMenu* [recreate] _menu_::
2307Deletes a menu, so that subsequent references to it are no longer
2308valid. You can use this to change the contents of a menu during an
2309fvwm session. The menu can be rebuilt using *AddToMenu*. The optional
2310parameter _recreate_ tells fvwm not to throw away the menu completely
2311but to throw away all the menu items (including the title).
2312+
2313....
2314DestroyMenu Utilities
2315....
2316
2317*DestroyMenuStyle* _menustyle_::
2318Deletes the menu style named _menustyle_ and changes all menus using
2319this style to the default style, you cannot destroy the default menu
2320style.
2321+
2322....
2323DestroyMenuStyle pixmap1
2324....
2325
2326*Menu* _menu-name_ [_position_] [_double-click-action_]::
2327Causes a previously defined menu to be popped up in a sticky manner.
2328That is, if the user invokes the menu with a click action instead of a
2329drag action, the menu stays up. The command _double-click-action_ is
2330invoked if the user double-clicks a button (or hits the key rapidly
2331twice if the menu is bound to a key) when bringing up the menu. If the
2332double click action is not specified, double clicking on the menu does
2333nothing. However, if the menu begins with a menu item (i.e. not with a
2334title or a separator) and the double click action is not given, double
2335clicking invokes the first item of the menu (but only if the pointer
2336really was over the item).
2337+
2338The pointer is warped to where it was when the menu was invoked if it
2339was both invoked and closed with a keystroke.
2340+
2341The _position_ arguments allow placement of the menu somewhere on the
2342screen, for example centered on the visible screen or above a title
2343bar. Basically it works like this: you specify a _context-rectangle_
2344and an offset to this rectangle by which the upper left corner of the
2345menu is moved from the upper left corner of the rectangle. The
2346_position_ arguments consist of several parts:
2347+
2348{empty}[_context-rectangle_] _x_ _y_ [_special-options_]
2349+
2350The _context-rectangle_ can be one of:
2351+
2352_Root_:::
2353	the root window of the current screen.
2354+
2355_Mouse_:::
2356	a 1x1 rectangle at the mouse position.
2357+
2358_Window_:::
2359	the frame of the context window.
2360+
2361_Interior_:::
2362	the inside of the context window.
2363+
2364_Title_:::
2365	the title of the context window or icon.
2366+
2367__Button__<n>:::
2368+
2369_Icon_:::
2370	the icon of the context window.
2371+
2372_Menu_:::
2373	the current menu.
2374+
2375_Item_:::
2376	the current menu item.
2377+
2378_Context_:::
2379	the current window, menu or icon.
2380+
2381_This_:::
2382	whatever widget the pointer is on (e.g. a corner of a window or the
2383	root window).
2384+
2385_Rectangle_ <__geometry__>:::
2386	the rectangle defined by <__geometry__> in X geometry format. Width
2387	and height default to 1 if omitted.
2388
2389If the context-rectangle is omitted or illegal (e.g. "item" on a
2390window), "Mouse" is the default. Note that not all of these make sense
2391under all circumstances (e.g. "Icon" if the pointer is on a menu).
2392
2393The offset values _x_ and _y_ specify how far the menu is moved from
2394its default position. By default, the numeric value given is
2395interpreted as a percentage of the context rectangle's width (height),
2396but with a trailing '_m_' the menu's width (height) is used instead.
2397Furthermore a trailing '_p_' changes the interpretation to mean
2398pixels.
2399
2400Instead of a single value you can use a list of values. All additional
2401numbers after the first one are separated from their predecessor by
2402their sign. Do not use any other separators.
2403
2404If _x_ or _y_ are prefixed with "'__o__<number>" where <number> is an
2405integer, the menu and the rectangle are moved to overlap at the
2406specified position before any other offsets are applied. The menu and
2407the rectangle are placed so that the pixel at <number> percent of the
2408rectangle's width/height is right over the pixel at <number> percent
2409of the menu's width/height. So "o0" means that the top/left borders of
2410the menu and the rectangle overlap, with "o100" it's the bottom/right
2411borders and if you use "o50" they are centered upon each other (try it
2412and you will see it is much simpler than this description). The
2413default is "o0". The prefix "o<number>" is an abbreviation for
2414"+<number>-<number>m".
2415
2416A prefix of '_c_' is equivalent to "o50". Examples:
2417
2418....
2419# window list in the middle of the screen
2420WindowList Root c c
2421
2422# menu to the left of a window
2423Menu name window -100m c+0
2424
2425# popup menu 8 pixels above the mouse pointer
2426Popup name mouse c -100m-8p
2427
2428# somewhere on the screen
2429Menu name rectangle 512x384+1+1 +0 +0
2430
2431# centered vertically around a menu item
2432AddToMenu foobar-menu
2433 + "first item" Nop
2434 + "special item" Popup "another menu" item +100 c
2435 + "last item" Nop
2436
2437# above the first menu item
2438AddToMenu foobar-menu
2439 + "first item" Popup "another menu" item +0 -100m
2440....
2441
2442
2443Note that you can put a sub menu far off the current menu so you could
2444not reach it with the mouse without leaving the menu. If the pointer
2445leaves the current menu in the general direction of the sub menu the
2446menu stays up.
2447
2448The _special-options_:
2449
2450To create a tear off menu without opening the normal menu, add the
2451option _TearOffImmediately_. Normally the menu opens in normal state
2452for a split second before being torn off. As tearing off places the
2453menu like any other window, a position should be specified explicitly:
2454
2455....
2456# Forbid fvwm to place the menu window
2457Style <name of menu> UsePPosition
2458# Menu at top left corner of screen
2459Menu Root 0p 0p TearOffImmediately
2460....
2461
2462
2463The _Animated_ and _Mwm_ or _Win_ menu styles may move a menu
2464somewhere else on the screen. If you do not want this you can add
2465_Fixed_ as an option. This might happen for example if you want the
2466menu always in the top right corner of the screen.
2467
2468Where do you want a menu to appear when you click on its menu item?
2469The default is to place the title under the cursor, but if you want it
2470where the position arguments say, use the _SelectInPlace_ option. If
2471you want the pointer on the title of the menu, use _SelectWarp_ too.
2472Note that these options apply only if the _PopupAsRootMenu_
2473*MenuStyle* option is used.
2474
2475The pointer is warped to the title of a sub menu whenever the pointer
2476would be on an item when the sub menu is popped up (_fvwm_ menu style)
2477or never warped to the title at all (_Mwm_ or _Win_ menu styles). You
2478can force (forbid) warping whenever the sub menu is opened with the
2479_WarpTitle_ (_NoWarp_) option.
2480
2481Note that the _special-options_ do work with a normal menu that has no
2482other position arguments.
2483*MenuStyle* _stylename_ [_options_]::
2484Sets a new menu style or changes a previously defined style. The
2485_stylename_ is the style name; if it contains spaces or tabs it has to
2486be quoted. The name "*" is reserved for the default menu style. The
2487default menu style is used for every menu-like object (e.g. the window
2488created by the *WindowList* command) that had not be assigned a style
2489using the *ChangeMenuStyle*. See also *DestroyMenuStyle*. When using
2490monochrome color options are ignored.
2491
2492_options_ is a comma separated list containing some of the keywords
2493Fvwm / Mwm / Win, BorderWidth, Foreground, Background, Greyed,
2494HilightBack / !HilightBack, HilightTitleBack, ActiveFore /
2495!ActiveFore, MenuColorset, ActiveColorset, GreyedColorset,
2496TitleColorset, Hilight3DThick / Hilight3DThin / Hilight3DOff,
2497Hilight3DThickness, Animation / !Animation, Font, TitleFont, MenuFace,
2498PopupDelay, PopupOffset, TitleWarp / !TitleWarp, TitleUnderlines0 /
2499TitleUnderlines1 / TitleUnderlines2, SeparatorsLong / SeparatorsShort,
2500TrianglesSolid / TrianglesRelief, PopupImmediately / PopupDelayed,
2501PopdownImmediately / PopdownDelayed, PopupActiveArea, DoubleClickTime,
2502SidePic, SideColor, PopupAsRootMenu / PopupAsSubmenu / PopupIgnore /
2503PopupClose, RemoveSubmenus / HoldSubmenus, SubmenusRight /
2504SubmenusLeft, SelectOnRelease, ItemFormat, VerticalItemSpacing,
2505VerticalMargins, VerticalTitleSpacing, AutomaticHotkeys /
2506!AutomaticHotkeys, UniqueHotkeyActivatesImmediate /
2507!UniqueHotkeyActivatesImmediate, MouseWheel, ScrollOffPage /
2508!ScrollOffPage, TrianglesUseFore / !TrianglesUseFore.
2509
2510In the above list some options are listed as option pairs or triples
2511with a '/' in between. These options exclude each other. All paired
2512options can be negated to have the effect of the counterpart option by
2513prefixing ! to the option.
2514
2515Some options are now negated by prefixing ! to the option. This is the
2516preferred form for all such options. The other negative forms are now
2517deprecated and will be removed in the future.
2518
2519This is a list of MenuStyle deprecated negative options:
2520ActiveForeOff, AnimationOff, AutomaticHotkeysOff, HilightBackOff,
2521TitleWarpOff
2522
2523_Fvwm_, _Mwm_, _Win_ reset all options to the style with the same name
2524in former versions of fvwm. The default for new menu styles is _Fvwm_
2525style. These options override all others except _Foreground_,
2526_Background_, _Greyed_, _HilightBack_, _ActiveFore_ and _PopupDelay_,
2527so they should be used only as the first option specified for a menu
2528style or to reset the style to defined behavior. The same effect can
2529be created by setting all the other options one by one.
2530
2531_Mwm_ and _Win_ style menus popup sub menus automatically. _Win_ menus
2532indicate the current menu item by changing the background to dark.
2533_Fvwm_ sub menus overlap the parent menu, _Mwm_ and _Win_ style menus
2534never overlap the parent menu.
2535
2536_Fvwm_ style is equivalent to !HilightBack, Hilight3DThin,
2537!ActiveFore, !Animation, Font, MenuFace, PopupOffset 0 67, TitleWarp,
2538TitleUnderlines1, SeparatorsShort, TrianglesRelief, PopupDelayed,
2539PopdownDelayed, PopupDelay 150, PopdownDelay 150, PopupAsSubmenu,
2540HoldSubmenus, SubmenusRight, BorderWidth 2, !AutomaticHotkeys,
2541UniqueHotkeyActivatesImmediate, PopupActiveArea 75.
2542
2543_Mwm_ style is equivalent to !HilightBack, Hilight3DThick,
2544!ActiveFore, !Animation, Font, MenuFace, PopupOffset -3 100,
2545!TitleWarp, TitleUnderlines2, SeparatorsLong, TrianglesRelief,
2546PopupImmediately, PopdownDelayed, PopdownDelay 150, PopupAsSubmenu,
2547HoldSubmenus, SubmenusRight, BorderWidth 2,
2548UniqueHotkeyActivatesImmediate, !AutomaticHotkeys, PopupActiveArea 75.
2549
2550_Win_ style is equivalent to HilightBack, Hilight3DOff, ActiveFore,
2551!Animation, Font, MenuFace, PopupOffset -5 100, !TitleWarp,
2552TitleUnderlines1, SeparatorsShort, TrianglesSolid, PopupImmediately,
2553PopdownDelayed, PopdownDelay 150, PopupAsSubmenu, RemoveSubmenus,
2554SubmenusRight, BorderWidth 2, UniqueHotkeyActivatesImmediate,
2555!AutomaticHotkeys, PopupActiveArea 75.
2556
2557_BorderWidth_ takes the thickness of the border around the menus in
2558pixels. It may be zero to 50 pixels. The default is 2. Using an
2559illegal value reverts the border width to the default.
2560
2561_Foreground_ and _Background_ may have a color name as an argument.
2562This color is used for menu text or the menu's background. You can
2563omit the color name to reset these colors to the built-in default.
2564
2565_Greyed_ may have a color name as an argument. This color is the one
2566used to draw a menu-selection which is prohibited (or not recommended)
2567by the Mwm hints which an application has specified. If the color is
2568omitted the color of greyed menu entries is based on the background
2569color of the menu.
2570
2571_HilightBack_ and _!HilightBack_ switch hilighting the background of
2572the selected menu item on and off. A specific background color may be
2573used by providing the color name as an argument to _HilightBack_. If
2574you use this option without an argument the color is based on the
2575menu's background color. The _ActiveColorset_ option overrides the
2576specified color. If the colorset has a non solid background it is used
2577for the hilighting.
2578
2579_HilightTitleBack_ switches hilighting the background of menu titles
2580on. If a _TitleColorset_ was used, the background colour is taken from
2581there. Otherwise the color is based on the menu's background color. If
2582the colorset has a non solid background it is used for the hilighting.
2583
2584_ActiveFore_ and _!ActiveFore_ switch hilighting the foreground of the
2585selected menu item on and off. A specific foreground color may be used
2586by providing the color name as an argument to _ActiveFore_. Omitting
2587the color turns hilighting on when an _ActiveColorset_ is used.
2588_ActiveFore_ turns off hilighting the foreground completely. The
2589_ActiveColorset_ option overrides the specified color.
2590
2591_MenuColorset_ controls if a colorset is used instead of the
2592_Foreground_, _Background_ and _MenuFace_ menu styles. If the
2593_MenuColorset_ keyword is followed by a number equal to zero or
2594greater, this number is taken as the number of the colorset to use. If
2595the number is omitted, the colorset is switched off and the regular
2596menu styles are used again. The foreground and background colors of
2597the menu items are replaced by the colors from the colorset. If the
2598colorset has a pixmap defined, this pixmap is used as the background
2599of the menu. Note that the _MenuFace_ menu style has been optimized
2600for memory consumption and may use less memory than the background
2601from a colorset. The shape mask from the colorset is used to shape the
2602menu. Please refer to the *Colorsets* section for details about
2603colorsets.
2604
2605_ActiveColorset_ works exactly like _MenuColorset_, but the foreground
2606from the colorset replaces the color given with the _ActiveFore_ menu
2607style and the colorset's background color replaces the color given
2608with the _HilightBack_ command (to turn on background hilighting you
2609have to use the _HilightBack_ menu style too). If specified, the
2610hilight and shadow colors from the colorset are used too. The pixmap
2611and shape mask from the colorset are not used. Hilighting the
2612background or foreground can be turned off individually with the
2613_!ActiveFore_ or _!HilightBack_ menu styles.
2614
2615_GreyedColorset_ works exactly like _MenuColorset_, but the foreground
2616from the colorset replaces the color given with the _Greyed_ menu
2617style. No other parts of the colorset are used.
2618
2619_TitleColorset_ works exactly like _MenuColorset_, but is used only
2620for menu titles.
2621
2622_Hilight3DThick_, _Hilight3DThin_ and _Hilight3DOff_ determine if the
2623selected menu item is hilighted with a 3D relief. Thick reliefs are
2624two pixels wide, thin reliefs are one pixel wide.
2625
2626_Hilight3DThickness_ takes one numeric argument that may be between
2627-50 and +50 pixels. With negative values the menu item gets a pressed
2628in look. The above three commands are equivalent to a thickness of 2,
26291 and 0.
2630
2631_Animation_ and _!Animation_ turn menu animation on or off. When
2632animation is on, sub menus that do not fit on the screen cause the
2633parent menu to be shifted to the left so the sub menu can be seen.
2634
2635_Font_ and _TitleFont_ take a font name as an argument. If a font by
2636this name exists it is used for the text of all menu items. If it does
2637not exist or if the name is left blank the built-in default is used.
2638If a _TitleFont_ is given, it is used for all menu titles instead of
2639the normal font.
2640
2641_MenuFace_ enforces a fancy background upon the menus. You can use the
2642same options for _MenuFace_ as for the *ButtonStyle*. See description
2643of *ButtonStyle* command and the *Color Gradients* sections for more
2644information. If you use _MenuFace_ without arguments the style is
2645reverted back to normal.
2646
2647Some examples of MenuFaces are:
2648
2649....
2650MenuFace DGradient 128 2 lightgrey 50 blue 50 white
2651MenuFace TiledPixmap texture10.xpm
2652MenuFace HGradient 128 2 Red 40 Maroon 60 White
2653MenuFace Solid Maroon
2654....
2655
2656Note: The gradient styles H, V, B and D are optimized for high speed
2657and low memory consumption in menus. This is not the case for all the
2658other gradient styles. They may be slow and consume huge amounts of
2659memory, so if you encounter performance problems with them you may be
2660better off by not using them. To improve performance you can try one
2661or all of the following:
2662
2663Turn hilighting of the active menu item other than foreground color
2664off:
2665
2666....
2667MenuStyle <style> Hilight3DOff, !HilightBack
2668MenuStyle <style> ActiveFore <preferred color>
2669....
2670
2671Make sure sub menus do not overlap the parent menu. This can prevent
2672menus being redrawn every time a sub menu pops up or down.
2673
2674....
2675MenuStyle <style> PopupOffset 1 100
2676....
2677
2678Run your X server with backing storage. If your X Server is started
2679with the -bs option, turn it off. If not try the -wm and +bs options:
2680
2681....
2682startx -- -wm +bs
2683....
2684
2685You may have to adapt this example to your system (e.g. if you use
2686xinit to start X).
2687
2688_PopupDelay_ requires one numeric argument. This value is the delay in
2689milliseconds before a sub menu is popped up when the pointer moves
2690over a menu item that has a sub menu. If the value is zero no
2691automatic pop up is done. If the argument is omitted the built-in
2692default is used. Note that the popup delay has no effect if the
2693_PopupImmediately_ option is used since sub menus pop up immediately
2694then.
2695
2696_PopupImmediately_ makes menu items with sub menus pop up it up as
2697soon as the pointer enters the item. The _PopupDelay option_ is
2698ignored then. If _PopupDelayed_ is used fvwm looks at the _PopupDelay_
2699option if or when this automatic popup happens.
2700
2701_PopdownDelay_ works exactly like _PopupDelay_ but determines the
2702timeout of the _PopupDelayed_ style.
2703
2704_PopdownImmediately_ makes sub menus vanish as soon as the pointer
2705leaves the sub menu and the correspondent item in the parent menu.
2706With the opposite option _PopdownDelayed_ the sub menu only pops down
2707after the time specified with the _PopdownDelay_ option. This comes
2708handy when the pointer often strays off the menu item when trying to
2709move into the sub menu. Whenever there is a conflict between the
2710_PopupImmediately_, _PopupDelayed_, _PopupDelay_ styles and the
2711_PopdownImmediately_, _PopdownDelayed_, _PopdownDelay_ styles, the
2712_Popup..._ styles win when using mouse navigation and the _Popdown..._
2713styles win when navigating with the keyboard.
2714
2715_PopupOffset_ requires two integer arguments. Both values affect where
2716sub menus are placed relative to the parent menu. If both values are
2717zero, the left edge of the sub menu overlaps the left edge of the
2718parent menu. If the first value is non-zero the sub menu is shifted
2719that many pixels to the right (or left if negative). If the second
2720value is non-zero the menu is moved by that many percent of the parent
2721menu's width to the right or left.
2722
2723_PopupActiveArea_ requires an integer value between 51 and 100.
2724Normally, when the pointer is over a menu item with a sub menu and the
2725pointer enters the area that starts at 75% of the menu width, the sub
2726menu is shown immediately. This percentage can be changed with
2727_PopupActiveArea_. Setting this value to 100 disables this kind of
2728automatic popups altogether. The default value is restored if no or an
2729illegal value is given.
2730
2731_TitleWarp_ and _!TitleWarp_ affect if the pointer warps to the menu
2732title when a sub menu is opened or not. Note that regardless of this
2733setting the pointer is not warped if the menu does not pop up under
2734the pointer.
2735
2736_TitleUnderlines0_, _TitleUnderlines1_ and _TitleUnderlines2_ specify
2737how many lines are drawn below a menu title.
2738
2739_SeparatorsLong_ and _SeparatorsShort_ set the length of menu
2740separators. Long separators run from the left edge all the way to the
2741right edge. Short separators leave a few pixels to the edges of the
2742menu.
2743
2744_TrianglesSolid_ and _TrianglesRelief_ affect how the small triangles
2745for sub menus is drawn. Solid triangles are filled with a color while
2746relief triangles are hollow.
2747
2748_DoubleClickTime_ requires one numeric argument. This value is the
2749time in milliseconds between two mouse clicks in a menu to be
2750considered as a double click. The default is 450 milliseconds. If the
2751argument is omitted the double click time is reset to this default.
2752
2753_SidePic_ takes the name of an image file as an argument. The picture
2754is drawn along the left side of the menu. The _SidePic_ option can be
2755overridden by a menu specific side pixmap (see *AddToMenu*). If the
2756file name is omitted an existing side pixmap is removed from the menu
2757style.
2758
2759_SideColor_ takes the name of an X11 color as an argument. This color
2760is used to color the column containing the side picture (see above).
2761The SideColor option can be overridden by a menu specific side color
2762(see *AddToMenu*). If the color name is omitted the side color option
2763is switched off.
2764
2765_PopupAsRootMenu_, _PopupAsSubmenu_, _PopupIgnore_ and _PopupClose_
2766change the behavior when you click on a menu item that opens a sub
2767menu. With _PopupAsRootMenu_ the original menu is closed before the
2768sub menu appears, with _PopupAsSubmenu_ it is not, so you can navigate
2769back into the parent menu. Furthermore, with _PopupAsSubmenu_ the sub
2770menu is held open (posted) regardless of where you move the mouse.
2771Depending on your menu style this may simplify navigating through the
2772menu. *Any* keystroke while a menu is posted reverts the menu back to
2773the normal behavior. With _PopupClose_ the menu is closed when a sub
2774menu item is activated, and the menu stays open if _PopupIgnore_ is
2775used (even if the menu was invoked with the *Popup* command).
2776_PopupAsSubmenu_ is the default.
2777
2778_RemoveSubmenus_ instructs fvwm to remove sub menu when you move back
2779into the parent menu. With _HoldSubmenus_ the sub menu remains
2780visible. You probably want to use _HoldSubmenus_ if you are using the
2781_PopupDelayed_ style. _RemoveSubmenus_ affects menu navigation with
2782the keyboard.
2783
2784_SelectOnRelease_ takes an optional key name as an argument. If the
2785given key is released in a menu using this style, the current menu
2786item is selected. This is intended for
2787
2788*WindowList* navigation. The key name is a standard X11 key name as
2789defined in _/usr/include/X11/keysymdef.h_, (without the _XK__ prefix),
2790or the keysym database _/usr/X11R6/lib/X11/XKeysymDB_. To disable this
2791behavior, omit the key name.
2792
2793Note: Some X servers do not support KeyRelease events.
2794_SelectOnRelease_ does not work on such a machine.
2795
2796_ItemFormat_ takes a special string as its argument that determines
2797the layout of the menu items. Think of the format string as if it were
2798a menu item. All you have to do is tell fvwm where to place the
2799different parts of the menu item (i.e. the labels, the triangle
2800denoting a sub menu, the mini icons and the side pic) in the blank
2801area. The string consists of spaces,
2802
2803characters and formatting directives beginning with '%'. Any illegal
2804characters and formatting directives are silently ignored:
2805
2806*%l*, *%c* and *%r*::
2807	Insert the next item label. Up to three labels can be used. The item
2808	column is left-aligned (*%l*), centered (*%c*) or right-aligned
2809	(*%r*).
2810+
2811*%i*::
2812	Inserts the mini icon.
2813+
2814*%>* and *%<*::
2815	Insert the sub menu triangle pointing either to the right (*%>*) or to
2816	the left (*%<*).
2817+
2818*%|*::
2819	The first *%|* denotes the beginning of the area that is highlighted
2820	either with a background color or a relief (or both). The second *%|*
2821	marks the end of this area. *%|* can be used up to twice in the
2822	string. If you do not add one or both of them, fvwm sets the margins
2823	to the margins of the whole item (not counting the side picture).
2824+
2825*%s*::
2826	Places the side picture either at the beginning or the end of the
2827	menu. This directive may be used only once and only as the first or
2828	last in the format string. If the *%s* is not at the beginning of the
2829	string, menus are not drawn properly.
2830
2831+
2832*Space*, *Tab*, *%Space* and *%Tab*::
2833	Add gap of one space, or a tab, using the width of the menu font. When
2834	using a tab, the size of the gap can be one to 8 spaces since the tab
2835	position is a multiple of 8 from the edge of the menu. The whole
2836	string must be quoted if spaces or tabs are used.
2837+
2838*%p*::
2839	Like Space and Tab *%p* inserts an empty area into the item, but with
2840	better control of its size (see below).
2841
2842You can define an additional space before and after each of the
2843objects like this:
2844
2845....
2846%left.rightp
2847....
2848
2849This means: if the object is defined in the menu (e.g. if it is *%s*
2850and you use a side picture, or it is *%l* for the third column and
2851there are items defined that actually have a third column), then add
2852_left_ pixels before the object and _right_ pixels after it. You may
2853leave out the _left_ or the _.right_ parts if you do not need them.
2854All values up to the screen width are allowed. Even negative values
2855can be used with care. The *p* may be replaced with any other
2856formatting directives described above.
2857
2858Note: Only items defined in the format string are visible in the
2859menus. So if you do not put a *%s* in there you do not see a side
2860picture, even if one is specified.
2861
2862Note: The _SubmenusLeft_ style changes the default _ItemFormat_
2863string, but if it was set manually it is not modified.
2864
2865Note: If any unformatted title of the menu is wider than the widest
2866menu item, the spaces between the different parts of the menu items
2867are enlarged to match the width of the title. Leading left aligned
2868objects in the format string (*%l*, *%i*, *%<*, first *%|*) stick to
2869the left edge of the menu and trailing right aligned objects (*%r*,
2870*%i*, *%>*, second *%|*) stick to the right edge. The gaps between the
2871remaining items are enlarged equally.
2872
2873Examples:
2874
2875....
2876MenuStyle * ItemFormat "%.4s%.1|%.5i%.5l%.5l%.5r%.5i%2.3>%1|"
2877....
2878
2879
2880Is the default string used by fvwm: (side picture + 4 pixels gap)
2881(beginning of the hilighted area + 1 pixel gap) (mini icon + 5p)
2882(first column left aligned + 5p) (second column left aligned + 5p)
2883(third column right aligned + 5p) (second mini icon + 5p) (2p + sub
2884menu triangle + 3p) (1p + end of hilighted area).
2885
2886....
2887MenuStyle * ItemFormat "%.1|%3.2<%5i%5l%5l%5r%5i%1|%4s"
2888....
2889
2890
2891Is used by fvwm with the _SubmenusLeft_ option below.
2892
2893_VerticalItemSpacing_ and _VerticalTitleSpacing_ control the vertical
2894spacing of menu items and titles like _ItemFormat_ controls the
2895horizontal spacing. Both take two numeric arguments that may range
2896from -100 to +100. The first is the gap in pixels above a normal menu
2897item (or a menu title), the second is the gap in pixels below it.
2898Negative numbers do not make much sense and may screw up the menu
2899completely. If no arguments are given or the given arguments are
2900invalid, the built-in defaults are used: one pixel above the item or
2901title and two below.
2902
2903_VerticalMargins_ can be used to add some padding at the top and
2904bottom of menus. It takes two numeric arguments that must be positive
2905integers (or zero). If the number of arguments or its values are
2906incorrect, fvwm defaults both to 0, which means no padding at all. If
2907the values are correct, the first one is used for the top margin, and
2908the second one is used for the bottom margin.
2909
2910_SubmenusLeft_ mirrors the menu layout and behavior. Sub menus pop up
2911to the left, the sub menu triangle is drawn left and the mini icon and
2912side picture are drawn at the right side of the menu. The default is
2913_SubmenusRight_. The position hints of a menu are also affected by
2914this setting, i.e. position hints using _item_ or _menu_ as context
2915rectangle and position hints using _m_ offsets.
2916
2917_AutomaticHotkeys_ and _!AutomaticHotkeys_ control the menu's ability
2918to automatically provide hot-keys on the first character of each menu
2919item's label. This behavior is always overridden if an explicit
2920hot-key is assigned in the *AddToMenu* command.
2921
2922_UniqueHotkeyActivatesImmediate_ and _!UniqueHotkeyActivatesImmediate_
2923controls how menu items are invoked when used with hotkeys. By
2924default, if a given menu entry only has one completeable match for a
2925given hotkey, the action for that menu entry is invoked and the menu
2926is closed. This is due to the _UniqueHotkeyActivatesImmediate_ option.
2927However, the menu can be told to remain open, waiting for the user to
2928invoke the selected item instead when there is only one matched item
2929for a given hotkey, by using the _!UniqueHotkeyActivatesImmediate_
2930option.
2931
2932_MouseWheel_ controls the ability to scroll the menu using a mouse
2933wheel. It takes one argument, that can be one of ScrollsPointer,
2934ScrollsMenu, ScrollsMenuBackwards or ActivatesItem. ScrollsPointer
2935makes the mouse wheel scroll the pointer over a menu. This is the
2936default. ScrollsMenu and ScrollsMenuBackwards scroll the menu beneath
2937the pointer. ActivatesItem disables scrolling by mouse wheel and makes
2938the use of a mouse wheel act as if the menu was clicked. If no
2939argument is supplied the default setting is restored.
2940
2941_ScrollOffPage_ allows a menu to be scrolled out of the visible area
2942if _MouseWheel_ is set to ScrollsMenu or ScrollsMenuBackwards. This is
2943the default. The opposite, _!ScrollOffPage_ disables this behaviour.
2944
2945_TrianglesUseFore_ draws sub menu triangles with the foreground color
2946of the menu colorset (normally drawn with the hilight color).
2947_!TrianglesUseFore_ disables this behaviour.
2948
2949Examples:
2950
2951....
2952MenuStyle * Mwm
2953MenuStyle * Foreground Black, Background gray40
2954MenuStyle * Greyed gray70, ActiveFore White
2955MenuStyle * !HilightBack, Hilight3DOff
2956MenuStyle * Font lucidasanstypewriter-14
2957MenuStyle * MenuFace DGradient 64 darkgray MidnightBlue
2958
2959MenuStyle red Mwm
2960MenuStyle red Foreground Yellow
2961MenuStyle red Background Maroon
2962MenuStyle red Greyed Red, ActiveFore Red
2963MenuStyle red !HilightBack, Hilight3DOff
2964MenuStyle red Font lucidasanstypewriter-12
2965MenuStyle red MenuFace DGradient 64 Red Black
2966....
2967
2968
2969Note that all style options could be placed on a single line for each
2970style name.
2971
2972*MenuStyle* _forecolor_ _backcolor_ _shadecolor_ _font_ _style_ [_anim_]::
2973	This is the old syntax of the *MenuStyle* command. It is obsolete and
2974	may be removed in the future. Please use the new syntax as described
2975	above.
2976+
2977Sets the menu style. When using monochrome the colors are ignored. The
2978_shadecolor_ is the one used to draw a menu-selection which is
2979prohibited (or not recommended) by the Mwm hints which an application
2980has specified. The style option is either _Fvwm_, _Mwm_ or _Win_,
2981which changes the appearance and operation of the menus.
2982+
2983_Mwm_ and _Win_ style menus popup sub menus automatically. _Win_ menus
2984indicate the current menu item by changing the background to black.
2985_Fvwm_ sub menus overlap the parent menu, _Mwm_ and _Win_ style menus
2986never overlap the parent menu.
2987+
2988When the _anim_ option is given, sub menus that do not fit on the
2989screen cause the parent menu to be shifted to the left so the sub menu
2990can be seen. See also *SetAnimation* command.
2991
2992*Popup* _PopupName_ [_position_] [_default-action_]::
2993	This command has two purposes: to bind a menu to a key or mouse
2994	button, and to bind a sub menu into a menu. The formats for the two
2995	purposes differ slightly. The _position_ arguments are the same as for
2996	*Menu*. The command _default-action_ is invoked if the user clicks a
2997	button to invoke the menu and releases it immediately again (or hits
2998	the key rapidly twice if the menu is bound to a key). If the default
2999	action is not specified, double clicking on the menu does nothing.
3000	However, if the menu begins with a menu item (i.e. not with a title or
3001	a separator) and the default action is not given, double clicking
3002	invokes the first item of the menu (but only if the pointer really was
3003	over the item).
3004+
3005To bind a previously defined pop-up menu to a key or mouse button:
3006+
3007The following example binds mouse buttons 2 and 3 to a pop-up called
3008"Window Ops". The menu pops up if the buttons 2 or 3 are pressed in
3009the window frame, side-bar, or title-bar, with no modifiers (none of
3010shift, control, or meta).
3011+
3012
3013....
3014Mouse 2 FST N Popup "Window Ops"
3015Mouse 3 FST N Popup "Window Ops"
3016....
3017
3018+
3019Pop-ups can be bound to keys through the use of the *Key* command.
3020Pop-ups can be operated without using the mouse by binding to keys and
3021operating via the up arrow, down arrow, and enter keys.
3022+
3023To bind a previously defined pop-up menu to another menu, for use as a
3024sub menu:
3025+
3026The following example defines a sub menu "Quit-Verify" and binds it
3027into a main menu, called "RootMenu":
3028+
3029
3030....
3031AddToMenu Quit-Verify
3032 + "Really Quit Fvwm?" Title
3033 + "Yes, Really Quit"  Quit
3034 + "Restart Fvwm"      Restart
3035 + "Restart Fvwm 1.xx" Restart fvwm1 -s
3036 + ""                  Nop
3037 + "No, Don't Quit"    Nop
3038
3039AddToMenu RootMenu "Root Menu" Title
3040 + "Open XTerm Window" Popup NewWindowMenu
3041 + "Login as Root"     Exec exec xterm -T Root -n Root -e su -
3042 + "Login as Anyone"   Popup AnyoneMenu
3043 + "Remote Hosts"      Popup HostMenu
3044 + ""                  Nop
3045 + "X utilities"       Popup Xutils
3046 + ""                  Nop
3047 + "Fvwm Modules"      Popup Module-Popup
3048 + "Fvwm Window Ops"   Popup Window-Ops
3049 + ""                  Nop
3050 + "Previous Focus"    Prev (AcceptsFocus) Focus
3051 + "Next Focus"        Next (AcceptsFocus) Focus
3052 + ""                  Nop
3053 + "Refresh screen"    Refresh
3054 + ""                  Nop
3055 + "Reset X defaults"  Exec xrdb -load \
3056                 $HOME/.Xdefaults
3057 + ""                  Nop
3058 + ""                  Nop
3059 + Quit                Popup Quit-Verify
3060....
3061
3062+
3063Popup differs from *Menu* in that pop-ups do not stay up if the user
3064simply clicks. These are popup-menus, which are a little hard on the
3065wrist. *Menu* menus stay up on a click action. See the *Menu* command
3066for an explanation of the interactive behavior of menus. A menu can be
3067open up to ten times at once, so a menu may even use itself or any of
3068its predecessors as a sub menu.
3069*TearMenuOff*::
3070When assigned to a menu item, it inserts a tear off bar into the menu
3071(a horizontal broken line). Activating that item tears off the menu.
3072If the menu item has a label, it is shown instead of the broken line.
3073If used outside menus, this command does nothing. Examples:
3074+
3075
3076....
3077AddToMenu WindowMenu
3078+ I "" TearMenuOff
3079
3080AddToMenu RootMenu
3081+ I "click here to tear me off" TearMenuOff
3082....
3083
3084*Title*::
3085	Does nothing This is used to insert a title line in a popup or menu.
3086
3087=== Miscellaneous Commands
3088
3089*BugOpts* [_option_ [_bool_]], ...::
3090	This command controls several workarounds for bugs in third party
3091	programs. The individual options are separated by commas. The optional
3092	argument _bool_ is a boolean argument and controls if the bug
3093	workaround is enabled or not. It can either be "True" or "False" to
3094	turn the option on or off, or "toggle" to switch is back and forth. If
3095	_bool_ is omitted, the default setting is restored.
3096+
3097_FlickeringMoveWorkaround_ disables ConfigureNotify events that are
3098usually sent to an application while it is moved. If some windows
3099flicker annoyingly while being moved, this option may help you. Note
3100that if this problem occurs it is not an fvwm bug, it is a problem of
3101the application.
3102+
3103_MixedVisualWorkaround_ makes fvwm install the root colormap before it
3104does some operations using the root window visuals. This is only
3105useful when the *-visual* option is used to start fvwm and then only
3106with some configurations of some servers (e.g. Exceed 6.0 with an 8
3107bit PseudoColor root and fvwm using a 24 bit TrueColor visual).
3108+
3109The _ModalityIsEvil_ option controls whether Motif applications have
3110the ability to have modal dialogs (dialogs that force you to close
3111them first before you can do anything else). The default is to not
3112allow applications to have modal dialogs. Use this option with care.
3113Once this option is turned on, you have to restart fvwm to turn it
3114off.
3115+
3116_RaiseOverNativeWindows_ makes fvwm try to raise the windows it
3117manages over native windows of the X server's host system. This is
3118needed for some X servers running under Windows, Windows NT or Mac OS X.
3119Fvwm tries to detect if it is running under such an X server and
3120initializes the flag accordingly.
3121+
3122_RaiseOverUnmanaged_ makes fvwm try to raise the windows it manages
3123over override_redirect windows. This is used to cope with ill-mannered
3124applications that use long-lived windows of this sort, contrary to
3125ICCCM conventions. It is useful with the _Unmanaged_ style option too.
3126+
3127_FlickeringQtDialogsWorkaround_ suppresses flickering of the focused
3128window in some modules when using KDE or QT applications with
3129application modal dialog windows. By default this option is turned on.
3130This option may be visually disturbing for other applications using
3131windows not managed by fvwm. Since these applications are rare it is
3132most likely safe to leave this option at its default.
3133+
3134_QtDragnDropWorkaround_ suppresses the forwarding of unknown
3135ClientEvent messages to windows -- usually this is harmless, but Qt
3136has problems handling unrecognised ClientEvent messages. Enabling this
3137option might therefore help for Qt applications using DragnDrop. This
3138option is off by default.
3139+
3140_EWMHIconicStateWorkaround_ is needed by EWMH compliant pagers or
3141taskbars which represent windows which are on a different desktops as
3142iconified. These pagers and taskbars use a version of the EWMH
3143specification before version 1.2 (the current KDE 2 & 3 versions).
3144These pagers and taskbars use the IconicState WM_STATE state to
3145determine if an application is iconified. This state, according to the
3146ICCCM, does not imply that a window is iconified (in the usual sense).
3147Turning on this option forces fvwm to establish an equivalence between
3148the IconicState WM_STATE state and the iconified window. This violates
3149ICCCM compliance but should not cause big problems. By default this
3150option is off.
3151+
3152With the _DisplayNewWindowNames_ enabled, fvwm prints the name, icon
3153name (if available), resource and class of new windows to the console.
3154This can help in finding the correct strings to use in the *Style*
3155command.
3156+
3157When the _ExplainWindowPlacement_ option is enabled, fvwm prints a
3158message to the console whenever a new window is placed or
3159*PlaceAgain*, is used. The message explains on which desk, page,
3160screen and position it was placed and why. This option can be used to
3161figure out why a specific window does not appear where you think it
3162should.
3163+
3164The _DebugCRMotionMethod_ option enables some debugging code in the
3165ConfigureRequest handling routines of fvwm. It is not helpful for the
3166user, but if you report a bug to the fvwm team we may ask you to
3167enable this option.
3168+
3169The _TransliterateUtf8_ option enables transliteration during
3170conversions from utf-8 strings. By default fvwm will not transliterate
3171during conversion, but will fall back to alternate strings provided by
3172the clients if conversion from utf-8 fails due to characters which
3173have no direct correspondence in the target charecter set. Some
3174clients however neglect to set non utf-8 properties correctly in which
3175case this option may help.
3176
3177*BusyCursor* [_Option_ _bool_], ...::
3178	This command controls the cursor during the execution of certain
3179	commands. _Option_ can be _DynamicMenu_, _ModuleSynchronous_, _Read_,
3180	_Wait_ or _*_. An option must be followed by a boolean argument
3181	_bool_. You can use commas to separate individual options. If you set
3182	an option to "True", then when the corresponding command is run, fvwm
3183	displays the cursor of the _WAIT_ context of the *CursorStyle*
3184	command. "False" forces to not display the cursor. The default is:
3185+
3186
3187....
3188BusyCursor DynamicMenu False, ModuleSynchronous False, \
3189Read False, Wait False
3190....
3191
3192+
3193The _*_ option refers to all available options.
3194+
3195The _Read_ option controls the *PipeRead* command.
3196+
3197The _DynamicMenu_ option affects the _DynamicPopupAction_ and
3198_MissingSubmenuFunction_ options of the *AddToMenu* command. If this
3199option is set to "False", then the busy cursor is not displayed during
3200a dynamic menu command even if this command is a *Read* or *PipeRead*
3201command and the _Read_ option is set to "True".
3202+
3203The _ModuleSynchronous_ option affects the *ModuleSynchronous*
3204command. If this option is set to "False", then the busy cursor is not
3205displayed while fvwm waits for a module started by *ModuleSynchronous*
3206to complete its startup.
3207+
3208The _Wait_ option affects only the root cursor. During a wait pause
3209the root cursor is replaced by the busy cursor and fvwm is still fully
3210functional (you can escape from the pause, see the *EscapeFunc*
3211command). If you want to use this option and if you do not use the
3212default root cursor, you must set your root cursor with the
3213*CursorStyle* command.
3214
3215*ClickTime* [_delay_]::
3216	Specifies the maximum delay in milliseconds between a button press and
3217	a button release for the *Function* command to consider the action a
3218	mouse click. The default delay is 150 milliseconds. Omitting the delay
3219	value resets the *ClickTime* to the default.
3220
3221*ColorLimit* _limit_::
3222	This command is obsolete. See the *--color-limit* option to fvwm.
3223
3224*ColormapFocus* FollowsMouse | FollowsFocus::
3225	By default, fvwm installs the colormap of the window that the cursor
3226	is in. If you use
3227+
3228
3229....
3230ColormapFocus FollowsFocus
3231....
3232
3233+
3234then the installed colormap is the one for the window that currently
3235has the keyboard focus.
3236
3237*CursorStyle* _context_ [_num_ | _name_ | None | Tiny | _file_ [_x_ _y_] [_fg_ _bg_]]::
3238	Defines a new cursor for the specified context. Note that this command
3239	can not control the shapes an applications uses, for example, to
3240	indicate that it is busy. The various contexts are:
3241+
3242_POSITION_ (top_left_corner):::
3243	used when initially placing windows
3244+
3245_TITLE_ (top_left_arrow):::
3246	used in a window title-bar
3247+
3248_DEFAULT_ (top_left_arrow):::
3249	used in windows that do not set their cursor
3250+
3251_SYS_ (hand2):::
3252	used in one of the title-bar buttons
3253+
3254_MOVE_ (fleur):::
3255	used when moving or resizing windows
3256+
3257_RESIZE_ (sizing):::
3258	used when moving or resizing windows
3259+
3260_WAIT_ (watch):::
3261	used during certain fvwm commands (see *BusyCursor* for details)
3262+
3263_MENU_ (top_left_arrow):::
3264	used in menus
3265+
3266_SELECT_ (crosshair):::
3267	used when the user is required to select a window
3268+
3269_DESTROY_ (pirate):::
3270	used for *Destroy*, *Close*, and *Delete* commands
3271+
3272_TOP_ (top_side):::
3273	used in the top side-bar of a window
3274+
3275_RIGHT_ (right_side):::
3276	used in the right side-bar of a window
3277+
3278_BOTTOM_ (bottom_side):::
3279	used in the bottom side-bar of a window
3280+
3281_LEFT_ (left_side):::
3282	used in the left side-bar of a window
3283+
3284_TOP_LEFT_ (top_left_corner):::
3285	used in the top left corner of a window
3286+
3287_TOP_RIGHT_ (top_right_corner):::
3288	used in the top right corner of a window
3289+
3290_BOTTOM_LEFT_ (bottom_left_corner):::
3291	used in the bottom left corner of a window
3292+
3293_BOTTOM_RIGHT_ (bottom_right_corner):::
3294	used in the bottom right corner of a window
3295+
3296_TOP_EDGE_ (top_side):::
3297	used at the top edge of the screen
3298+
3299_RIGHT_EDGE_ (right_side):::
3300	used at the right edge of the screen
3301+
3302_BOTTOM_EDGE_ (bottom_side):::
3303	used at the bottom edge of the screen
3304+
3305_LEFT_EDGE_ (left_side):::
3306	used at the left edge of the screen
3307+
3308_ROOT_ (left_ptr):::
3309	used as the root cursor
3310
3311The defaults are shown in parentheses above. If you ever want to
3312restore the default cursor for a specific context you can omit the
3313second argument.
3314
3315The second argument is either the numeric value of the cursor as
3316defined in the include file _X11/cursorfont.h_ or its name (without
3317the XC_ prefix). Alternatively, the xpm file name may be specified.
3318The name can also be _None_ (no cursor) or _Tiny_ (a single pixel as
3319the cursor).
3320
3321....
3322# make the kill cursor be XC_gumby (both forms work):
3323CursorStyle DESTROY 56
3324CursorStyle DESTROY gumby
3325....
3326
3327
3328Alternatively, the cursor can be loaded from an (XPM, PNG or SVG)
3329image _file_. If fvwm is compiled with Xcursor support, full ARGB is
3330used, and (possibly animated) cursor files made with the *xcursorgen*
3331program can be loaded. Otherwise the cursor is converted to
3332monochrome.
3333
3334The optional _x_ and _y_ arguments (following a _file_ argument)
3335specifies the hot-spot coordinate with 0 0 as the top left corner of
3336the image. Coordinates within the image boundary are valid and
3337overrides any hot-spot defined in the (XPM/Xcursor) image file. An
3338invalid or undefined hot-spot is placed in the center of the image.
3339
3340....
3341CursorStyle ROOT cursor_image.png 0 0
3342....
3343
3344The optional _fg_ and _bg_ arguments specify the foreground and
3345background colors for the cursor, defaulting to black and white
3346(reverse video compared to the actual bitmap). These colors are only
3347used with monochrome cursors. Otherwise they are silently ignored.
3348
3349....
3350CursorStyle ROOT nice_arrow.xpm yellow black
3351....
3352
3353*DefaultColors* [_foreground_] [_background_]::
3354	*DefaultColors* sets the default foreground and background colors used
3355	in miscellaneous windows created by fvwm, for example in the geometry
3356	feedback windows during a move or resize operation. If you do not want
3357	to change one color or the other, use - as its color name. To revert
3358	to the built-in default colors omit both color names. Note that the
3359	default colors are not used in menus, window titles or icon titles.
3360
3361*DefaultColorset* [_num_]::
3362	*DefaultColorset* sets the colorset used by the windows controlled by
3363	the *DefaultColors* command. To revert back to the *DefaultColors*
3364	colors use
3365+
3366
3367....
3368DefaultColorset -1
3369....
3370
3371+
3372or any variant of the *DefaultColors* command.
3373
3374*DefaultFont* [_fontname_]::
3375	*DefaultFont* sets the default font to font _fontname_. The default
3376	font is used by fvwm whenever no other font has been specified. To
3377	reset the default font to the built-in default, omit the argument. The
3378	default font is used for menus, window titles, icon titles as well as
3379	the geometry feedback windows during a move or resize operation. To
3380	override the default font in a specific context, use the *Style* *
3381	_Font_, *Style* * _IconFont_, or *MenuStyle* commands.
3382
3383*DefaultIcon* _filename_::
3384	Sets the default icon which is used if a window has neither an
3385	client-supplied icon nor an icon supplied via the _Icon_ option of the
3386	*Style* command.
3387
3388*DefaultLayers* _bottom_ _put_ _top_::
3389	Changes the layers that are used for the _StaysOnBottom_, _StaysPut_,
3390	_StaysOnTop_ *Style* options. Initially, the layers 2, 4 and 6 are
3391	used.
3392
3393*Deschedule* [_command_id_]::
3394	Removes all commands that were scheduled with the id _command_id_ with
3395	the *Schedule* command from the list of commands to be executed unless
3396	they were already executed. If the _command_id_ is omitted, the value
3397	of the variable $[schedule.last] is used as the id.
3398
3399*Emulate* Fvwm | Mwm | Win::
3400	This command is a catch all for how miscellaneous things are done by
3401	fvwm. Right now this command affects where the move/resize feedback
3402	window appears and how window placement is aborted. To have more Mwm-
3403	or Win-like behavior you can call *Emulate* with _Mwm_ or _Win_ as its
3404	argument. With Mwm resize and move feedback windows are in the center
3405	of the screen, instead of the upper left corner. This also affects how
3406	manual placement is aborted. See the _ManualPlacement_ description.
3407
3408*EscapeFunc*::
3409	By default the key sequence Ctrl-Alt-Escape allows for escaping from a
3410	*Wait* pause and from a locked *ModuleSynchronous* command. The
3411	*EscapeFunc* command used with the *Key* command allows for
3412	configuring this key sequence. An example:
3413+
3414
3415....
3416Key Escape A MC -
3417Key Escape A  S EscapeFunc
3418....
3419
3420+
3421
3422replaces the Ctrl-Alt-Escape  key sequence with Shift-Escape for aborting a
3423*Wait* pause and *ModuleSynchronous* command.  *EscapeFunc* used outside the
3424*Key* command does nothing.
3425
3426*FakeClick* [_command_ _value_] ...::
3427	This command is mainly intended for debugging fvwm and no guarantees
3428	are made that it works for you. _FakeClick_ can simulate mouse button
3429	press and release events and pass them to fvwm or the applications.
3430	The parameters are a list of commands which consist of pairs of
3431	_command_ tokens and integer _values_, The _press_ and _release_
3432	commands are followed by the appropriate mouse button number and
3433	generate a button press or release event on the window below the
3434	pointer. The _wait_ commands pauses fvwm for the given number of
3435	milliseconds. The _modifiers_ command simulates pressing or releasing
3436	modifier keys. The values 1 to 5 are mapped to Mod1 to Mod5 while 6, 7
3437	and 8 are mapped to Shift, Lock and Control. The modifier is set for
3438	any further button events. To release a modifier key, use the
3439	corresponding negative number. The _depth_ command determines to which
3440	window the button events are sent. With a depth of 1, all events go to
3441	the root window, regardless of the pointer's position. With 2, the
3442	event is passed to the top level window under the pointer which is
3443	usually the frame window. With 3, events go to the client window.
3444	Higher numbers go to successive sub windows. Zero (0) goes to the
3445	smallest window that contains the pointer. Note that events propagate
3446	upward.
3447+
3448
3449....
3450FakeClick depth 2 press 1 wait 250 release 1
3451....
3452
3453+
3454This simulates a click with button 1 in the parent window (depth 2)
3455with a delay of 250 milliseconds between the press and the release.
3456Note: all command names can be abbreviated with their first letter.
3457
3458*FakeKeypress* [_command_ _value_] ...::
3459	This command is mainly intended for debugging fvwm and no guarantees
3460	are made that it works for you. *FakeKeypress* can simulate key press
3461	and release events and pass them to fvwm or applications. The
3462	parameters are a list of commands which consist of pairs of command
3463	tokens and values. The _press_ and _release_ commands are followed by
3464	a key name. The key name is a standard X11 key name as defined in
3465	_/usr/include/X11/keysymdef.h_, (without the _XK__ prefix), or the
3466	keysym database _/usr/X11R6/lib/X11/XKeysymDB_. The _wait_,
3467	_modifiers_ and _depth_ commands are the same as those used by
3468	*FakeClick*.
3469+
3470Save all GVim sessions with: "Esc:w\n"
3471+
3472
3473....
3474All (gvim) FakeKeypress press Escape \
3475                  press colon \
3476                  press w \
3477                  press Return
3478....
3479
3480+
3481Save & exit all GVim sessions with: "Esc:wq\n"
3482+
3483
3484....
3485All (gvim) FakeKeypress press Escape \
3486                  press colon \
3487                  press w \
3488                  press q \
3489                  press Return
3490....
3491
3492+
3493Send A to a specific window:
3494+
3495
3496....
3497WindowId 0x3800002 FakeKeypress press A
3498....
3499
3500+
3501Note: all command names can be abbreviated with their first letter.
3502
3503*GlobalOpts* [_options_]::
3504	This command is obsolete. Please replace the global options in your
3505	configuration file according to the following table:
3506+
3507
3508....
3509GlobalOpts WindowShadeShrinks
3510-->
3511Style * WindowShadeShrinks
3512
3513GlobalOpts WindowShadeScrolls
3514-->
3515Style * WindowShadeScrolls
3516
3517GlobalOpts SmartPlacementIsReallySmart
3518-->
3519Style * MinOverlapPlacement
3520
3521GlobalOpts SmartPlacementIsNormal
3522-->
3523Style * TileCascadePlacement
3524
3525GlobalOpts ClickToFocusDoesntPassClick
3526-->
3527Style * ClickToFocusPassesClickOff
3528
3529GlobalOpts ClickToFocusPassesClick
3530-->
3531Style * ClickToFocusPassesClick
3532
3533GlobalOpts ClickToFocusDoesntRaise
3534-->
3535Style * ClickToFocusRaisesOff
3536
3537GlobalOpts ClickToFocusRaises
3538-->
3539Style * ClickToFocusRaises
3540
3541GlobalOpts MouseFocusClickDoesntRaise
3542-->
3543Style * MouseFocusClickRaisesOff
3544
3545GlobalOpts MouseFocusClickRaises
3546-->
3547Style * MouseFocusClickRaises
3548
3549GlobalOpts NoStipledTitles
3550-->
3551Style * !StippledTitle
3552
3553GlobalOpts StipledTitles
3554-->
3555Style * StippledTitle
3556
3557GlobalOpts CaptureHonorsStartsOnPage
3558-->
3559Style * CaptureHonorsStartsOnPage
3560
3561GlobalOpts CaptureIgnoresStartsOnPage
3562-->
3563Style * CaptureIgnoresStartsOnPage
3564
3565GlobalOpts RecaptureHonorsStartsOnPage
3566-->
3567Style * RecaptureHonorsStartsOnPage
3568
3569GlobalOpts RecaptureIgnoresStartsOnPage
3570-->
3571Style * RecaptureIgnoresStartsOnPage
3572
3573GlobalOpts ActivePlacementHonorsStartsOnPage
3574-->
3575Style * ManualPlacementHonorsStartsOnPage
3576
3577GlobalOpts ActivePlacementIgnoresStartsOnPage
3578-->
3579Style * ManualPlacementIgnoresStartsOnPage
3580
3581GlobalOpts RaiseOverNativeWindows
3582-->
3583BugOpts RaiseOverNativeWindows on
3584
3585GlobalOpts IgnoreNativeWindows
3586-->
3587BugOpts RaiseOverNativeWindows off
3588....
3589
3590*HilightColor* _textcolor_ _backgroundcolor_::
3591	This command is obsoleted by the *Style* options _HilightFore_ and
3592	_HilightBack_. Please use
3593+
3594
3595....
3596Style * HilightFore textcolor, HilightBack backgroundcolor
3597....
3598
3599+
3600instead.
3601
3602*HilightColorset* [_num_]::
3603	This command is obsoleted by the *Style* option _HilightColorset_.
3604	Please use
3605+
3606
3607....
3608Style * HilightColorset num
3609....
3610
3611+
3612instead.
3613
3614*IconFont* [_fontname_]::
3615	This command is obsoleted by the *Style* option _IconFont_. Please use
3616+
3617
3618....
3619Style * IconFont fontname
3620....
3621
3622+
3623instead.
3624
3625*IconPath* _path_::
3626	This command is obsolete. Please use *ImagePath* instead.
3627
3628*ImagePath* _path_::
3629	Specifies a colon separated list of directories in which to search for
3630	images (both monochrome and pixmap). To find an image given by a
3631	relative pathname, fvwm looks into each directory listed in turn, and
3632	uses the first file found.
3633+
3634If a directory is given in the form "/some/dir;.ext", this means all
3635images in this directory have the extension ".ext" that should be
3636forced. The original image name (that may contain another extension or
3637no extension at all) is not probed, instead ".ext" is added or
3638replaces the original extension. This is useful, for example, if a
3639user has some image directories with ".xpm" images and other image
3640directories with the same names, but ".png" images.
3641+
3642The _path_ may contain environment variables such as _$HOME_ (or
3643_$\{HOME}_). Further, a '+' in the _path_ is expanded to the previous
3644value of the path, allowing appending or prepending to the path
3645easily.
3646+
3647For example:
3648+
3649
3650....
3651ImagePath $HOME/icons:+:/usr/include/X11/bitmaps
3652....
3653
3654+
3655Note: if the *FvwmM4* module is used to parse your _config_ files,
3656then m4 may want to mangle the word "include" which frequently shows
3657up in the *ImagePath* command. To fix this one may add
3658+
3659
3660....
3661undefine(`include')
3662....
3663
3664+
3665prior to the *ImagePath* command, or better: use the *-m4-prefix*
3666option to force all *m4* directives to have a prefix of "m4_" (see the
3667*FvwmM4* man page).
3668
3669*LocalePath* _path_::
3670	Specifies a colon separated list of "locale path" in which to search
3671	for string translations. A locale path is constituted by a directory
3672	path and a text domain separated by a semicolon (';'). As an example
3673	the default locale path is:
3674+
3675
3676....
3677/install_prefix/share/locale;fvwm
3678....
3679
3680+
3681where install_prefix is the fvwm installation directory. With such a
3682locale path translations are searched for in
3683+
3684
3685....
3686/install_prefix/share/locale/lang/LC_MESSAGES/fvwm.mo
3687....
3688
3689+
3690where _lang_ depends on the locale. If no directory is given the
3691default directory path is assumed. If no text domain is given, *fvwm*
3692is assumed. Without argument the default locale path is restored.
3693+
3694As for the *ImagePath* command, _path_ may contain environment
3695variables and a '+' to append or prepend the locale path easily.
3696+
3697For example, the fvwm-themes package uses
3698+
3699
3700....
3701LocalePath ";fvwm-themes:+"
3702....
3703
3704+
3705to add locale catalogs.
3706+
3707The default fvwm catalog contains a few strings used by the fvwm
3708executable itself (Desk and Geometry) and strings used in some default
3709configuration files and *FvwmForm* configuration. You can take a look
3710at the po/ subdirectory of the fvwm source to get the list of the
3711strings with a possible translation in various languages. At present,
3712very few languages are supported.
3713+
3714The main use of locale catalogs is via the "$[gt.string]" parameter:
3715+
3716
3717....
3718DestroyMenu MenuFvwmWindowOps
3719AddToMenu   MenuFvwmWindowOps "$[gt.Window Ops]" Title
3720+ "$[gt.&Move]"              Move
3721+ "$[gt.&Resize]"            Resize
3722+ "$[gt.R&aise]"             Raise
3723+ "$[gt.&Lower]"             Lower
3724+ "$[gt.(De)&Iconify]"       Iconify
3725+ "$[gt.(Un)&Stick]"         Stick
3726+ "$[gt.(Un)Ma&ximize]"      Maximize
3727+ "" Nop
3728+ "$[gt.&Close]"             Close
3729+ "$[gt.&Destroy]"           Destroy
3730....
3731
3732+
3733gives a menu in the locale languages if translations are available.
3734+
3735Note that the *FvwmScript* module has a set of special instructions
3736for string translation. It is out of the scope of this discussion to
3737explain how to build locale catalogs. Please refer to the GNU gettext
3738documentation.
3739
3740*PixmapPath* _path_::
3741	This command is obsolete. Please use *ImagePath* instead.
3742
3743*PrintInfo* _subject_ [_verbose_]::
3744	Print information on _subject_ to debug log file, which defaults to
3745	_$HOME/.fvwm/fvwm3-output.log_ . Environment variables _$FVWM_USERDIR_
3746	and _$FVWM3_LOGFILE_ can alter this default. For this logfile to be
3747	written, either fvwm3 has to be started with *-v* option or *SIGUSR2*
3748	signal can be used to toggle opening/closing debug log file.
3749+
3750An optional integer argument to debug log file, which defaults to
3751_$HOME/.fvwm/fvwm3-output.log_ . Environment variables _$FVWM_USERDIR_
3752and _$FVWM3_LOGFILE_ can alter this default. For this logfile to be
3753written, either fvwm3 has to be started with *-v* option or *SIGUSR2*
3754signal can be used to toggle opening/closing debug log file.
3755+
3756An optional integer argument _verbose_ defines the level of
3757information which is given. The current valid subjects are:
3758+
3759_Colors_ which prints information about the colors used by fvwm. This
3760useful on screens which can only display 256 (or less) colors at once.
3761If _verbose_ is one or greater the palette used by fvwm is printed. If
3762you have a limited color palette, and you run out of colors, this
3763command might be helpful.
3764+
3765_ImageCache_ which prints information about the images loaded by fvwm.
3766If _verbose_ is one or greater all images in the cache will be listed
3767together with their respective reuse.
3768+
3769_Locale_ which prints information on your locale and the fonts that
3770fvwm used. _verbose_ can be 1 or 2.
3771+
3772_nls_ which prints information on the locale catalogs that fvwm used
3773+
3774_style_ which prints information on fvwm styles. _verbose_ can be 1.
3775+
3776_bindings_ which prints information on all the bindings fvwm has: key
3777and mouse bindings. _verbose_ has no effect with this option.
3778+
3779_infostore_ which prints information on all entries in the infostore,
3780listing the key and its value. _verbose_ has no effect with this
3781option.
3782
3783*Repeat*::
3784	When the *Repeat* command is invoked, the last command that was
3785	executed by fvwm is executed again. This happens regardless of whether
3786	it was triggered by user interaction, a module or by an X event.
3787	Commands that are executed from a function defined with the *Function*
3788	command, from the *Read* or *PipeRead* commands or by a menu are not
3789	repeated. Instead, the function, menu or the *Read* or *PipeRead*
3790	command is executed again.
3791
3792*Schedule* [Periodic] _delay_ms_ [_command_id_] _command_::
3793	The _command_ is executed after about _delay_ms_ milliseconds. This
3794	may be useful in some tricky setups. The _command_ is executed in the
3795	same context window as the *Schedule* command. An optional integer
3796	argument _command_id_ may be given in decimal, hexadecimal or octal
3797	format. This id can be used with the *Deschedule* command to remove
3798	the scheduled command before it is executed. If no id is given, fvwm
3799	uses negative id numbers, starting with -1 and decreasing by one with
3800	each use of the *Schedule* command. Note that the *Schedule* command
3801	and its arguments undergo the usual command line expansion, and, when
3802	_command_ is finally executed, it is expanded again. It may therefore
3803	be necessary to quote the parts of the command that must not be
3804expanded twice.
3805+
3806Note: A window's id as it is returned with $[w.id] can be used as the
3807_command_id_. Example:
3808+
3809
3810....
3811Current Schedule 1000 $[w.id] WindowShade
3812....
3813
3814+
3815The *Schedule* command also supports the optional keyword _Periodic_
3816which indicates that the _command_ should be executed every
3817_delay_ms_. Example:
3818+
3819
3820....
3821Schedule Periodic 10000 PipeRead '[ -N "$MAIL" ] && echo \
3822 Echo You have mail'
3823....
3824
3825+
3826Use the *Deschedule* command to stop periodic commands.
3827
3828*State* _state_ [_bool_]::
3829	Sets, clears or toggles one of the 32 user defined states which are associated
3830	with each window. The _state_ is a number ranging from 0 to 31. The states
3831	have no meaning in fvwm, but they can be checked in conditional commands like
3832	*Next* with the _State_ condition. The optional argument _bool_ is a boolean
3833	argument. "True" sets the given state, while "False" clears it. Using "toggle"
3834	switches to the opposite state. If the _bool_ argument is not given, the state
3835	is toggled.
3836
3837*WindowFont* [_fontname_]::
3838	This command is obsoleted by the *Style* option _Font_. Please use
3839+
3840....
3841Style * Font fontname
3842....
3843+
3844instead.
3845
3846*WindowList* [(_conditions_)] [_position_] [_options_] [_double-click-action_]::
3847	Generates a pop-up menu (and pops it up) in which the title and
3848	geometry of each of the windows currently on the desktop are shown.
3849+
3850The format of the geometry part is: _desk_(_layer_): _x-geometry_
3851_sticky_, where _desk_ and _layer_ are the corresponding numbers and
3852_sticky_ is empty or a capital S. The geometry of iconified windows is
3853shown in parentheses. Selecting an item from the window list pop-up
3854menu causes the interpreted function "WindowListFunc" to be run with
3855the window id of that window passed in as $0. The default
3856"WindowListFunc" looks like this:
3857+
3858
3859....
3860AddToFunc WindowListFunc
3861+ I Iconify off
3862+ I FlipFocus
3863+ I Raise
3864+ I WarpToWindow 5p 5p
3865....
3866
3867+
3868You can destroy the built-in "WindowListFunc" and create your own if
3869these defaults do not suit you.
3870+
3871The window list menu uses the "WindowList" menu style if it is defined
3872(see *MenuStyle* command). Otherwise the default menu style is used.
3873To switch back to the default menu style, issue the command
3874+
3875
3876....
3877DestroyMenuStyle WindowList
3878....
3879
3880+
3881Example:
3882+
3883
3884....
3885MenuStyle WindowList SelectOnRelease Meta_L
3886....
3887
3888+
3889The _conditions_ can be used to exclude certain windows from the
3890window list. Please refer to the *Current* command for details. Only
3891windows that match the given conditions are displayed in the window
3892list. The _options_ below work vice versa: windows that would
3893otherwise not be included in the window list can be selected with
3894them. The _conditions_ always override the _options_.
3895+
3896The _position_ arguments are the same as for *Menu*. The command
3897_double-click-action_ is invoked if the user double-clicks (or hits
3898the key rapidly twice if the menu is bound to a key) when bringing the
3899window list. The _double-click-action_ must be quoted if it consists
3900of more than one word.
3901+
3902The _double-click-action_ is useful to define a default window if you
3903have bound the window list to a key (or button) like this:
3904+
3905
3906....
3907# Here we call an existing function, but
3908# it may be different.  See the default
3909# WindowListFunc definition earlier in this
3910# man page.
3911AddToFunc SwitchToWindow
3912+ I WindowListFunc
3913
3914Key Tab A M WindowList "Prev SwitchToWindow"
3915....
3916
3917+
3918Hitting Alt-Tab once it brings up the window list, if you hit it twice the
3919focus is flipped between the current and the last focused window. With the
3920proper _SelectOnRelease_ menu style (see example above) a window is selected
3921as soon as you release the Alt key.
3922+
3923The _options_ passed to WindowList are separated by commas and can be
3924_Geometry_ / _NoGeometry_ / _NoGeometryWithInfo_, _NoDeskNum,_
3925_NoLayer,_ _NoNumInDeskTitle_, _NoCurrentDeskTitle_, _MaxLabelWidth
3926width_, _TitleForAllDesks_, _Function funcname_, _Desk desknum_,
3927_CurrentDesk_, _NoIcons_ / _Icons_ / _OnlyIcons_, _NoNormal_ /
3928_Normal_ / _OnlyNormal_, _NoSticky_ / _Sticky_ / _OnlySticky_,
3929_NoStickyAcrossPages_ / _StickyAcrossPages_ / _OnlyStickyAcrossPages_,
3930_NoStickyAcrossDesks_ / _StickyAcrossDesks_ / _OnlyStickyAcrossDesks_,
3931_NoOnTop_ / _OnTop_ / _OnlyOnTop_, _NoOnBottom_ / _OnBottom_ /
3932_OnlyOnBottom_, _Layer m [n]_, _UseSkipList_ / _OnlySkipList_,
3933_NoDeskSort_, _ReverseOrder_, _CurrentAtEnd_, _IconifiedAtEnd_,
3934_UseIconName_, _Alphabetic_ / _NotAlphabetic_, _SortByResource_,
3935_SortByClass_, _NoHotkeys_, _SelectOnRelease_.
3936+
3937(Note - normal means not iconic, sticky, or on top)
3938+
3939With the _SortByResource_ option windows are alphabetically sorted
3940first by resource class, then by resource name and then by window name
3941(or icon name if _UseIconName_ is specified). _ReverseOrder_ also
3942works in the expected manner.
3943+
3944With the _SortByClass_ option windows are sorted just like with
3945_SortByResource_, but the resource name is not taken into account,
3946only the resource class.
3947+
3948The _SelectOnRelease_ option works exactly like the *MenuStyle* option
3949with the same name, but overrides the option given in a menu style. By
3950default, this option is set to the left
3951+
3952key. To switch it off, use _SelectOnRelease_ without a key name.
3953+
3954If you pass in a function via *Function* funcname, it is called within
3955a window context of the selected window:
3956+
3957
3958....
3959AddToFunc IFunc I Iconify toggle
3960WindowList Function IFunc, NoSticky, CurrentDesk, NoIcons
3961....
3962
3963+
3964If you use the _Layer_ _m_ [_n_] option, only windows in layers
3965between m and n are displayed. n defaults to m. With the
3966_ReverseOrder_ option the order of the windows in the list is
3967reversed.
3968+
3969With the _CurrentAtEnd_ option the currently focused window (if any)
3970is shown at the bottom of the list. This is mostly intended for
3971simulating the Alt-Tab behavior in another GUI.
3972+
3973_IconifiedAtEnd_ makes iconified windows be moved to the end of the
3974list. This is also from another GUI.
3975+
3976The _NoGeometry_ option causes fvwm to not display the geometries as
3977well as the separators which indicate the different desktops.
3978_NoGeometryWithInfo_ removes the geometries, but keep the desktop
3979information and indicates iconic windows. _NoDeskNum_ causes fvwm to
3980not display the desktop number in the geometry or before the window
3981title with the _NoGeometryWithInfo_ option. _NoNumInDeskTitle_ is only
3982useful if a desktop name is defined with the *DesktopName* command. It
3983causes fvwm to not display the desktop number before the desktop name.
3984By default, the WindowList menu have a title which indicates the
3985current desk or the selected desktop if the _Desk_ condition is used.
3986The _NoCurrentDeskTitle_ option removes this title. _TitleForAllDesks_
3987causes fvwm to add a menu title with the desk name and/or number
3988before each group of windows on the same desk. With _NoLayer_, the
3989layer of the window is not displayed. The options _ShowPage_,
3990_ShowPageX_ and _ShowPageY_ enable displaying the page of the window
3991rounded multiples of the display size. With _ShowScreen_, the window's
3992screen name is displayed.
3993+
3994The _MaxLabelWidth_ option takes the number of characters to print as
3995its argument. No more than that many characters of the window name are
3996visible.
3997+
3998If you wanted to use the *WindowList* as an icon manager, you could
3999invoke the following:
4000+
4001
4002....
4003WindowList OnlyIcons, Sticky, OnTop, Geometry
4004....
4005
4006+
4007(Note - the _Only_ options essentially wipe out all other ones... but
4008the _OnlyListSkip_ option which just causes *WindowList* to only
4009consider the windows with _WindowListSkip_ style.)
4010
4011*XSync*::
4012	When *XSync* is called, the X function with the same name is used to
4013	send all pending X requests to the server. This command is intended
4014	for debugging only.
4015
4016*XSynchronize* [bool]::
4017	The *XSynchronize* command controls whether X requests are sent to the
4018	X server immediately or not. Normally, requests are sent in larger
4019	batches to save unnecessary communication. To send requests
4020	immediately, use "True" as the argument, to disable this use "False"
4021	or to toggle between both methods use "Toggle" or omit the *bool*
4022	argument. Fvwm defaults to synchronized requests when started with the
4023	*--debug* option. This command is intended for debugging only.
4024
4025*+*::
4026	Used to continue adding to the last specified decor, function or menu.
4027	See the discussion for *AddToDecor*, *AddToFunc*, and *AddToMenu*.
4028
4029=== Window Movement and Placement
4030
4031*AnimatedMove* _x_ _y_ [Warp]::
4032	Move a window in an animated fashion. Similar to *Move* command. The
4033	options are the same, except they are required, since it doesn't make
4034	sense to have a user move the window interactively and animatedly. If
4035	the optional argument _Warp_ is specified the pointer is warped with
4036	the window.
4037
4038*GeometryWindow* Hide | Show | Colorset _n_ | Position _x_ _y_ | Screen _S_::
4039	Configures the position or size window that is usually shown when a
4040	window is moved or resized interactively. This can be used to hide,
4041	show, change the colorset, change the location, or change the screen
4042	of the geometry window. Multiple options can be set at once separated
4043	by spaces. Details of each option are described below.
4044+
4045> *GeometryWindow* Hide [Never | Move | Resize]
4046+
4047Hides or switches off the geometry window. If the optional parameters _Move_
4048or _Resize_ are given, it will only hide the geometry window during the
4049respective operation. The parameter _Never_ will switch the geometry back on
4050again (equivalent to _Show_).
4051+
4052> *GeometryWindow* Show [Never | Move | Resize]
4053+
4054Shows or switches on the geometry window (equivalent to _Hide Never_). If
4055the optional parameters _Move_ or _Resize_ are given, it will only show the
4056geometry window during the respective operation. The parameter _Never_ will
4057switch the geometry window off (equivalent to _Hide_).
4058+
4059> *GeometryWindow* Colorset _cset_
4060+
4061Sets colorset of the gometry window to _cset_. Use the literal option
4062_default_ for _cset_ to use the default colorset.
4063+
4064> *GeometryWindow* Position \[\+|-]_x_[p] \[+|-]_y_[p]
4065+
4066Configures the position the geometry window appears. _x_ and _y_ are the
4067relative coordinates as a percentage of the screen size. If a leading '-'
4068is provided the coordinates are computed from the left/bottom of the screen
4069respectively. If the coordinates are appended with a 'p', they are interpreted
4070as the number of pixels from the respective screen edge. If no position
4071arguments are given, the geometry window's position will return to its default
4072state of the upper left corner or the center if emulating MWM.
4073+
4074> *GeometryWindow* Screen _RANDRNAME_
4075+
4076Configure which screen the geometry window is shown on. By default the
4077geometry window is shown on the current screen. If a valid _RANDRNAME_
4078is provided, the geometry window will always be shown on that screen.
4079Use _current_ as the _RANDRNAME_ to return the default.
4080+
4081Examples:
4082+
4083
4084....
4085# Position the geometry window in the center of the screen
4086GeometryWindow Position 50 50
4087# Position the geometry window next to the RightPanel
4088GeometryWindow Position -120p 0
4089# Use colorset 2 for the geometry window
4090GeometryWindow Colorset 2
4091# Only show the geometry window on the primary monitor
4092GeometryWindow Screen $[monitor.primary]
4093# Hide the geometry window
4094GeometryWindow Hide
4095....
4096
4097
4098*HideGeometryWindow* [Never | Move | Resize]::
4099	This command has been depreciated and is now obsolete. Use
4100        *GeometryWindow Hide* instead.
4101
4102*Layer* [_arg1_ _arg2_] | [default]::
4103	Puts the current window in a new layer. If _arg1_ is non zero then the
4104	next layer is the current layer number plus _arg1_. If _arg1_ is zero
4105	then the new layer is _arg2_.
4106+
4107As a special case, _default_ puts the window in its default layer,
4108i.e. the layer it was initially in. The same happens if no or invalid
4109arguments are specified.
4110
4111*Lower*::
4112	Allows the user to lower a window. Note that this lowers a window only
4113	in its layer. To bring a window to the absolute bottom, use
4114+
4115
4116....
4117AddToFunc lower-to-bottom
4118 + I Layer 0 0
4119 + I Lower
4120....
4121
4122*Move* [_options_]::
4123	Allows the user to move a window. If called from somewhere in a
4124	window or its border, then that window is moved. If called from
4125	the root window, then the user is allowed to select the target
4126	window.	Move can be called with various options to either start
4127	an interactive move, specify the position to move, or a direction.
4128+
4129Calling *Move* by itself with no options starts an interactive move.
4130When moving a window interactively, the window may snap to other windows
4131and screen boundaries, configurable via the *SnapAttraction* style. Holding
4132down _Alt_ whilst moving the window will disable snap attraction during
4133the move. Moving a window to the edge of the screen can be used to drag the
4134window to other pages, see *EdgeScroll*, and the *EdgeMoveDelay* style
4135for more information.
4136+
4137The interactive move operation can be aborted with Escape
4138or any mouse button not set to place the window. By default mouse
4139button 2 is set to cancel the move operation. To change this you may
4140use the *Mouse* command with special context 'P' for Placement.
4141+
4142The window condition _PlacedByButton_ can be used to check if a
4143specific button was pressed to place the window (see *Current*
4144command).
4145+
4146If the single argument _pointer_ is given, the top left corner of the
4147window is moved to the pointer position before starting an interactive
4148move; this is mainly intended for internal use by modules like *FvwmPager*.
4149+
4150
4151> *Move* pointer
4152
4153+
4154To move a window in a given direction until it hits another window, icon,
4155or screen boundary use:
4156+
4157
4158> *Move* shuffle [Warp] [snap _type_] [layers _min_ _max_] _direction_(s)
4159
4160+
4161The _direction_ can be _North_/_N_/_Up_/_U_, _East_/_E_/_Right_/_R_,
4162_South_/_S_/_Down_/_D_, or _West_/_W_/_Left_/_L_. The window will move
4163in the given direction until it hits another window, the *EwmhBaseStruts*,
4164or the screen boundary. If multiple _direction_(s) are given, the window
4165will move the directions in the order of the sequence stated.
4166+
4167The literal option _Warp_ will warp the mouse pointer to the window.
4168If the literal option _snap_ followed by a snap _type_ of _windows_,
4169_icons_, or _same_ is given, then the window will only stop if it hits
4170another window, icon, or the same type. If the literal option _layers_
4171followed by a _min_ layer and _max_ layer is given, then only windows on
4172the layers between _min_ and _max_ layers will stop the window. For example:
4173+
4174
4175....
4176# Shuffle the window Right.
4177Move shuffle Right
4178# Shuffle Up, only consider windows on Layer 3.
4179Move shuffle layers 3 3 Up
4180# Shuffle Left then Up
4181Move shuffle Left Up
4182# Shuffle Up then Left (may not be same position as above)
4183Move shuffle Up Left
4184....
4185
4186+
4187*Move* can be used to moved a window to a specified position:
4188+
4189
4190> *Move* [screen _S_] \[w | m]_x_[p | w] \[w | m]_y_[p | w] [Warp] [ewmhiwa]
4191
4192+
4193This will move the window to the _x_ and _y_ position (see below).
4194By default, the EWMH working area is honoured. If he trailing option
4195_ewmhiwa_ is given, then the window position will ignore the working
4196area (such as ignoring any values set via *EwmhBaseStruts*). If the
4197option _Warp_ is given then the pointer is warped to the window.
4198+
4199If the literal option _screen_ followed by a RandR screen name _S_ is
4200specified, the coordinates are interpreted as relative to the given
4201screen. The width and height of the screen are used for the
4202calculations instead of the display dimensions. The _screen_ is
4203interpreted as in the *MoveToScreen* command.
4204+
4205The positional arguments _x_ and _y_ can specify an absolute or relative
4206position from either the left/top or right/bottom of the screen. By default,
4207the numeric value given is interpreted as a percentage of the screen
4208width/height, but a trailing '_p_' changes the interpretation to mean pixels,
4209while a trailing '_w_' means percent of the window width/height. To move the
4210window relative to its current position, add the '_w_' (for "window") prefix
4211before the _x_ and/or _y_ value. To move the window to a position relative to
4212the current location of the pointer, add the '_m_' (for "mouse") prefix. To
4213leave either coordinate unchanged, "_keep_" can be specified in place of
4214_x_ or _y_.
4215+
4216For advanced uses, the arguments _x_ and _y_ can be used multiple
4217times, but without the prefix '_m_' or '_w_'. (See complex examples
4218below).
4219+
4220Simple Examples:
4221+
4222
4223....
4224# Interactive move
4225Mouse 1 T A Move
4226# Move window to top left is at (10%,10%)
4227Mouse 2 T A Move 10 10
4228# Move top left to (10pixels,10pixels)
4229Mouse 3 T A Move 10p 10p
4230....
4231
4232+
4233More complex examples (these can be bound as actions to keystrokes,
4234etc.; only the command is shown, though):
4235+
4236
4237....
4238# Move window so bottom right is at bottom
4239# right of screen
4240Move -0 -0
4241
4242# Move window so top left corner is 10 pixels
4243# off the top left screen edge
4244Move +-10 +-10
4245
4246# Move window 5% to the right, and to the
4247# middle vertically
4248Move w+5 50
4249
4250# Move window up 10 pixels, and so left edge
4251# is at x=40 pixels
4252Move 40p w-10p
4253
4254# Move window to the mouse pointer location
4255Move m+0 m+0
4256
4257# Move window to center of screen (50% of screen
4258# position minus 50% of widow size).
4259Move 50-50w 50-50w
4260....
4261
4262+
4263See also the *AnimatedMove* command.
4264+
4265
4266*MoveToDesk* [prev | _arg1_ [_arg2_] [_min_ _max_]]::
4267	Moves the selected window to another desktop. The arguments are the
4268	same as for the *GotoDesk* command. Without any arguments, the window
4269	is moved to the current desk. *MoveToDesk* is a replacement for the
4270	obsolete *WindowsDesk* command, which can no longer be used.
4271
4272*MoveThreshold* [_pixels_]::
4273	When the user presses a mouse button upon an object fvwm waits to see
4274	if the action is a click or a drag. If the mouse moves by more than
4275	_pixels_ pixels it is assumed to be a drag.
4276+
4277Previous versions of fvwm hardwired _pixels_ to 3, which is now the
4278default value. If _pixels_ is negative or omitted the default value
4279(which might be increased when 16000x9000 pixel displays become
4280affordable) is restored.
4281
4282*MoveToPage* [_options_] [_x_[p | w] _y_[p | w]] | [prev]::
4283	Moves the selected window to another page (_x_,_y_). The upper left
4284	page is (0,0), the upper right is (M,0), where M is one less than the
4285	current number of horizontal pages specified in the *DesktopSize*
4286	command. Similarly the lower left page is (0,N), and the lower right
4287	page is (M,N). Negative page numbers refer to pages from the
4288	rightmost/lowest page. If _x_ and _y_ are not given, the window is
4289	moved to the current page (a window that has the focus but is
4290	off-screen can be retrieved with this). Moving windows to a page
4291	relative to the current page can be achieved by adding a trailing
4292	'_p_' after any or both numerical arguments. To move the window
4293	relative to its current location, add a trailing '_w_'. To move a
4294	window to the previous page use _prev_ as the single argument.
4295+
4296Windows are usually not moved beyond desk boundaries.
4297+
4298Possible _options_ are _wrapx_ and _wrapy_ to wrap around the x or y
4299coordinate when the window is moved beyond the border of the desktop.
4300For example, with _wrapx_, when the window moves past the right edge
4301of the desktop, it reappears on the left edge. The options
4302_nodesklimitx_ and _nodesklimity_ allow moving windows beyond the desk
4303boundaries in x and y direction (disabling the _wrapx_ and _wrapy_
4304options).
4305+
4306Examples:
4307+
4308
4309....
4310# Move window to page (2,3)
4311MoveToPage 2 3
4312
4313# Move window to lowest and rightmost page
4314MoveToPage -1 -1
4315
4316# Move window to last page visited
4317MoveToPage prev
4318
4319# Move window two pages to the right and one
4320# page up, wrap at desk boundaries
4321MoveToPage wrapx wrapy +2p -1p
4322....
4323
4324*MoveToScreen* [_screen_]::
4325	Moves the selected window to another screen. The _screen_ argument
4326	must be a valid RandR name.
4327
4328*OpaqueMoveSize* [_percentage_]::
4329	Tells fvwm the maximum size window with which opaque window movement
4330	should be used. The percentage is percent of the total screen area
4331	(may be greater than 100). With
4332+
4333
4334....
4335OpaqueMoveSize 0
4336....
4337
4338+
4339all windows are moved using the traditional rubber-band outline. With
4340+
4341
4342....
4343OpaqueMoveSize unlimited
4344....
4345
4346+
4347or if a negative percentage is given all windows are moved as solid
4348windows. The default is
4349+
4350
4351....
4352OpaqueMoveSize 5
4353....
4354
4355+
4356which allows small windows to be moved in an opaque manner but large
4357windows are moved as rubber-bands. If _percentage_ is omitted or
4358invalid the default value is set. To resize windows in an opaque
4359manner you can use the _ResizeOpaque_ style. See the *Style* command.
4360
4361*PlaceAgain* [Anim] [Icon]::
4362	Causes the current window's position to be re-computed using the
4363	initial window placement logic. The window is moved to where it would
4364	have been if it were a new window that had just appeared. Most useful
4365	with _Smart_ or _Clever_ (_ReallySmart_) placement. With the optional
4366	argument _Anim_ an animated move is used to place the window in its
4367	new position. With the additional option _Icon_, the icon is placed
4368	again instead.
4369
4370*Raise*::
4371	Allows the user to raise a window. Note that this raises a window only
4372	in its layer. To bring a window to the absolute top, use
4373+
4374
4375....
4376AddToFunc raise-to-top
4377 + I Layer 0 ontop
4378 + I Raise
4379....
4380
4381+
4382where ontop is the highest layer used in your setup.
4383
4384*RaiseLower*::
4385	Alternately raises and lowers a window. The window is raised if it is
4386	obscured by any window (except for its own transients when
4387	_RaiseTransient_ style is used; see the *Style* command) otherwise it
4388	is lowered.
4389
4390*Resize* [[frame] [direction _dir_] [warptoborder _automatic_] [fixeddirection] [w]_width_[p | c | wa | da] [w]_height_[p | c]]::
4391	Allows for resizing a window. If called from somewhere in a window or
4392	its border, then that window is resized. If called from the root
4393	window then the user is allowed to select the target window.
4394+
4395The operation can be aborted with
4396+
4397or by pressing any mouse button (except button 1 which confirms it).
4398+
4399If the optional arguments _width_ and _height_ are provided, then the
4400window is resized so that its dimensions are _width_ by _height_. The
4401units of _width_ and _height_ are percent-of-screen, unless a letter
4402'_p_' is appended to one or both coordinates, in which case the
4403location is specified in pixels. With a '_c_' suffix the unit defined
4404by the client application (hence the c) is used. With the suffix
4405'_wa_' the value is a percentage of the width or height size of the
4406EWMH working area, and with the suffix '_da_' it is a percentage of
4407the width or height of the EWMH dynamic working area. So you can say
4408+
4409
4410....
4411Resize 80c 24c
4412....
4413
4414+
4415to make a terminal window just big enough for 80x24 characters.
4416+
4417If the _width_ or _height_ is prefixed with the letter '_w_' the size
4418is not taken as an absolute value but added to the current size of the
4419window. Example:
4420+
4421
4422....
4423# Enlarge window by one line
4424Resize keep w+1c
4425....
4426
4427+
4428Both, _width_ and _height_ can be negative. In this case the new size
4429is the screen size minus the given value. If either value is "_keep_",
4430the corresponding dimension of the window is left untouched. The new
4431size is the size of the client window, thus
4432+
4433
4434....
4435Resize 100 100
4436....
4437
4438+
4439may make the window bigger than the screen. To base the new size on
4440the size of the whole fvwm window, add the _frame_ option after the
4441command. The options _fixeddirection_, _direction_ and _warptoborder_
4442are only used in interactive move operations. With _fixeddirection_
4443the same border is moved even if the pointer moves past the opposite
4444border. The _direction_ option must be followed by a direction name
4445such as "NorthWest", "South" or "East" (you get the idea). Resizing is
4446started immediately, even if the pointer is not on a border. If the
4447special option _automatic_ is given as a direction argument, then the
4448direction to resize is calculated based on the position of the pointer
4449in the window. If the pointer is in the middle of the window, then no
4450direction is calculated. The _warptoborder_ option can be used to warp
4451the pointer to the direction indicated. As with the _automatic_ option
4452for _direction_, the border to warp to is calculated based on the
4453pointer's proximity to a given border. Also, if resizing is started by
4454clicking on the window border, the pointer is warped to the outer edge
4455of the border.
4456+
4457
4458....
4459AddToFunc ResizeSE I Resize Direction SE
4460Mouse 3 A M ResizeSE
4461....
4462
4463*Resize* [bottomright | br _x_ _y_]::
4464	An alternate syntax is used if the keyword _bottomright_ or in short
4465	_br_ follows the command name. In this case, the arguments _x_ and _y_
4466	specify the desired position of the bottom right corner of the window.
4467	They are interpreted exactly like the _x_ and _y_ arguments of the *Move*
4468	command. Actually, any of the options accepted by the *Move* command can
4469	be used.
4470
4471*ResizeMaximize* [_resize-arguments_]::
4472	Combines the effects of *Resize* and *Maximize* in a single command.
4473	When used on a maximized window, the window is resized and is still in
4474	the maximized state afterwards. When used on an unmaximized window,
4475	the window is resized and put into the maximized state afterwards.
4476	This is useful if the user wants to resize the window temporarily and
4477	then return to the original geometry. The _resize-arguments_ are the
4478	same as for the *Resize* command.
4479
4480*ResizeMove* _resize-arguments_ _move-arguments_::
4481	This command does the same as the *Resize* and *Move* commands, but in
4482	a single call which is less visually disturbing. The
4483	_resize-arguments_ are exactly the same arguments as for the *Resize*
4484	command and the _move-arguments_ are exactly the same arguments as for
4485	the *Move* command except the _pointer_ option which is not supported
4486	by the *ResizeMove* command.
4487+
4488Examples:
4489+
4490
4491....
4492# Move window to top left corner and cover
4493# most of the screen
4494ResizeMove -10p -20p 0 0
4495
4496# Grow the focused window towards the top of screen
4497Current Resize keep w+$[w.y]p keep 0
4498....
4499
4500+
4501Note: Fvwm may not be able to parse the command properly if the option
4502_bottomright_ of the *Resize* command is used.
4503
4504*ResizeMoveMaximize* _resize-arguments_ _move-arguments_::
4505	Combines the effects of *ResizeMove* and *Maximize* in a single
4506	command. When used on a maximized window, the window is resized and
4507	moved and is still in the maximized state afterwards. When used on an
4508	unmaximized window, the window is resized and put into the maximized
4509	state afterwards. This is useful if the user wants to resize the
4510	window temporarily and then return to the original geometry. The
4511	_resize-arguments_ and _move-arguments_ are the same as for the
4512	*ResizeMove* command.
4513
4514*RestackTransients*::
4515	This command regroups the transients of a window close to it in the
4516	stacking order as if the window had just been lowered and then raised.
4517	The position of the window itself is not altered. Only windows that
4518	use either the _RaiseTransient_ or _LowerTransient_ style are affected
4519	at all. When *RestackTransients* is used on a transient window with
4520	the _StackTransientParent_ style set, it is redirected to the parent
4521	window.
4522
4523*SetAnimation* _milliseconds-delay_ [_fractions-to-move-list_]::
4524	Sets the time between frames and the list of fractional offsets to
4525	customize the animated moves of the *AnimatedMove* command and the
4526	animation of menus (if the menu style is set to animated; see
4527	*MenuStyle* command). If the _fractions-to-move-list_ is omitted, only
4528	the time between frames is altered. The _fractions-to-move-list_
4529	specifies how far the window should be offset at each successive frame
4530	as a fraction of the difference between the starting location and the
4531	ending location. e.g.:
4532+
4533
4534....
4535SetAnimation 10 -.01 0 .01 .03 .08 .18 .3 \
4536.45 .6 .75 .85 .90 .94 .97 .99 1.0
4537....
4538
4539+
4540Sets the delay between frames to 10 milliseconds, and sets the
4541positions of the 16 frames of the animation motion. Negative values
4542are allowed, and in particular can be used to make the motion appear
4543more cartoonish, by briefly moving slightly in the opposite direction
4544of the main motion. The above settings are the default.
4545
4546*SnapAttraction* [_proximity_ [_behaviour_] [Screen]]::
4547	The *SnapAttraction* command is obsolete. It has been replaced by the
4548	*Style* command option _SnapAttraction_.
4549
4550*SnapGrid* [_x-grid-size_ _y-grid-size_]::
4551	The *SnapGrid* command is obsolete. It has been replaced by the
4552	*Style* command option _SnapGrid_.
4553
4554*WindowsDesk* _arg1_ [_arg2_]::
4555	Moves the selected window to another desktop.
4556+
4557This command has been removed and must be replaced by *MoveToDesk*,
4558the arguments for which are the same as for the *GotoDesk* command.
4559+
4560 +
4561*Important*
4562+
4563You cannot simply change the name of the command: the syntax has
4564changed. If you used:
4565+
4566
4567....
4568WindowsDesk n
4569....
4570
4571+
4572to move a window to desk n, you have to change it to:
4573+
4574
4575....
4576MoveToDesk 0 n
4577....
4578
4579*XorPixmap* [_pixmap_]::
4580	Selects the pixmap with which bits are xor'ed when doing rubber-band
4581	window moving or resizing. This has a better chance of making the
4582	rubber-band visible if *XorValue* does not give good results. An
4583	example pixmap _resize.rainbow.xpm_ is provided with the icon
4584	distribution. To turn the _XorPixmap_ off again use the *XorValue*
4585	command or omit the _pixmap_ argument.
4586
4587*XorValue* [_number_]::
4588	Changes the value with which bits are xor'ed when doing rubber-band
4589	window moving or resizing. Valid values range from zero to the maximum
4590	value of an unsigned long integer on your system. Setting this value
4591	is a trial-and-error process. The default value 0 tries to find a
4592	value that gives a good contrast to black and white. The default value
4593	is used if the given _number_ is omitted or invalid.
4594
4595=== Focus & Mouse Movement
4596
4597*CursorMove* _horizontal_[p] _vertical_[p]::
4598	Moves the mouse pointer by _horizontal_ pages in the X direction and
4599	_vertical_ pages in the Y direction. Either or both entries may be
4600	negative. CursorMove can only move the mouse cursor to a relative
4601	position. To move the mouse cursor to an absolute position, see
4602	*WarpToWindow*. Both horizontal and vertical values are expressed in
4603	percent of pages, so
4604+
4605
4606....
4607CursorMove 100 100
4608....
4609
4610+
4611means to move down and right by one full page.
4612+
4613
4614....
4615CursorMove 50 25
4616....
4617
4618+
4619means to move right half a page and down a quarter of a page.
4620Alternatively, the distance can be specified in pixels by appending a
4621'_p_' to the horizontal and/or vertical specification. For example
4622+
4623
4624....
4625CursorMove -10p -10p
4626....
4627
4628+
4629means move ten pixels up and ten pixels left. The CursorMove function
4630should not be called from pop-up menus.
4631
4632*FlipFocus* [NoWarp]::
4633	Executes a *Focus* command as if the user had used the pointer to
4634	select the window. This command alters the order of the WindowList in
4635	the same way as clicking in a window to focus, i.e. the target window
4636	is removed from the *WindowList* and placed at the start. This command
4637	is recommended for use with the *Direction* command and in the
4638	function invoked from *WindowList*.
4639
4640*Focus* [NoWarp]::
4641	Sets the keyboard focus to the selected window. If the _NoWarp_
4642	argument is given, this is all it does. Otherwise it also moves the
4643	viewport or window as needed to make the selected window visible. This
4644	command does not automatically raise the window. Does not warp the
4645	pointer into the selected window (see *WarpToWindow* function). Does
4646	not de-iconify. This command does not alter the order of the
4647	*WindowList*, it rotates the *WindowList* around so that the target
4648	window is at the start.
4649+
4650When the _NoWarp_ argument is given, Focus cannot transfer the
4651keyboard focus to windows on other desks.
4652+
4653To raise and/or warp a pointer to a window together with *Focus* or
4654*FlipFocus*, use a function, like:
4655+
4656
4657....
4658AddToFunc SelectWindow
4659+ I Focus
4660+ I Iconify false
4661+ I Raise
4662+ I WarpToWindow 50 8p
4663....
4664
4665*WarpToWindow* [!raise | raise] _x_[p] _y_[p]::
4666	Warps the cursor to the associated window and raises it (unless the
4667	option _!raise_ is present). The parameters _x_ and _y_ default to
4668	percentage of window down and in from the upper left hand corner (or
4669	number of pixels down and in if '_p_' is appended to the numbers). If
4670	a number is negative the opposite edge is used and the direction
4671	reversed. This command works also with windows that are not managed by
4672	fvwm. In this case fvwm does not bring the window onto the screen if
4673	it is not visible. For example it is possible to warp the pointer to
4674	the center of the root window on screen 1:
4675+
4676
4677....
4678WindowId root 1 WarpToWindow 50 50
4679....
4680
4681
4682=== Window State
4683
4684*Close*::
4685	If the window accepts the delete window protocol a message is sent to
4686	the window asking it to gracefully remove itself. If the window does
4687	not understand the delete window protocol then the window is destroyed
4688	as with the *Destroy* command. Note: if the window accepts the delete
4689	window protocol but does not close itself in response, the window is
4690	not deleted.
4691
4692*Delete*::
4693	Sends a message to a window asking that it remove itself, frequently
4694	causing the application to exit.
4695
4696*Destroy*::
4697	Destroys an application window, which usually causes the application
4698	to crash and burn.
4699
4700*Iconify* [_bool_]::
4701	Iconifies a window if it is not already iconified or de-iconifies it
4702	if it is already iconified. The optional argument _bool_ is a boolean
4703	argument. "_True_" means only iconification is allowed, while
4704	"_False_" forces de-iconification. Using "_toggle_" switches between
4705	iconified and de-iconified states.
4706+
4707There are a number of *Style* options which influence the appearance
4708and behavior of icons (e.g. _StickyIcon_, _NoIcon_).
4709+
4710For backward compatibility, the optional argument may also be a
4711positive number instead of "True", or a negative number instead of
4712"False". Note that this syntax is obsolete, and will be removed in the
4713future.
4714
4715*Maximize* [_flags_] [_bool | forget_] [_horizontal_[p]] [_vertical_[p]]::
4716	Without its optional arguments (or if the _bool_ bit has the value
4717	"_toggle_") *Maximize* causes the window to alternately switch from a
4718	full-screen size to its normal size. To force a window into maximized
4719	(normal) state you can use a "_True_" or "_False_" value for the
4720	_bool_ argument.
4721+
4722With just the parameter "forget" a maximized window reverts back into
4723normal state but keeps its current maximized size. This can be useful
4724in conjunction with the commands *ResizeMaximize* and
4725*ResizeMoveMaximize*. If the window is not maximized, nothing happens.
4726+
4727With the optional arguments _horizontal_ and _vertical_, which are
4728expressed as percentage of a full screen, the user can control the new
4729size of the window. An optional suffix '_p_' can be used to indicate
4730pixels instead of percents of the screen size. If horizontal is
4731greater than 0 then the horizontal dimension of the window is set to
4732_horizontal_*screen_width/100. If the value is smaller than 0 the size
4733is subtracted from the screen width, i.e. -25 is the same as 75. If
4734_horizontal_ is "_grow_", it is maximized to curren available space
4735until finding any obstacle. The vertical resizing is similar. If both
4736horizontal and vertical values are "grow", it expands vertically
4737first, then horizontally to find space. Instead of the horizontal
4738"grow" argument, "_growleft_" or "_growright_" can be used
4739respectively "_growup_" and "_growdown_". The optional _flags_
4740argument is a space separated list containing the following key words:
4741_fullscreen_, _ewmhiwa_, _growonwindowlayer_, _growonlayers_ and
4742_screen_. _fullscreen_ causes the window to become fullscreened if the
4743appropriate EWMH hint is set. _ewmhiwa_ causes fvwm to ignore the EWMH
4744working area. _growonwindowlayer_ causes the various grow methods to
4745ignore windows with a layer other than the current layer of the window
4746which is maximized. The _growonlayers_ option must have two integer
4747arguments. The first one is the minimum layer and the second one the
4748maximum layer to use. Windows that are outside of this range of layers
4749are ignored by the grow methods. A negative value as the first or
4750second argument means to assume no minimum or maximum layer. _screen_
4751must have an argument which specifies the screen on which to operate.
4752+
4753Here are some examples. The following adds a title-bar button to
4754switch a window to the full vertical size of the screen:
4755+
4756
4757....
4758Mouse 0 4 A Maximize 0 100
4759....
4760
4761+
4762The following causes windows to be stretched to the full width:
4763+
4764
4765....
4766Mouse 0 4 A Maximize 100 0
4767....
4768
4769+
4770This makes a window that is half the screen size in each direction:
4771+
4772
4773....
4774Mouse 0 4 A Maximize 50 50
4775....
4776
4777+
4778To expand a window horizontally until any other window is found:
4779+
4780
4781....
4782Mouse 0 4 A Maximize 0 grow
4783....
4784
4785+
4786To expand a window until any other window on the same or a higher
4787layer is hit.
4788+
4789
4790....
4791Mouse 0 4 A Maximize growonlayers $[w.layer] -1 grow grow
4792....
4793
4794+
4795To expand a window but leave the lower 60 pixels of the screen
4796unoccupied:
4797+
4798
4799....
4800Mouse 0 4 A Maximize 100 -60p
4801....
4802
4803+
4804Values larger than 100 can be used with caution.
4805
4806*Refresh*::
4807	Causes all windows on the screen to redraw themselves. All pending
4808	updates of all windows' styles and looks are applied immediately. E.g.
4809	if *Style* or *TitleStyle* commands were issued inside a fvwm
4810	function.
4811
4812*RefreshWindow*::
4813	Causes the chosen window to redraw itself. All pending updates of the
4814	window's style and look are applied immediately. E.g. if *Style* or
4815	*TitleStyle* commands were issued inside a fvwm function.
4816
4817*Stick* [_bool_]::
4818	If the _bool_ argument is empty or "_toggle_", the *Stick* command
4819	makes a window sticky if it is not already sticky, or non-sticky if it
4820	is already sticky. To make a window sticky regardless of its current
4821	state the _bool_ argument must be "True". To make it non-sticky use
4822	"False".
4823
4824*StickAcrossPages* [_bool_]::
4825	Works like *Stick* but only sticks a window across pages, not across desks.
4826
4827*StickAcrossDesks* [_bool_]::
4828	Works like *Stick* but only sticks a window across desks, not across
4829	pages.
4830
4831*WindowShade* [bool] | [[ShadeAgain] _direction_]::
4832	Toggles the window shade feature for titled windows. Windows in the
4833	shaded state only display a title-bar. If _bool_ is not given or
4834	"_toggle_", the window shade state is toggled. If _bool_ is "True",
4835	the window is forced to the shaded state. If _bool_ is "False", then
4836	the window is forced to the non-shaded state. To force shading in a
4837	certain direction, the _direction_ argument can be used. Any of the
4838	strings "_North_", "_South_", "_West_", "_East_", "_NorthWest_",
4839	"_NorthEast_", "_SouthWest_", "_SouthEast_" or "_Last_" can be given.
4840	The direction can be abbreviated with the usual one or two letters
4841	"_N_", "_NW_", etc. Using a direction on a window that was already
4842	shaded unshades the window. To shade it in a different direction, use
4843	the _ShadeAgain_ option. The direction _Last_ shades the window in the
4844	direction it last was shaded. If the window has never been shaded
4845	before it is shaded as if no direction had been given. Windows without
4846	titles can be shaded too. Please refer also to the options
4847	_WindowShadeSteps_, _WindowShadeShrinks_, _WindowShadeScrolls_,
4848	_WindowShadeLazy_, _WindowShadeAlwaysLazy_ and _WindowShadeBusy_
4849	options of the *Style* command. Examples:
4850+
4851
4852....
4853Style * WindowShadeShrinks, WindowShadeSteps 20, \
4854  WindowShadeLazy
4855Mouse 1 - S WindowShade North
4856Mouse 1 [ S WindowShade West
4857Mouse 1 ] S WindowShade E
4858Mouse 1 _ S WindowShade S
4859....
4860
4861+
4862Note: When a window that has been shaded with a _direction_ argument
4863changes the direction of the window title (see _TitleAtTop_ *Style*
4864option), the shading direction does not change. This may look very
4865strange. Windows that were shaded without a _direction_ argument stay
4866shaded in the direction of the title bar.
4867+
4868For backward compatibility, the optional argument may also be 1 to
4869signify "on", and 2 to signify "off". Note that this syntax is
4870obsolete, and will be removed in the future.
4871
4872*WindowShadeAnimate* [_steps_ [p]]::
4873	This command is obsolete. Please use the _WindowShadeSteps_ option of
4874	the *Style* command instead.
4875
4876=== Mouse & Key Bindings
4877
4878*IgnoreModifiers* [_Modifiers_]::
4879	Tells fvwm which modifiers to ignore when matching Mouse or Key
4880	bindings. *IgnoreModifiers* affects the _ClickToFocus_ style too. This
4881	command belongs into your _config_. If you issue it when your fvwm
4882	session is already up and running the results are unpredictable. The
4883	should appear before any applications or modules are started in your
4884	_config_ file (e.g. with the *Exec* command).
4885+
4886_Modifiers_ has the same syntax as in the *Mouse* or *Key* bindings, with the
4887addition of 'L' meaning the caps lock key. The default is "L".  _Modifiers_
4888can be omitted, meaning no modifiers are ignored. This command comes in handy
4889if the num-lock and scroll-lock keys interfere with your shortcuts. With
4890XFree86 '2' usually is the num-lock  modifier and '5' refers to the
4891scroll-lock key. To turn all these pesky modifiers off you can use this command:
4892+
4893
4894....
4895IgnoreModifiers L25
4896....
4897
4898+
4899If the _Modifiers_ argument is the string "_default_", fvwm reverts
4900back to the default value "L".
4901+
4902*Important* This command creates a lot of extra network traffic,
4903depending on your CPU, network connection, the number of *Key* or
4904*Mouse* commands in your configuration file and the number of
4905modifiers you want to ignore. If you do not have a lightning fast
4906machine or very few bindings you should not ignore more than two
4907modifiers. I.e. do not ignore
4908+
4909if you have no problem with it. In the _FAQ_ you can find a better
4910solution of this problem.
4911
4912*EdgeCommand* [screen _RANDRNAME_] [_direction_ [_Function_]]::
4913	Binds a specified fvwm command _Function_ to an edge of the screen.
4914	Direction may be one of "_North_", "_Top_", "_West_", "_Left_",
4915	"_South_", "_Bottom_", "_Right_" and "_East_". If _Function_ is
4916	omitted the binding for this edge is removed. If EdgeCommand is called
4917	without any arguments all edge bindings are removed. If the literal
4918	option _screen_ followed by a RandR screen name _RANDRNAME_ is given,
4919	the command is set only for the given monitor.
4920+
4921_Function_ is executed when the mouse pointer enters the invisible pan
4922frames that surround the visible screen. The binding works only if
4923*EdgeThickness* is set to a value greater than 0. If a function is
4924bound to an edge, scrolling specified by *EdgeScroll* is disabled for
4925this edge. It is possible to bind a function only to some edges and
4926use the other edges for scrolling. This command is intended to raise
4927or lower certain windows when the mouse pointer enters an edge.
4928*FvwmAuto* can be used get a delay when raising or lowering windows.
4929The following example raises *FvwmButtons* if the mouse pointer enters
4930the top edge of the screen.
4931+
4932
4933....
4934# Disable EdgeScrolling but make it possible
4935# to move windows over the screen edge
4936EdgeResistance -1
4937Style * EdgeMoveDelay 250
4938Style * EdgeMoveResistance 20
4939
4940# Set thickness of the edge of the screen to 1
4941EdgeThickness 1
4942
4943# Give focus to FvwmButtons if the mouse
4944# hits top edge
4945EdgeCommand Top Next (FvwmButtons) Focus
4946# Make sure the Next command matches the window
4947Style FvwmButtons CirculateHit
4948
4949Module FvwmButtons
4950Module FvwmAuto 100 "Silent AutoRaiseFunction" \
4951 "Silent AutoLowerFunction"
4952
4953# If any window except FvwmButtons has
4954# focus when calling this function
4955# FvwmButtons are lowered
4956DestroyFunc AutoLowerFunction
4957AddToFunc AutoLowerFunction
4958+ I Current (!FvwmButtons) All (FvwmButtons) Lower
4959
4960# If FvwmButtons has focus when calling this function raise it
4961DestroyFunc AutoRaiseFunction
4962AddToFunc AutoRaiseFunction
4963+ I Current (FvwmButtons) Raise
4964....
4965
4966+
4967Normally, the invisible pan frames are only on the screen edges that
4968border virtual pages. If a screen edge has a command bound to it, the
4969pan frame is always created on that edge.
4970
4971*EdgeLeaveCommand* [screen _RANDRNAME_] [_direction_ [_Function_]]::
4972	Binds a specified fvwm command _Function_ to an edge of the screen.
4973	Direction may be one of "_North_", "_Top_", "_West_", "_Left_",
4974	"_South_", "_Bottom_", "_Right_" and "_East_". If _Function_ is
4975	omitted the binding for this edge is removed. If EdgeLeaveCommand is
4976	called without any arguments all edge bindings are removed. If the
4977	literal option _screen_ followed by a RandR screen name _RANDRNAME_
4978	is given, the command is set only for the given monitor.
4979
4980+
4981_Function_ is executed when the mouse pointer leaves the invisible pan
4982frames that surround the visible screen. The binding works only if
4983*EdgeThickness* is set to a value greater than 0. If a function is
4984bound to an edge, scrolling specified by *EdgeScroll* is disabled for
4985this edge. It is possible to bind a function only to some edges and
4986use the other edges for scrolling. This command is intended to raise
4987or lower certain windows when the mouse pointer leaves an edge.
4988*FvwmAuto* can be used get a delay when raising or lowering windows.
4989See example for *EdgeCommand*
4990+
4991Normally, the invisible pan frames are only on the screen edges that
4992border virtual pages. If a screen edge has a command bound to it, the
4993pan frame is always created on that edge.
4994
4995*Key* [(_window_)] _Keyname_ _Context_ _Modifiers_ _Function_::
4996	Binds a keyboard key to a specified fvwm command, or removes the
4997	binding if _Function_ is '-'. The syntax is the same as for a *Mouse*
4998	binding except that the mouse button number is replaced with a
4999	_Keyname_. Normally, the key binding is activated when the key is
5000	pressed. _Keyname_ is a standard X11 key name as defined in
5001	_/usr/include/X11/keysymdef.h_, (without the _XK__ prefix), or the
5002	keysym database _/usr/X11R6/lib/X11/XKeysymDB_. Only key names that
5003	are generated with no modifier keys or with just the
5004+
5005key held are guaranteed to work. The _Context_ and _Modifiers_ fields
5006are defined as in the *Mouse* binding. However, when you press a key
5007the context window is the window that has the keyboard focus. That is
5008not necessarily the same as the window the pointer is over (with
5009_SloppyFocus_ or _ClickToFocus_). Note that key bindings with the
5010'_R_' (root window) context do not work properly with _SloppyFocus_
5011and _ClickToFocus_. If you encounter problems, use the *PointerKey*
5012command instead. If you want to bind keys to a window with
5013_SloppyFocus_ or _ClickToFocus_ that are supposed to work when the
5014pointer is not over the window, fvwm assumes the pointer is over the
5015client window (i.e. you have to use the 'W' context).
5016+
5017The special context '_M_' for menus can be used to (re)define the menu
5018controls. It be used alone or together with 'T', 'S', 'I', '[', ']',
5019'-' and '_'. See the *Menu Bindings* section for details.
5020+
5021The following example binds the built-in window list to pop up when
5022+
5023is hit, no matter where the mouse pointer is:
5024+
5025
5026....
5027Key F11 A SCM WindowList
5028....
5029
5030+
5031Binding a key to a title-bar button causes that button to appear.
5032Please refer to the *Mouse* command for details.
5033
5034*Mouse* [(_window_)] _Button_ _Context_ _Modifiers_ _Function_::
5035	Defines a mouse binding, or removes the binding if _Function_ is '-'.
5036	_Button_ is the mouse button number. If _Button_ is zero then any
5037	button performs the specified function. Note that only mouse buttons 1
5038	to 5 are fully supported by X11. Any number above this works only
5039	partially. Complex functions can not be used with these buttons and
5040	neither any operation that requires dragging the pointer with the
5041	button held. This is due to limitations of X11. By default, the
5042	highest allowed button number is 9.
5043+
5044_Context_ describes where the binding applies. Valid contexts are
5045'_R_' for the root window, '_W_' for an application window, '_D_' for
5046a desktop application (as kdesktop or Nautilus desktop), '_T_' for a
5047window title-bar, '_S_' for a window side, top, or bottom bar, '_[_',
5048'_]_', '_-_' and '___' for the left, right, top or bottom side only,
5049'_F_' for a window frame (the corners), '<', '^', '>' and '_v_' for
5050the top left, top right, bottom right or bottom left corner, '_I_' for
5051an icon window, or '_0_' through '_9_' for title-bar buttons, or any
5052combination of these letters. '_A_' is for any context. For instance,
5053a context of "FST" applies when the mouse is anywhere in a window's
5054border except the title-bar buttons. Only 'S' and 'W' are valid for an
5055undecorated window.
5056+
5057The special context '_M_' for menus can be used to (re)define the menu
5058controls. It can be used alone or together with 'T', 'S', 'I', '[',
5059']', '-' and '_'. See the *Menu Bindings* section for details.
5060+
5061The special context '_P_' controls what buttons that can be used to
5062place a window. When using this context no modifiers are allowed
5063(_Modifiers_ must be N), no _window_ is allowed, and the _Function_
5064must be one of _PlaceWindow_, _PlaceWindowDrag_,
5065_PlaceWindowInteractive_, _CancelPlacement_, _CancelPlacementDrag_,
5066_CancelPlacementInteractive_ or _-_.
5067+
5068_PlaceWindow_ makes _Button_ usable for window placement, both for
5069interactive and drag move. _CancelPlacement_ does the inverse. That is
5070makes _Button_ to cancel move for both interactive and drag move. It
5071may however not override how new windows are resized after being
5072placed. This is controlled by the *Emulate* command. Also a window
5073being dragged can always be placed by releasing the button hold while
5074dragging, regardless of if it is set to _PlaceWindow_ or not.
5075+
5076_PlaceWindowDrag_ and _PlaceWindowInteractive_/_CancelPlacementDrag_
5077and _CancelPlacementInteractive_ work as
5078_PlaceWindow_/_CancelPlacement_ with the exception that they only
5079affect either windows dragged / placed interactively.
5080+
5081_-_ is equivalent to _CancelPlacement_.
5082+
5083The following example makes all buttons but button 3 usable for
5084interactive placement and makes drag moves started by other buttons
5085than one cancel if button 1 is pressed before finishing the move:
5086+
5087
5088....
5089Mouse 0 P N PlaceWindow
5090Mouse 3 P N CancelPlacement
5091Mouse 1 P N CancelPlacementDrag
5092....
5093
5094+
5095By default, the binding applies to all windows. You can specify that a
5096binding only applies to specific windows by specifying the window name
5097in brackets. The window name is a wildcard pattern specifying the
5098class, resource or name of the window you want the binding to apply
5099to.
5100+
5101The following example shows how the same key-binding can be used to
5102perform different functions depending on the window that is focused:
5103+
5104
5105....
5106Key (rxvt)  V A C Echo ctrl-V-in-RXVT
5107Key (*term) V A C Echo ctrl-V-in-Term
5108Key (*vim)  V A C --
5109Key         V A C Echo ctrl-V-elsewhere
5110....
5111
5112+
5113A '_--_' action indicates that the event should be propagated to the
5114specified window to handle. This is only a valid action for
5115window-specific bindings.
5116+
5117This example shows how to display the WindowList when Button 3 is
5118pressed on an rxvt window:
5119+
5120
5121....
5122Mouse (rxvt) 3 A A WindowList
5123....
5124
5125+
5126Note that Fvwm actually intercepts all events for a window-specific
5127binding and (if the focused window doesn't match any of the bindings)
5128sends a synthetic copy of the event to the window. This should be
5129transparent to most applications, however (for security reasons) some
5130programs ignore these synthetic events by default - xterm is one of
5131them. To enable handling of these events, add the following line to
5132your _~/.Xdefaults_ file:
5133+
5134
5135....
5136XTerm*allowSendEvents:  true
5137....
5138
5139+
5140_Modifiers_ is any combination of '_N_' for no modifiers, '_C_' for
5141control, '_S_' for shift, '_M_' for Meta, '_L_' for Caps-Lock or '_A_'
5142for any modifier. For example, a modifier of "SM" applies when both
5143the
5144+
5145and
5146+
5147keys are down. X11 modifiers mod1 through mod5 are represented as the
5148digits '1' through '5'. The modifier 'L' is ignored by default. To
5149turn it on, use the *IgnoreModifiers* command.
5150+
5151_Function_ is one of fvwm's commands.
5152+
5153The title-bar buttons are numbered with odd numbered buttons on the
5154left side of the title-bar and even numbers on the right.
5155Smaller-numbered buttons are displayed toward the outside of the
5156window while larger-numbered buttons appear toward the middle of the
5157window (0 is short for 10). In summary, the buttons are numbered:
5158+
5159
5160....
51611 3 5 7 9    0 8 6 4 2
5162....
5163
5164+
5165The highest odd numbered button which has an action bound to it
5166determines the number of buttons drawn on the left side of the title
5167bar. The highest even number determines the number of right side
5168buttons which are drawn. Actions can be bound to either mouse buttons
5169or keyboard keys.
5170
5171*PointerKey* [(_window_)] _Keyname_ _Context_ _Modifiers_ _Function_::
5172	This command works exactly like the *Key* command. The only difference
5173	is that the binding operates on the window under the pointer. Normal
5174	key bindings operate on the focused window instead. The *PointerKey*
5175	command can for example be used to bind keys to the root window if you
5176	are using _SloppyFocus_ or _ClickToFocus_. However, some applications
5177	(xterm is one example) are unable to handle this key anymore, even if
5178	the pointer is over the xterm window. It is recommended to use the
5179	*PointerKey* command only for key combinations that are not needed in
5180	any application window.
5181+
5182Example:
5183+
5184
5185....
5186Style * SloppyFocus
5187PointerKey f1 a m Menu MainMenu
5188....
5189
5190
5191=== Controlling Window Styles
5192
5193For readability, the commands in this section are not sorted
5194alphabetically. The description of the *Style* command can be found at
5195the end of this section.
5196
5197*FocusStyle* _stylename_ _options_::
5198	works exactly like the *Style* command, but accepts only the focus
5199	policy related styles beginning with "FP". The prefix can be removed,
5200	but at the cost of a little bit of time. *FocusStyle* is meant to make
5201	the configuration file more readable. Example:
5202+
5203
5204....
5205FocusStyle * EnterToFocus, !LeaveToUnfocus
5206....
5207
5208+
5209is equivalent to
5210+
5211
5212....
5213Style * FPEnterToFocus, !FPLeaveToUnfocus
5214....
5215
5216*DestroyStyle* _style_::
5217	deletes the style named _style_. The changes take effect immediately.
5218	Note that _style_ is not a wild-carded search string, but rather a
5219	case-sensitive string that should exactly match the original *Style*
5220	command.
5221+
5222Destroying style "*" can be done, but isn't really to be recommended.
5223For example:
5224+
5225
5226....
5227DestroyStyle Application*
5228....
5229
5230+
5231This removes all settings for the style named "Application*", NOT all
5232styles starting with "Application".
5233
5234*DestroyWindowStyle*::
5235	deletes the styles set by the *WindowStyle* command on the selected
5236	window. The changes take effect immediately.
5237
5238*UpdateStyles*::
5239	All pending updates of all windows' styles and looks are applied
5240	immediately. E.g. if *Style*, _WindowStyle_ or _TitleStyle_ commands
5241	were issued inside a fvwm function.
5242
5243*Style* _stylename_ _options_ ...::
5244	The *Style* command is used to set attributes of a window to values
5245	other than the default or to set the window manager default styles.
5246+
5247_stylename_ can be a window's name, class, visible name, or resource
5248string. It may contain the wildcards '*' and '?', which are matched in
5249the usual Unix filename manner. Multiple style options in a single
5250*Style* command are read from left to right as if they were issued one
5251after each other in separate commands. A given style always overrides
5252all conflicting styles that have been issued earlier (or further left
5253on the same style line).
5254+
5255Note: windows that have no name (WM_NAME) are given a name of
5256"Untitled", and windows that do not have a class (WM_CLASS, res_class)
5257are given class "NoClass" and those that do not have a resource
5258(WM_CLASS, res_name) are given resource "NoResource".
5259+
5260If a window has the resource "fvwmstyle" set, the value of that
5261resource is used in addition to any window names when selecting the
5262style.
5263+
5264_options_ is a comma separated list containing one or more of the
5265following keywords. Each group of style names is separated by slashes
5266('/'). The last style in these groups is the default. _BorderWidth_,
5267_HandleWidth_, _!Icon_ / _Icon_, _MiniIcon_, _IconBox_, _IconGrid_,
5268_IconFill_, _IconSize_, _!Title_ / _Title_, _TitleAtBottom_ /
5269_TitleAtLeft_ / _TitleAtRight_ / _TitleAtTop_, _LeftTitleRotatedCW_ /
5270_LeftTitleRotatedCCW_, _RightTitleRotatedCCW_ / _RightTitleRotatedCW_,
5271_TopTitleRotated_ / _TopTitleNotRotated_, _BottomTitleRotated_ /
5272_BottomTitleNotRotated_, _!UseTitleDecorRotation_ /
5273_UseTitleDecorRotation_, _StippledTitle_ / _!StippledTitle_,
5274_StippledIconTitle_ / _!StippledIconTitle_, _IndexedWindowName_ /
5275_ExactWindowName_, _IndexedIconName_ / _ExactIconName_, _TitleFormat_
5276/ _IconTitleFormat_ / _!Borders_ / _Borders_, _!Handles_ / _Handles_,
5277_WindowListSkip_ / _WindowListHit_, _CirculateSkip_ / _CirculateHit_,
5278_CirculateSkipShaded_ / _CirculateHitShaded_, _CirculateSkipIcon_ /
5279_CirculateHitIcon_, _Layer_, _StaysOnTop_ / _StaysOnBottom_ /
5280_StaysPut_, _Sticky_ / _Slippery_, _StickyAcrossPages_ /
5281_!StickyAcrossPages_, _StickyAcrossDesks_ / _!StickyAcrossDesks_,
5282_!StickyStippledTitle_ / _StickyStippledTitle_,
5283_!StickyStippledIconTitle_ / _StickyStippledIconTitle_, _StartIconic_
5284/ _StartNormal_, _Color_, _ForeColor_, _BackColor_, _Colorset_,
5285_HilightFore_, _HilightBack_, _HilightColorset_, _BorderColorset_,
5286_HilightBorderColorset_, _IconTitleColorset_,
5287_HilightIconTitleColorset_, _IconBackgroundColorset_,
5288_IconTitleRelief_, _IconBackgroundRelief_, _IconBackgroundPadding_,
5289_Font_, _IconFont_, _StartsOnDesk_ / _StartsOnPage_ /
5290_StartsAnyWhere_, _StartsOnScreen_, _StartShaded_ / _!StartShaded_,
5291_ManualPlacementHonorsStartsOnPage_ /
5292_ManualPlacementIgnoresStartsOnPage_, _CaptureHonorsStartsOnPage_ /
5293_CaptureIgnoresStartsOnPage_, _RecaptureHonorsStartsOnPage_ /
5294_RecaptureIgnoresStartsOnPage_, _StartsOnPageIncludesTransients_ /
5295_StartsOnPageIgnoresTransients_, _IconTitle_ / _!IconTitle_,
5296_MwmButtons_ / _FvwmButtons_, _MwmBorder_ / _FvwmBorder_, _MwmDecor_ /
5297_!MwmDecor_, _MwmFunctions_ / _!MwmFunctions_, _HintOverride_ /
5298_!HintOverride_, _!Button_ / _Button_, _ResizeHintOverride_ /
5299_!ResizeHintOverride_, _OLDecor_ / _!OLDecor_, _GNOMEUseHints_ /
5300_GNOMEIgnoreHints_, _StickyIcon_ / _SlipperyIcon_,
5301_StickyAcrossPagesIcon_ / _!StickyAcrossPagesIcon_,
5302_StickyAcrossDesksIcon_ / _!StickyAcrossDesksIcon_, _ManualPlacement_
5303/ _CascadePlacement_ / _MinOverlapPlacement_ /
5304_MinOverlapPercentPlacement_ / _TileManualPlacement_ /
5305_TileCascadePlacement_ / _PositionPlacement_,
5306_MinOverlapPlacementPenalties_, _MinOverlapPercentPlacementPenalties_,
5307_DecorateTransient_ / _NakedTransient_, _DontRaiseTransient_ /
5308_RaiseTransient_, _DontLowerTransient_ / _LowerTransient_,
5309_DontStackTransientParent_ / _StackTransientParent_, _SkipMapping_ /
5310_ShowMapping_, _ScatterWindowGroups_ / _KeepWindowGroupsOnDesk_,
5311_UseDecor_, _UseStyle_, _!UsePPosition_ / _NoPPosition_ /
5312_UsePPosition_, _!UseUSPosition_, _NoUSPosition_ / _UseUSPosition_,
5313_!UseTransientPPosition_, _NoTransientPPosition_ /
5314_UseTransientPPosition_, _!UseTransientUSPosition_ /
5315_NoTransientUSPosition_ / _UseTransientUSPosition_, _!UseIconPosition_
5316/ _NoIconPosition_ / _UseIconPosition_, _Lenience_ / _!Lenience_,
5317_ClickToFocus_ / _SloppyFocus_ / __MouseFocus__|_FocusFollowsMouse_ /
5318_NeverFocus_, _ClickToFocusPassesClickOff_ /
5319_ClickToFocusPassesClick_, _ClickToFocusRaisesOff_ /
5320_ClickToFocusRaises_, _MouseFocusClickRaises_ /
5321_MouseFocusClickRaisesOff_, _GrabFocus_ / _GrabFocusOff_,
5322_GrabFocusTransientOff_ / _GrabFocusTransient_, _FPFocusClickButtons_,
5323_FPFocusClickModifiers_, _!FPSortWindowlistByFocus_ /
5324_FPSortWindowlistByFocus_, _FPClickRaisesFocused_ /
5325_!FPClickRaisesFocused_, _FPClickDecorRaisesFocused_ /
5326_!FPClickDecorRaisesFocused_, _FPClickIconRaisesFocused_ /
5327_!FPClickIconRaisesFocused_, _!FPClickRaisesUnfocused_ /
5328_FPClickRaisesUnfocused_, _FPClickDecorRaisesUnfocused_ /
5329_!FPClickDecorRaisesUnfocused_, _FPClickIconRaisesUnfocused_ /
5330_!FPClickIconRaisesUnfocused_, _FPClickToFocus_ / _!FPClickToFocus_,
5331_FPClickDecorToFocus_ / _!FPClickDecorToFocus_, _FPClickIconToFocus_ /
5332_!FPClickIconToFocus_, _!FPEnterToFocus_ / _FPEnterToFocus_,
5333_!FPLeaveToUnfocus_ / _FPLeaveToUnfocus_, _!FPFocusByProgram_ /
5334_FPFocusByProgram_, _!FPFocusByFunction_ / _FPFocusByFunction_,
5335_FPFocusByFunctionWarpPointer_ / _!FPFocusByFunctionWarpPointer_,
5336_FPLenient_ / _!FPLenient_, _!FPPassFocusClick_ / _FPPassFocusClick_,
5337_!FPPassRaiseClick_ / _FPPassRaiseClick_, _FPIgnoreFocusClickMotion_ /
5338_!FPIgnoreFocusClickMotion_, _FPIgnoreRaiseClickMotion_ /
5339_!FPIgnoreRaiseClickMotion_, _!FPAllowFocusClickFunction_ /
5340_FPAllowFocusClickFunction_, _!FPAllowRaiseClickFunction_ /
5341_FPAllowRaiseClickFunction_, _FPGrabFocus_ / _!FPGrabFocus_,
5342_!FPGrabFocusTransient_ / _FPGrabFocusTransient_,
5343_FPOverrideGrabFocus_ / _!FPOverrideGrabFocus_, _FPReleaseFocus_ /
5344_!FPReleaseFocus_, _!FPReleaseFocusTransient_ /
5345_FPReleaseFocusTransient_, _FPOverrideReleaseFocus_ /
5346_!FPOverrideReleaseFocus_, _StartsLowered_ / _StartsRaised_,
5347_IgnoreRestack_ / _AllowRestack_, _FixedPosition_ /
5348_VariablePosition_, _FixedUSPosition_ / _VariableUSPosition_,
5349_FixedPPosition_ / _VariablePPosition_, _FixedSize_ / _VariableSize_,
5350_FixedUSSize_ / _VariableUSSize_, _FixedPSize_ / _VariablePSize_,
5351_!Closable_ / _Closable_, _!Iconifiable_ / _Iconifiable_,
5352_!Maximizable_ / _Maximizable_, _!AllowMaximizeFixedSize_ /
5353_AllowMaximizeFixedSize_, _IconOverride_ / _NoIconOverride_ /
5354_NoActiveIconOverride_, _DepressableBorder_ / _FirmBorder_,
5355_MinWindowSize_, _MaxWindowSize_, _IconifyWindowGroups_ /
5356_IconifyWindowGroupsOff_, _ResizeOpaque_ / _ResizeOutline_,
5357_BackingStore_ / _BackingStoreOff_ / _BackingStoreWindowDefault_,
5358_Opacity_ / _ParentalRelativity_, _SaveUnder_ / _SaveUnderOff_,
5359_WindowShadeShrinks_ / _WindowShadeScrolls_, _WindowShadeSteps_,
5360_WindowShadeAlwaysLazy_ / _WindowShadeBusy_ / _WindowShadeLazy,_
5361_EWMHDonateIcon_ / _EWMHDontDonateIcon_, _EWMHDonateMiniIcon_ /
5362_EWMHDontDonateMiniIcon_, _EWMHMiniIconOverride_ /
5363_EWMHNoMiniIconOverride_, _EWMHUseStackingOrderHints_ /
5364_EWMHIgnoreStackingOrderHints_, _EWMHIgnoreStateHints_ /
5365_EWMHUseStateHints_, _EWMHIgnoreStrutHints_ / _EWMHUseStrutHints_,
5366_EWMHIgnoreWindowType_ / _!EWMHIgnoreWindowType_,
5367_EWMHMaximizeIgnoreWorkingArea_ / _EWMHMaximizeUseWorkingArea_ /
5368_EWMHMaximizeUseDynamicWorkingArea_, _EWMHPlacementIgnoreWorkingArea_
5369/ _EWMHPlacementUseWorkingArea_ /
5370_EWMHPlacementUseDynamicWorkingArea_, _MoveByProgramMethod_,
5371_Unmanaged_, _State_, _SnapGrid_, _SnapAttraction_, _EdgeMoveDelay_,
5372_EdgeResizeDelay_. _EdgeMoveResistance_, _InitialMapCommand_
5373+
5374In the above list some options are listed as
5375style-option/opposite-style-option. The opposite-style-option for
5376entries that have them describes the fvwm default behavior and can be
5377used if you want to change the fvwm default behavior.
5378+
5379*Focus policy*;;
5380	_ClickToFocus_ instructs fvwm to give the focus to a window when it
5381	is clicked in. The default _MouseFocus_ (or its alias
5382	_FocusFollowsMouse_) tells fvwm to give a window the focus as soon
5383	as the pointer enters the window, and take it away when the pointer
5384	leaves the window. _SloppyFocus_ is similar, but doesn't give up the
5385	focus if the pointer leaves the window to pass over the root window
5386	or a ClickToFocus window (unless you click on it, that is), which
5387	makes it possible to move the mouse out of the way without losing
5388	focus. A window with the style _NeverFocus_ never receives the
5389	focus. This is useful for modules like *FvwmButtons*. for example.
5390	Note: Once any of the "FP..." styles has been used, the defaults
5391	that come with the basic focus policies are not restored when the
5392	latter are used again. For example, once !FPGrabFocus has been used,
5393	using ClickToFocus does not restore FPGrabFocus.
5394+
5395The focus model can be augmented with several additional options. In
5396fvwm-2.5.3 and later, there are a large number of advanced options
5397beginning with "FP" or "!FP". These options shall replace the older
5398options one day and are described first. Using any of these new
5399options may limit compatibility with older releases. In general,
5400options beginning with "FP" turn a feature on, while those beginning
5401with "!FP" turn it off.
5402
5403*Focusing the window*;;
5404	With _FPEnterToFocus_, when the pointer enters a window it receives
5405	focus.
5406+
5407With _FPLeaveToUnfocus_ a window loses focus when the pointer leaves
5408it.
5409+
5410With _FPClickToFocus_, _FPClickDecorToFocus_ or
5411_FPClickIconToFocus_, a window receives focus when the inside of the
5412window or the decorations or its icon is clicked.
5413+
5414The _FPFocusByProgram_ style allows windows to take the focus
5415themselves.
5416+
5417The !_FPFocusByFunction_ style forbids that a window receives the
5418focus via the *Focus* and *FlipFocus* commands.
5419+
5420The _FPFocusByFunctionWarpPointer_ style controls if the pointer is
5421warped to a selected window when the *Focus* command is used.
5422+
5423_FPLenient_ allows focus on windows that do not want it, like
5424*FvwmPager* or xclock.
5425+
5426The _FPFocusClickButtons_ style takes a list of mouse buttons that
5427can be clicked to focus or raise a window when the appropriate style
5428is used. The default is to use the first three buttons ("123").
5429+
5430The _FPFocusClickModifiers_ style takes a list of modifier keys just
5431like the *Key* command. The exact combination of modifier keys must
5432be pressed for the click to focus or raise a window to work. The
5433default is to use no modifiers ("N").
5434+
5435With the _FPPassFocusClick_ style, the click that was used to focus
5436a window is passed to the application.
5437+
5438With the _FPAllowFocusClickFunction_ style, the click that was used
5439to focus a window can also trigger a normal action that was bound to
5440the window with the *Mouse* command).
5441+
5442If the _FPIgnoreFocusClickMotion_ style is used, clicking in a
5443window and then dragging the pointer with the button held down does
5444not count as the click to focus the window. Instead, the application
5445processes these events normally. This is useful to select text in a
5446terminal window with the mouse without raising the window. However,
5447mouse bindings on the client window are not guaranteed to work
5448anymore (see *Mouse* command). This style forces the initial click
5449to be passed to the application. The distance that the pointer must
5450be moved to trigger this is controlled by the *MoveThreshold*
5451command.
5452+
5453The _FPSortWindowlistByFocus_ and !_FPSortWindowlistByFocus_ styles
5454control whether the internal window list is sorted in the order the
5455windows were focused or in the order they were created. The latter
5456is the default for _ClickToFocus_ and _SloppyFocus_.
5457+
5458*Clicking the window to raise*
5459+
5460The styles _FPClickRaisesFocused_, _FPClickDecorRaisesFocused_ and
5461_FPClickIconRaisesFocused_ allow one to raise the window when the
5462interior or the decorations or the icon of the window is clicked
5463while the window is already focused.
5464+
5465The styles _FPClickRaisesUnfocused_, _FPClickDecorRaisesUnfocused_
5466and _FPClickIconRaisesUnfocused_ allow one to raise the window when
5467the interior or the decorations or the icon of the window is clicked
5468while the window is not yet focused.
5469+
5470With the _FPPassRaiseClick_ style, the click that was used to raise
5471the window is passed to the application.
5472+
5473With the _FPAllowRaiseClickFunction_ style, the click that was used
5474to raise the window can also trigger a normal action that was bound
5475to the window with the *Mouse* command.
5476+
5477If the _FPIgnoreRaiseClickMotion_ style is used, clicking in a
5478window and then dragging the pointer with the button held down does
5479not count as the click to raise the window. Instead, the application
5480processes these events normally. This is useful to select text in a
5481terminal window with the mouse without raising the window. However,
5482mouse bindings on the client window are not guaranteed to work
5483anymore (see *Mouse* command. Note that this style forces that the
5484initial click is passed to the application. The distance that the
5485pointer must be moved to trigger this is controlled by the
5486*MoveThreshold* command.
5487+
5488*Grabbing the focus when a new window is created*
5489+
5490New normal or transient windows with the _FPGrabFocus_ or
5491_FPGrabFocusTransient_ style automatically receive the focus when
5492they are created. _FPGrabFocus_ is the default for windows with the
5493_ClickToFocus_ style. Note that even if these styles are disabled,
5494the application may take the focus itself. Fvwm can not prevent
5495this.
5496+
5497The _OverrideGrabFocus_ style instructs fvwm to never take away the
5498focus from such a window via the _GrabFocus_ or _GrabFocusTransient_
5499styles. This can be useful if you like to have transient windows
5500receive the focus immediately, for example in a web browser, but not
5501while you are working in a terminal window or a text processor.
5502+
5503The above three styles are accompanied by _FPReleaseFocus_,
5504_FPReleaseFocusTransient_ and _FPOverrideReleaseFocus_. These
5505control if the focus is returned to another window when the window
5506is closed. Otherwise no window or the window under the pointer
5507receives the focus.
5508+
5509_ClickToFocusPassesClickOff_ and _ClickToFocusPassesClick_ controls
5510whether a mouse click to focus a window is sent to the application
5511or not. Similarly,
5512_ClickToFocusRaisesOff_/_MouseFocusClickRaisesOff_ and
5513_ClickToFocusRaises_/_MouseFocusClickRaises_ control if the window
5514is raised (but depending on the focus model).
5515+
5516Note: in fvwm versions prior to 2.5.3, the "Click..." options
5517applied only to windows with _ClickToFocus_ while the "Mouse..."
5518options applied to windows with a different focus policy. This is no
5519longer the case.
5520+
5521The old _GrabFocus_ style is equivalent to using _FPGrabFocus_ +
5522_FPReleaseFocus_.
5523+
5524The old _GrabFocusTransient_ style is equivalent to using
5525_FPGrabFocusTransient_ + _FPReleaseFocusTransient_.
5526+
5527_Lenience_ is equivalent to the new style _FPLenient_.
5528
5529*Window title*::
5530	The _Title_ and !Title options determine if the window has a
5531	title-bar or not. By default all windows have a title-bar. _NoTitle_
5532	is equivalent to _!Title_ but is deprecated.
5533+
5534Windows with the _TitleAtBottom_, _TitleAtLeft_ or _TitleAtRight_
5535style have a title-bar below, to the left or to the right of the
5536window instead of above as usual. The _TitleAtTop_ style restores
5537the default placement. Even if the window has the _!Title_ style
5538set, this affects the *WindowShade* command. Please check the
5539*WindowShade* command for interactions between that command and
5540these styles. Titles on the left or right side of the windows are
5541augmented by the following styles:
5542+
5543Normally, the text in titles on the left side of a window is rotated
5544counterclockwise by 90 degrees from the normal upright position and
554590 degrees clockwise for titles on the right side. It can also be
5546rotated in the opposite directions with _LeftTitleRotatedCW_ if
5547_TitleAtLeft_ is used, and with _RightTitleRotatedCCW_ if
5548_TitleAtRight_ is used. The defaults can be restored with
5549_LeftTitleRotatedCCW_ and _RightTitleRotatedCW_. A normal horizontal
5550text may be rotated as well with _TopTitleRotated_ if _TitleAtTop_
5551is used, and with _BottomTitleRotated_ if _TitleAtBottom_ is used.
5552The defaults can be restored with _TopTitleNotRotated_ and
5553_BottomTitleNotRotated_.
5554+
5555By default the title bar decoration defined using the *TitleStyle*
5556command is rotated following the title text rotation (see the
5557previous paragraph). This can be disabled by using the
5558!_UseTitleDecorRotation_ style. _UseTitleDecorRotation_ reverts back
5559to the default.
5560+
5561With the _StippledTitle_ style, titles are drawn with the same
5562effect that is usually reserved for windows with the _Sticky_,
5563_StickyAcrossPages_ or _StickyAcrossDesks_ style. _!StippledTitle_
5564reverts back to normal titles. _StippledTitleOff_ is equivalent to
5565_!StippledTitle_ but is deprecated.
5566+
5567_Color_ takes two arguments. The first is the window-label text
5568color and the second is the window decorations normal background
5569color. The two colors are separated with a slash. If the use of a
5570slash causes problems then the separate _ForeColor_ and _BackColor_
5571options can be used.
5572+
5573*Colorset* takes the colorset number as its sole argument and
5574overrides the colors set by _Color_. Instead, the corresponding
5575colors from the given colorset are used. Note that all other
5576features of a colorset are not used. Use the *Colorset* decoration
5577style in the *TitleStyle* and _ButtonStyle_ command for that. To
5578stop using the colorset, the colorset number is omitted.
5579+
5580The _HilightFore_, _HilightBack_ and _HilightColorset_ style options
5581work exactly like _ForeColor_, _BackColor_ and _Colorset_ but are
5582used only if the window has the focus. These styles replace the old
5583commands *HilightColor* and _HilightColorset_.
5584+
5585_BorderColorset_ takes the colorset number as its sole argument and
5586overrides the colors set by _Color_ or _Colorset_. for the window
5587border. To stop using a colorset, the argument is omitted.
5588+
5589The _HilightBorderColorset_ style option works similarly to
5590_BorderColorset_ but is used when the window has the focus.
5591+
5592!_IconTitle_ disables displaying icon labels while the opposite
5593style _IconTitle_ enables icon labels (default behaviour).
5594_NoIconTitle_ is equivalent to _!IconTitle_ but is deprecated.
5595+
5596_IconTitleColorset_ takes the colorset number as its sole argument
5597and overrides the colors set by _Color_ or _Colorset_. To stop using
5598this colorset, the argument is omitted.
5599+
5600_HilightIconTitleColorset_ takes the colorset number as its sole
5601argument and overrides the colors set by *HilightColor* or
5602_HilightColorset_. To stop using this colorset, the argument is
5603omitted.
5604+
5605_IconBackgroundColorset_ takes the colorset number as its sole
5606argument and uses it to set a background for the icon picture. By
5607default the icon picture is not drawn onto a background image. To
5608restore the default, the argument is omitted.
5609+
5610_IconTitleRelief_ takes one numeric argument that may be between -50
5611and +50 pixels and defines the thickness of the 3D relief drawn
5612around the icon title. With negative values the icon title gets a
5613pressed in look. The default is 2 and it is restored if the argument
5614is omitted.
5615+
5616_IconBackgroundRelief_ takes one numeric argument that may be
5617between -50 and +50 pixels and defines the thickness of the 3D
5618relief drawn around the icon picture background (if any). With
5619negative values the icon background gets a pressed in look. The
5620default is 2 and it is restored if the argument is omitted.
5621+
5622_IconBackgroundPadding_ takes one numeric argument that may be
5623between 0 and 50 pixels and defines the amount of free space between
5624the relief of the icon background picture (if any) and the icon
5625picture. The default is 2 and it is restored if the argument is
5626omitted.
5627+
5628The _Font_ and _IconFont_ options take the name of a font as their
5629sole argument. This font is used in the window or icon title. By
5630default the font given in the *DefaultFont* command is used. To
5631revert back to the default, use the style without the name argument.
5632These styles replace the older *WindowFont* and _IconFont_ commands.
5633+
5634The deprecated _IndexedWindowName_ style causes fvwm to use window
5635titles in the form
5636+
5637
5638....
5639name (i)
5640....
5641
5642+
5643where _name_ is the exact window name and _i_ is an integer which
5644represents the _i th_ window with _name_ as window name. This has
5645been replaced with:
5646+
5647
5648....
5649TitleFormat %n (%t)
5650....
5651
5652+
5653_ExactWindowName_ restores the default which is to use the exact
5654window name. Deprecated in favour of:
5655+
5656
5657....
5658TitleFormat %n
5659....
5660
5661+
5662_IndexedIconName_ and _ExactIconName_ work the same as
5663_IndexedWindowName_ and _ExactWindowName_ styles but for the icon
5664titles. Both are deprecated in favour of:
5665+
5666
5667....
5668IconTitleFormat %n (%t)
5669IconTitleFormat %n
5670....
5671
5672+
5673_TitleFormat_ describes what the visible name of a window should
5674look like, with the following placeholders being valid:
5675+
5676*%n*:::
5677	Insert the window's name.
5678*%i*:::
5679	Insert the window's icon name.
5680*%c*:::
5681	Insert the window's class name.
5682*%r*:::
5683	Insert the window's resource name.
5684*%t*:::
5685	Insert the window count.
5686*%I*:::
5687	Insert the window ID.
5688*%%*:::
5689	Insert a literal '%' character.
5690+
5691Any amount of whitespace may be used, along with other characters to
5692make up the string -- but a valid _TitleFormat_ string must contain
5693at least one of the placeholders mentioned. No quote stripping is
5694performed on the string, so for example the following is printed
5695verbatim:
5696+
5697
5698....
5699TitleFormat " %n " -> [%t] ->      [%c]
5700....
5701
5702+
5703Note: It's perfectly possible to use a _TitleFormat_ which can
5704result in wiping out the visible title altogether. For example:
5705+
5706
5707....
5708TitleFormat %z
5709....
5710
5711+
5712Simply because the placeholder '%z' isn't supported. This is not a
5713bug but rather a facet of how the formatting parser works.
5714+
5715_IconTitleFormat_ describes what the visible icon name of a window
5716should look like, with the options being the same as _TitleFormat_.
5717
5718*Title buttons*::
5719	_Button_ and !_Button_ take a numeric argument which is the number
5720	of the title-bar button which is to be shown or omitted. _NoButton_
5721	is equivalent to _!Button_ but is deprecated.
5722+
5723_MwmButtons_ makes the *Maximize* button look pressed-in when the
5724window is maximized. See the _MwmDecorMax_ flag in *ButtonStyle* for
5725more information. To switch this style off again, use the
5726*FvwmButtons* style.
5727
5728*Borders*::
5729	!_Borders_ suppresses the window border (but not the title)
5730	completely. The _Borders_ style enables them again. Without borders,
5731	all other styles affecting window borders are meaningless.
5732+
5733_MwmBorder_ makes the 3D bevel more closely match Mwm's.
5734_FvwmBorder_ turns off the previous option.
5735+
5736With the !_Handles_ style, the window does not get the handles in
5737the window corners that are commonly used to resize it. With
5738_!Handles_, the width from the _BorderWidth_ style is used. By
5739default, or if _Handles_ is specified, the width from the
5740_HandleWidth_ style is used. _NoHandles_ is equivalent to _!Handles_
5741but is deprecated.
5742+
5743_HandleWidth_ takes a numeric argument which is the width of the
5744border to place the window if it does have resize-handles. Using
5745HandleWidth without an argument restores the default.
5746+
5747_BorderWidth_ takes a numeric argument which is the width of the
5748border to place the window if it does not have resize-handles. It is
5749used only if the _!Handles_ style is specified too. Using
5750BorderWidth without an argument restores the default.
5751+
5752_DepressableBorder_ makes the border parts of the window decoration
5753look sunken in when a button is pressed over them. This can be
5754disabled again with the _FirmBorder_ style.
5755
5756*Icons, shading, maximizing, movement, resizing*::
5757	_Icon_ takes an (optional) unquoted string argument which is the
5758	icon bitmap or pixmap to use. Icons specified this way override
5759	pixmap icons, but not icon windows or the ewmh icon, provided by the
5760	client in the application (with the WM_HINTS property or with the
5761	ewmh _NET_WM_ICON property). The _IconOverride_ style changes the
5762	behavior to override any client-provided icons; the _NoIconOverride_
5763	style changes the behavior to not override any client-provided
5764	icons; the default overriding behavior can be activated with the
5765	_NoActiveIconOverride_ style. With this style, fvwm uses application
5766	provided icons if the icon is changed but uses the icon provided in
5767	the configuration file until then.
5768+
5769There is one exception to these rules, namely
5770+
5771
5772....
5773Style * Icon unknown.xpm
5774....
5775
5776+
5777doesn't force the unknown.xpm icon on every window, it just sets the
5778default icon like the DefaultIcon command. If you really want all
5779windows to have the same icon, you can use
5780+
5781
5782....
5783Style ** Icon unknown.xpm
5784....
5785
5786+
5787If the _NoIcon_ attribute is set then the specified window simply
5788disappears when it is iconified. The window can be recovered through
5789the window-list. If _Icon_ is set without an argument then the
5790_NoIcon_ attribute is cleared but no icon is specified. An example
5791which allows only the *FvwmPager* module icon to exist:
5792+
5793
5794....
5795Style * NoIcon
5796Style FvwmPager Icon
5797....
5798
5799+
5800_IconBox_ takes no argument, four numeric arguments (plus optionally
5801a screen specification), an X11 geometry string or the string
5802"none":
5803+
5804
5805....
5806IconBox [screen scr-spec] l t r b
5807....
5808
5809+
5810or
5811+
5812
5813....
5814IconBox geometry
5815....
5816
5817+
5818Where _l_ is the left coordinate, _t_ is the top, _r_ is right and
5819_b_ is bottom. Negative coordinates indicate distance from the right
5820or bottom of the screen. If the first argument is the word _screen_,
5821the _scr-spec_ argument specifies the RandR screen on which the
5822IconBox is defined ´or the additional 'w' for the screen where the
5823window center is located. This is only useful with multiple screens.
5824The "l t r b" specification is more flexible than an X11 geometry.
5825For example:
5826+
5827
5828....
5829IconBox -80 240 -1 -1
5830....
5831
5832+
5833defines a box that is 80 pixels wide from the right edge, 240 pixels
5834down from the top, and continues to the bottom of the screen.
5835+
5836Perhaps it is easier to use is an X11 geometry string though:
5837+
5838
5839....
5840IconBox 1000x70-1-1
5841....
5842
5843+
5844places an 1000 by 70 pixel icon box on the bottom of the screen
5845starting in the lower right hand corner of the screen. One way to
5846figure out a geometry like this is to use a window that resizes in
5847pixel increments, for example, xv. Then resize and place the xv
5848window where you want the iconbox. Then use FvwmIdent to read the
5849windows geometry. The icon box is a region of the screen where fvwm
5850attempts to put icons for any matching window, as long as they do
5851not overlap other icons. Multiple icon boxes can be defined as
5852overflow areas. When the first icon box is full, the second one is
5853filled. All the icon boxes for one style must be defined in one
5854*Style* command. For example:
5855+
5856
5857....
5858Style * IconBox -80 240 -1 -1, \
5859  IconBox 1000x70-1-1
5860....
5861
5862+
5863A Style command with the IconBox option replaces any icon box
5864defined previously by another Style command for the same style.
5865That's why the backslash in the previous example is required.
5866+
5867Note: The geometry for the icon box command takes the additional
5868screen specifier "@w" in case RandR isused. This designates the
5869screen where the window center is located. The additional screen
5870specifier is not allowed anywhere else.
5871+
5872If you never define an icon box, or you fill all the icon boxes,
5873fvwm has a default icon box that covers the screen, it fills top to
5874bottom, then left to right, and has an 80x80 pixel grid. To disable
5875all but the default icon box you can use IconBox without arguments
5876in a separate *Style* command. To disable all icon boxes including
5877the default icon box, the argument "none" can be specified.
5878+
5879Hint: You can auto arrange your icons in the icon box with a simple
5880fvwm function. Put the "DeiconifyAndRearrange" function below in
5881your configuration file:
5882+
5883
5884....
5885AddToFunc DeiconifyAndRearrange
5886 + C Iconify off
5887 + C All (CurrentPage, Iconic) PlaceAgain Icon
5888....
5889
5890+
5891And then replace all places where you call the *Iconify* command to
5892de-iconify an icon with a call to the new function. For example
5893replace
5894+
5895
5896....
5897AddToFunc IconFunc
5898 + C Iconify off
5899 + M Raise
5900 + M Move
5901 + D Iconify off
5902
5903Mouse 1 I A Iconify off
5904....
5905
5906+
5907with
5908+
5909
5910....
5911AddToFunc IconFunc
5912 + C DeiconifyAndRearrange
5913 + M Raise
5914 + M Move
5915 + D DeiconifyAndRearrange
5916
5917Mouse 1 I A DeiconifyAndRearrange
5918....
5919
5920+
5921_IconGrid_ takes 2 numeric arguments greater than zero.
5922+
5923
5924....
5925IconGrid x y
5926....
5927
5928+
5929Icons are placed in an icon box by stepping through the icon box
5930using the _x_ and _y_ values for the icon grid, looking for a free
5931space. The default grid is 3 by 3 pixels which gives a tightly
5932packed appearance. To get a more regular appearance use a grid
5933larger than your largest icon. Use the _IconSize_ argument to clip
5934or stretch an icon to a maximum size. An _IconGrid_ definition must
5935follow the *IconBox* definition that it applies to:
5936+
5937
5938....
5939Style * IconBox -80x240-1-1, IconGrid 90 90
5940....
5941
5942+
5943_IconFill_ takes 2 arguments.
5944+
5945
5946....
5947IconFill Bottom Right
5948....
5949
5950+
5951Icons are placed in an icon box by stepping through the icon box
5952using these arguments to control the direction the box is filled in.
5953By default the direction is left to right, then top to bottom. This
5954would be expressed as:
5955+
5956
5957....
5958IconFill left top
5959....
5960
5961+
5962To fill an icon box in columns instead of rows, specify the vertical
5963direction (top or bottom) first. The directions can be abbreviated
5964or spelled out as follows: "t", "top", "b", "bot", "bottom", "l",
5965"lft", "left", "r", "rgt", "right". An *IconFill* definition must
5966follow the *IconBox* definition that it applies to:
5967+
5968
5969....
5970Style * IconBox -80x240-1-1, IconFill b r
5971....
5972
5973+
5974_IconSize_ sets limits on the size of an icon image. Both
5975user-provided and application-provided icon images are affected.
5976+
5977
5978....
5979IconSize [ width height [ maxwidth maxheight ] ]
5980....
5981
5982+
5983All arguments are measured in pixels. When all four arguments are
5984passed to _IconSize,_ _width_ and _height_ represent the minimum
5985size of an icon, and _maxwidth_ and _maxheight_ represent the
5986maximum size of an icon. Icon images that are smaller than the
5987minimum size are padded. Icon images that are bigger than the
5988maximum size are clipped.
5989+
5990If only two arguments are passed to _IconSize,_ _width_ and _height_
5991represent the absolute size of an icon. Icons covered by this style
5992are padded or clipped to achieve the given size.
5993+
5994If no arguments are specified, the default values are used for each
5995dimension. This effectively places no limits on the size of an icon.
5996+
5997The value of "-1" can be used in place of any of the arguments to
5998specify the default value for that dimension.
5999+
6000In addition to the numeric arguments, 1 additional argument can be
6001"Stretched", "Adjusted", or "Shrunk".
6002+
6003Note that module provided icon managers are not affected by this
6004style.
6005+
6006_MiniIcon_ specifies a pixmap to use as the miniature icon for the
6007window. This miniature icon can be drawn in a title-bar button (see
6008*ButtonStyle*), and can be used by various fvwm modules (*FvwmIconMan*
6009and *FvwmPager*). It takes the name of a pixmap as an argument.
6010+
6011_WindowShadeShrinks_ and _WindowShadeScrolls_ control if the contents
6012of a window that is being shaded with the *WindowShade* command are
6013scrolled (default) or if they stay in place. The shrinking mode is a
6014bit faster
6015+
6016The _WindowShadeSteps_ option selects the number of steps for
6017animation when shading a window with *WindowShade*. It takes one
6018number as its argument. If the number has a trailing '_p_' it sets the
6019number of pixels to use as the step size instead of a fixed number of
6020steps. 0 disables the animation. This happens too if the argument is
6021omitted or invalid.
6022+
6023The *WindowShade* command has two modes of operation: busy and lazy
6024shading. Busy shading can be 50% slower than lazy shading, but the
6025latter can look strange under some conditions, for example, if the
6026window borders, buttons or the title are filled with a tiled pixmap.
6027Also, the window handles are not drawn in lazy mode and the border
6028relief may only be drawn partially right before the window reaches the
6029shaded state or tight after leaves the unshaded state. By default,
6030fvwm uses lazy mode if there are no bad visual effects (not counting
6031the window handles) and busy mode otherwise. Use the
6032_WindowShadeAlwaysLazy or WindowShadeBusy_ to force using the lazy or
6033busy mode. The default setting is restored with _WindowShadeLazy_.
6034+
6035_ResizeOpaque_ instructs fvwm to resize the corresponding windows with
6036their contents visible instead of using an outline. Since this causes
6037the application to redraw frequently it can be quite slow and make the
6038window flicker excessively, depending on the amount of graphics the
6039application redraws. The _ResizeOutline_ style (default) negates the
6040_ResizeOpaque_ style. Many applications do not like their windows
6041being resized opaque, e.g. XEmacs, Netscape or terminals with a pixmap
6042background. If you do not like the result, do not use the
6043_ResizeOpaque_ style for these windows. To exempt certain windows from
6044opaque resizing you could use these lines in your configuration file:
6045+
6046
6047....
6048Style * ResizeOpaque
6049Style rxvt ResizeOutline
6050Style emacs ResizeOutline
6051....
6052
6053+
6054_Sticky_ makes the window sticky, i.e. it is always visible on each
6055page and each desk. The opposite style, _Slippery_ reverts back to the
6056default.
6057+
6058_StickyIcon_ makes the window sticky when it's iconified. It
6059de-iconifies on top the active desktop. _SlipperyIcon_ reverts back to
6060the default.
6061+
6062_StickyAcrossPages_ and _StickyAcrossPagesIcon_ work like _Sticky_ and
6063_StickyIcon_, but stick the window only across pages, not desks while
6064_StickyAcrossDesks and StickyAcrossDesksIcon_ works the other way
6065round.
6066+
6067Windows that have been marked as _Sticky_ or _StickyAcrossDesks_ or
6068_StickyAcrossPages_ will have stipples drawn on the titlebar. This can
6069be negated with the !_StickyStippledTitle_ style. The style
6070_StickyStippledTitle_ puts back the stipples where that window has
6071also been marked as _Sticky_. Note that this is the default style for
6072_Sticky_ windows. Sticky icons will have stipples drawn on the icon
6073title. This can be disabled in the same way with the
6074!_StickyStippledIconTitle_ style.
6075+
6076Windows with the _StartIconic_ style are shown as icons initially.
6077Note that some applications counteract that by deiconifying
6078themselves. The default is to not iconify windows and can be set with
6079the _StartNormal_ style.
6080+
6081_StickyIcon_ makes the window sticky when it's iconified. It
6082de-iconifies on top the active desktop. _SlipperyIcon_ reverts back to
6083the default.
6084+
6085_StickyIconPage_ works like _StickyIcon_, but sticks the icon only
6086across pages, not desks while _StickyIconDesk_ works the other way
6087round.
6088+
6089_StippledIconTitle_ works like _StippledTitle_ in that it draws
6090stipples on the titles of icons but doesn't make the icon sticky.
6091+
6092_IgnoreRestack_ makes fvwm ignore attempts of clients to raise or
6093lower their own windows. By default, the opposite style,
6094_AllowRestack_ is active.
6095+
6096_FixedPosition_ and _FixedUSPosition_ make fvwm ignore attempts of the
6097user to move the window. It is still possible to move the window by
6098resizing it. To allow the user to move windows, use the
6099_VariablePosition_ or _VariableUSPosition_ style.
6100+
6101_FixedSize_ and _FixedUSSize_ make fvwm ignore attempts of the user to
6102resize the window. To allow the user to resize windows, use the
6103_VariableSize_ or _VariableUSSize_ style.
6104+
6105_FixedPPosition_ and _FixedPSize_ make fvwm ignore attempts of the
6106program to move or resize its windows. To allow this kind of actions,
6107use the _VariablePPosition_ or _VariablePSize_ style. These styles may
6108sometimes affect the initial placement and dimensions of new windows
6109(depending on the application). If windows are created at strange
6110places, try either the _VariablePPosition_ or _!UsePPosition_ styles.
6111The _FixedPSize_ style may screw up window dimensions for some
6112applications. Do Not use this style in this case.
6113+
6114_MoveByProgramMethod_ affects how fvwm reacts to requests by the
6115application to move its windows. By default, fvwm tries to detect
6116which method to use, but it sometimes detects the wrong method. You
6117may come across a window that travels across the screen by a few
6118pixels when the application resizes it, moves to a screen border with
6119the frame decorations off screen, that remembers its position for the
6120next time it starts but appears in a slighly shifted position, or that
6121attepmts to become full screen but has the. Try out both options,
6122_UseGravity_ and _IgnoreGravity_ on the window (and that window only)
6123and see if that helps. By default, fvwm uses the _AutoDetect_ method.
6124Once the method was detected, it is never changed again. As long as
6125fvwm can not detect the proper method, it uses _IgnoreGravity_. To
6126force fvwm to retry the detection, use one of the other two options
6127first and then use _AutoDetect_ again.
6128+
6129Note: This option was introduced to alleviate a problem with the ICCCM
6130specification. The ICCCM clearly states that the _UseGravity_ option
6131should be used, but traditionally applications ignored this rule.
6132+
6133_Closable_ enables the functions *Close*, *Delete* and *Destroy* to be
6134performed on the windows. This is on by default. The opposite,
6135_!Closable_, inhibits the window to be closed.
6136+
6137_Iconifiable_ enables the function *Iconify* to be performed on the
6138windows. This is on by default. The opposite, _!Iconifiable_, inhibits
6139the window from being iconified.
6140+
6141_Maximizable_ enables the function *Maximize* to be performed on the
6142windows. This is on by default. The opposite, _!Maximizable_, inhibits
6143the window from being maximized.
6144+
6145_AllowMaximizeFixedSize_ enables the function *Maximize* to be
6146performed on windows that are not resizable, unless maximization has
6147been disabled either using the style _!Maximizable_ or through WM
6148hints. This is on by default. The opposite, _!AllowMaximizeFixedSize_,
6149inhibits all windows that are not resizable from being maximized.
6150+
6151_ResizeHintOverride_ instructs fvwm to ignore the program supplied
6152minimum and maximum size as well as the resize step size (the
6153character size in many applications). This can be handy for broken
6154applications that refuse to be resized. Do not use it if you do not
6155need it. The default (opposite) style is _NoResizeOverride_.
6156+
6157_MinWindowSize [ width [ p | c ] height [ p | c ] ]_ Tells fvwm the
6158minimum width and height of a window. The values are the percentage of
6159the total screen area. If the letter '_p_' is appended to either of the
6160values, the numbers are interpreted as pixels. If the letter '_c_' is
6161appended to either of the values, the numbers are in terms of the client
6162window's size hints, which can be useful for windows such as terminals to
6163specify the number of rows or columns. This command is useful to deal with
6164windows that freak out if their window becomes too small. If you omit the
6165parameters or their values are invalid, both limits are set to 0 pixels
6166(which is the default value).
6167+
6168_MaxWindowSize [ width [ p | c ] height [ p | c ] ]_ Tells fvwm the
6169maximum width and height of a window. The values are the percentage of
6170the total screen area. If the letter '_p_' is appended to either of the
6171values, the numbers are interpreted as pixels. If the letter '_c_' is
6172appended to either of the values, the numbers are in terms of the client
6173window's size hints, which can be useful for windows such as terminals to
6174specify the number of rows or columns. This command is useful to force
6175large application windows to be fully visible. Neither _height_ nor _width_
6176may be less than 100 pixels. If you omit the parameters or their values
6177are invalid, both limits are set to 32767 pixels (which is the default).
6178+
6179With _IconifyWindowGroups_ all windows in the same window group are
6180iconified and deiconified at once when any window in the group is
6181(de)iconified. The default is _IconifyWindowGroupsOff_, which disables
6182this behavior. Although a number of applications use the window group
6183hint, it is rarely used in a proper way, so it is probably best to use
6184_IconifyWindowGroups_ only for selected applications.
6185+
6186The option _SnapAttraction_ affects interactive window movement: If
6187during an interactive move the window or icon comes within _proximity_
6188pixels of another the window or icon, it is moved to make the borders
6189adjoin. The default of 0 means that no snapping happens. Calling this
6190command without arguments turns off snap attraction and restores the
6191default behavior. Please refer also to the *SnapGrid* command.
6192+
6193The second argument determined is optional and may be set to one of
6194the five following values: With _All_ both icons and windows snap to
6195other windows and other icons. _SameType_ lets windows snap only to
6196windows, and icons snap only to icons. With _Windows_ windows snap
6197only to other windows. Similarly with _Icons_ icons snap only to other
6198icons. With _None_ no snapping takes place. This option can be useful
6199in conjunction with the following argument if you only want to snap
6200against the screen edges. The default behavior is _All_.
6201+
6202The third and last optional argument may be set to one of the four
6203following values:
6204+
6205* With _Screen_ the already snapping icons or windows, which is
6206controlled by the second argument, will snap now also to the screen
6207edges.
6208+
6209* _ScreenWindows_ snaps only windows to the screen edges.
6210+
6211* _ScreenIcons_ snaps only icons to the screen edges.
6212+
6213* _ScreenAll_ snaps windows and icons to the screen edges.
6214
6215The option _SnapGrid_ defines an invisible grid on the screen. During
6216an interactive move a window or icon is positioned such that its
6217location (top left corner) is coincident with the nearest grid point.
6218The default _x-grid-size_ and _y-grid-size_ setting are both 1, which
6219is effectively no grid all.
6220
6221An interactive move with both *SnapGrid* and _SnapAttraction_ results
6222in the window being moved to be adjacent to the nearest window border
6223(if within snap proximity) or grid position. The window moves the
6224shortest distance possible to satisfy both *SnapGrid* and
6225_SnapAttraction_. Note that the x and y coordinates are not coupled.
6226For example, a window may snap to another window on the x axis while
6227snapping to a grid point on the y axis. Using this style without
6228arguments reinstates the default settings.
6229
6230The styles _EdgeMoveDelay_ and _EdgeResizeDelay_ tells how hard it
6231should be to change the desktop viewport by moving or resizing a
6232window over the edge of the screen. The parameter tells how many
6233milliseconds the pointer must spend on the screen edge before fvwm
6234moves the viewport. The command *EdgeScroll* determines how far the
6235viewport is scrolled. If -1 is given as the delay, page flipping is
6236disabled completely. The defaults are no delay for moving (0) and no
6237flipping for resizing (-1). Using these styles without any argument
6238restores the default settings. Note that, with
6239
6240....
6241EdgeScroll 0 0
6242....
6243
6244it is still possible to move or resize windows across the edge of the
6245current screen. See also *EdgeThickness*.
6246
6247The option _EdgeMoveResistance_ makes it easier to place a window
6248directly adjacent to the screen's or xinerama screen's border. It
6249takes one or two parameters. The first parameter tells how many pixels
6250over the edge of the screen a window's edge must move before it
6251actually moves partially off the screen. The optional second parameter
6252does the same as the first, but for individual RandR screens. If
6253omitted, the value of the first parameter is assumed for this type of
6254movement. Set the second parameter to 0 to zero to ignore individual
6255RandR screen edges. Note that the center of the window being moved
6256determines the screen on which the window should be kept. Both values
6257are 0 by default. To restore the defaults, the option
6258_EdgeMoveResistance_ can be used without any parameters.
6259
6260The option _InitialMapCommand_ allows for any valid fvwm command or
6261function to run when the window is initially mapped by fvwm. Example:
6262
6263....
6264Style MyWindow StartsOnPage 0 0, InitialMapCommand Iconify
6265....
6266
6267
6268This would hence place the window called _MyWindow_ on page 0 0 for
6269the current desk, and immediately run the *Iconify* command on that
6270window.
6271
6272Note that should _InitialMapCommand_ be used as a global option for
6273all windows, but there is a need that some windows should not have
6274this command applied, then an action of *Nop* can be used on those
6275windows, as in the following example:
6276
6277....
6278Style * InitialMapCommand Iconify
6279Style XTeddy InitialMapCommand Nop
6280....
6281
6282*Window Manager placement*::
6283	Applications can place windows at a particular spot on the screen
6284	either by window manager hints or a geometry specification. When they
6285	do neither, then the window manager steps in to find a place for the
6286	window. Fvwm knows several ways to deal with this situation. The
6287	default is _TileCascadePlacement_.
6288+
6289_PositionPlacement_ [__Center__|__UnderMouse__|_move-arguments_] When
6290used without an argument, new windows are placed in the top left
6291corner of the display. With the argument _Center_, all new window
6292appear at the center of the screen, and with _UnderMouse_, windows are
6293centered under the mouse pointer where possible. If the window is
6294unable to fit on the screen because the pointer is at the edge of the
6295screen, then the window is forced on-screen using this option. If any
6296other _move-arguments_ are given, they are interpreted exactly as the
6297*Move* command does (with the exception that references to the current
6298window position do not work as the window has not been placed yet).
6299+
6300_CascadePlacement_ automatically place new windows in a cascading
6301fashion.
6302+
6303_TileCascadePlacement_ automatically places new windows in a smart
6304location - a location in which they do not overlap any other windows
6305on the screen. If no such position can be found _CascadePlacement_ is
6306used as a fall-back method.
6307+
6308_TileManualPlacement_ This is the same as _TileCascadePlacement_, but
6309uses _ManualPlacement_ as the fall-back method.
6310+
6311_MinOverlapPlacement_ automatically places new windows in a location
6312in which the overlapping area in pixels of other windows is minimized.
6313By default this placement policy tries to avoid overlapping icons and
6314windows on higher layers. This can be configured with the
6315_MinOverlapPlacementPenalties_ style.
6316+
6317_MinOverlapPercentPlacement_ is similar to _MinOverlapPlacement_ but
6318tries to minimize the overlapped percentages of other windows instead
6319of the overlapped area in pixels. This placement policy tries to avoid
6320covering other windows completely and tries even harder not to cover
6321small windows. This can be configured with the
6322_MinOverlapPlacementPenalties_ and
6323_MinOverlapPercentPlacementPenalties_ styles.
6324+
6325_MinOverlapPlacementPenalties_ takes at most 6 positive or null
6326decimal arguments:
6327+
6328
6329....
6330normal ontop icon sticky below strut
6331....
6332
6333+
6334if trailing arguments are missing the default is used which is:
6335+
6336
6337....
63381 5 10 1 0.05 50
6339....
6340
6341+
6342To reset this style to the default values, prefix it with a '!'. This
6343style configures the _MinOverlapPlacement_ and
6344_MinOverlapPercentPlacement_ placement policy. The _normal_ factor
6345affects normal windows, the _ontop_ factor affects windows with a
6346greater layer than the window being placed, the _icon_ factor affects
6347icons, the _sticky_ factor affects sticky windows, the _below_ factor
6348affects windows with a smaller layer than the window being placed, the
6349_strut_ factor affects the complement of the EWMH working area if the
6350window being placed has the _EWMHPlacementUseWorkingArea_ style and
6351windows with an EWMH strut hint (i.e., a "please do not cover me"
6352hint) if the window being placed has the
6353_EWMHPlacementUseDynamicWorkingArea_ style. These factors represent
6354the amount of area that these types of windows (or area) are counted
6355as, when a new window is placed. For example, by default the area of
6356ontop windows is counted 5 times as much as normal windows. So
6357_MinOverlapPlacement_ and _MinOverlapPercentPlacement_ covers 5 times
6358as much area of another window before it will cover an ontop window.
6359To treat ontop windows the same as other windows, set this to 1. To
6360really, really avoid putting windows under ontop windows, set this to
6361a high value, say 1000. This style affects the window already mapped
6362and not the window which is currently placed. There is one exception
6363to this rule: in the case of the window being placed has the
6364_EWMHPlacementUseWorkingArea_ style the _strut_ factor affects the
6365placed window.
6366+
6367_MinOverlapPercentPlacementPenalties_ takes at most 4 positive or null
6368integer arguments:
6369+
6370
6371....
6372cover_100 cover_95 cover_85 cover_75
6373....
6374
6375+
6376if trailing arguments are missing the defaults are used which are:
6377+
6378
6379....
638012 6 4 1
6381....
6382
6383+
6384To reset this style to the default values, prefix it with a '!'. This
6385style affects the _MinOverlapPercentPlacement_ placement policy and is
6386similar to the _MinOverlapPlacementPenalties_ style. The _cover_xx_
6387factor is used when the window being placed covers at least _xx_
6388percent of the window. This factor is added to the factor determined
6389by the _MinOverlapPlacementPenalties_ style.
6390+
6391_ManualPlacement_ (aka active placement). The user is required to
6392place every new window manually. The window only shows as a rubber
6393band until a place is selected manually. The window is placed when a
6394mouse button or any key except _Escape_ is pressed. Escape aborts
6395manual placement which places the window in the top left corner of the
6396screen. If mouse button 2 is pressed during the initial placement of a
6397window (respectively _Shift_ and mouse button 1 in case Mwm emulation
6398has been enabled with the *Emulate* command), the user is asked to
6399resize the window too.
6400+
6401It is possible to define buttons usable to place windows with the
6402*Move* command and the special context 'P' for placement (see *Move*
6403command). However, you can't redefine the way to also resize the
6404window other than the way it is affected by the *Emulate* command. The
6405button used for placing the window can be checked with the
6406_PlacedByButton_ condition (see *Current* command).
6407+
6408Example:
6409+
6410
6411....
6412Style * ManualPlacement
6413
6414*FvwmEvent: PassID
6415*FvwmEvent: add_window GrowDownFunc
6416AddToFunc StartFunction
6417+ I FvwmEvent
6418
6419AddToFunc GrowDownFunc
6420+ I windowid $0 (PlacedByButton 3) \
6421Resize bottomright keep -0p
6422....
6423
6424+
6425Now, whenever a window is created and the user presses button 3 to
6426finish initial placement, the window is automatically enlarged until
6427it hits the bottom screen border.
6428+
6429_Old placement styles_ DumbPlacement / SmartPlacement /
6430SmartPlacementOff, CleverPlacement / CleverPlacementOff,
6431ActivePlacement / RandomPlacement, ActivePlacementsHonorsStartsOnPage
6432/ ActivePlacementsHonorsStartsOnPageOff, GlobalOpts
6433SmartPlacementIsReallySmart / GlobalOpts SmartPlacementIsNormal are
6434still supported but will be removed in the future. The old and new
6435styles can be translated according to the following table:
6436+
6437
6438....
6439GlobalOpts SmartPlacementIsReallySmart
6440Style * SmartPlacement
6441-->
6442Style * SmartPlacement, CleverPlacement
6443
6444GlobalOpts SmartPlacementIsNormal
6445Style * SmartPlacement
6446-->
6447Style * SmartPlacement, CleverPlacementOff
6448
6449Style * DumbPlacement, RandomPlacement
6450-->
6451Style * CascadePlacement
6452
6453Style * DumbPlacement, ActivePlacement
6454-->
6455Style * ManualPlacement
6456
6457Style * SmartPlacement, \
6458RandomPlacement, CleverPlacementOff
6459-->
6460Style * TileCascadePlacement
6461
6462Style * SmartPlacement, \
6463ActivePlacement, CleverPlacementOff
6464-->
6465Style * TileManualPlacement
6466
6467Style * SmartPlacement, CleverPlacement
6468-->
6469Style * MinOverlapPlacement
6470
6471Style * SmartPlacement, \
6472ActivePlacement, CleverPlacement
6473-->
6474Style * MinOverlapPercentPlacement
6475
6476Style * ActivePlacementsHonorsStartsOnPage
6477-->
6478Style * ManualPlacementsHonorsStartsOnPage
6479
6480Style * ActivePlacementsHonorsStartsOnPageOff
6481-->
6482Style * ManualPlacementsHonorsStartsOnPageOff
6483....
6484
6485*Placement policy options and window stacking*::
6486	_!UsePPosition_ instructs fvwm to ignore the program specified
6487	position (PPosition hint) when adding new windows. Using PPosition is
6488	required for some applications, but if you do not have one of those
6489	it's a real headache. Many programs set PPosition to something
6490	obnoxious like 0,0 (upper left corner). Note: _!UsePPosition_ is
6491	equivalent to the deprecated option _!UsePPosition_
6492+
6493_!UseUSPosition_ works like _!UsePPosition_ but applies suppresses
6494using the user specified position indicated by the program (USPosition
6495hint). It is generally a bad thing to override the user's choice, but
6496some applications misuse the USPosition hint to force their windows to
6497a certain spot on the screen without the user's consent. Note:
6498_!UseUSPosition_ is equivalent to the deprecated option _!USPosition_
6499+
6500_NoUseTransientPPosition_ and _UseTransientPPosition_ work like
6501_!UsePPosition_ and _UsePPosition_ but apply only to transient
6502windows. Note: _!UseTransientPPosition_ is equivalent to the
6503deprecated option _!TransientPPosition_
6504+
6505_NoUseIconPosition_ instructs fvwm to ignore the program specified
6506icon position (IconPosition hint) when iconifying the window. Note:
6507_!UseIconPosition_ is equivalent to the deprecated option
6508_!IconPosition_
6509+
6510_StartsOnDesk_ takes a numeric argument which is the desktop number on
6511which the window should be initially placed. Note that standard Xt
6512programs can also specify this via a resource (e.g. "-xrm '*Desk:
65131'").
6514+
6515_StartsOnPage_ takes 1, 2, or 3 numeric arguments. If one or three
6516arguments are given, the first (or only) argument is the desktop
6517number. If three arguments are given, the 2nd and 3rd arguments
6518identify the x,y page position on the virtual window. If two arguments
6519are given, they specify the page position, and indicate no desk
6520preference. If only one argument is given, _StartsOnPage_ functions
6521exactly like _StartsOnDesk_. For those standard Xt programs which
6522understand this usage, the starting desk/page can also be specified
6523via a resource (e.g., "-xrm '*page: 1 0 2'"). _StartsOnPage_ in
6524conjunction with _SkipMapping_ is a useful technique when you want to
6525start an app on some other page and continue with what you were doing,
6526rather than waiting for it to appear.
6527+
6528_StartsOnScreen_ takes one argument. It must be a valid RandR name. A
6529new window is placed on the specified screen. The default is to place
6530windows on the screen that contains the mouse pointer at the time the
6531window is created. However, those windows which are not placed by fvwm
6532(i.e., those with a USPosition hint from a user specified geometry)
6533are normally placed in a position relative to all identified screens.
6534+
6535_StartsOnPageIncludesTransients_ causes the _StartsOnPage_ style to be
6536applied even for transient windows. This is not usually useful, since
6537transients are usually pop ups that you want to appear in your visible
6538viewport; but occasionally an application uses a transient for
6539something like a startup window that needs to be coerced into place.
6540+
6541_ManualPlacementIgnoresStartsOnPage_ suppresses _StartsOnPage_ or
6542_StartsOnDesk_ placement in the event that both _ManualPlacement_ and
6543_SkipMapping_ are in effect when a window is created. This prevents
6544you from interactively placing a window and then wondering where it
6545disappeared to, because it got placed on a different desk or page.
6546_ManualPlacementHonorsStartsOnPage_ allows this to happen anyway. The
6547option has no effect if _SkipMapping_ is not in effect, because fvwm
6548switches to the proper desk/page to perform interactive placement. The
6549default is _ManualPlacementIgnoresStartsOnPage_;
6550_ManualPlacementHonorsStartsOnPage_ matches the way the old
6551_StartsOnDesk_ style used to handle the situation.
6552+
6553_CaptureHonorsStartsOnPage_ causes the initial capture (of an already
6554existing window) at startup to place the window according to the
6555_StartsOnPage_ and _StartsOnScreen_ desk, page and screen
6556specification. _CaptureIgnoresStartsOnPage_ causes fvwm to ignore
6557these settings (including _StartsOnDesk_) on initial capture. The
6558default is _CaptureIgnoresStartsOnPage_.
6559+
6560_RecaptureHonorsStartsOnPage_ causes a window to be placed according
6561to, or revert to, the _StartsOnPage_ and _StartsOnScreen_ desk, page
6562and screen specification on *Restart*. _RecaptureIgnoresStartsOnPage_
6563causes fvwm to respect the current window position on *Restart*. The
6564default is _RecaptureIgnoresStartsOnPage_.
6565+
6566_Layer_ accepts one optional argument: a non-negative integer. This is
6567the layer the window is put in. If no argument is given, any
6568previously set value is deleted and the default layer is implied.
6569+
6570_StaysOnTop_ puts the window in the top layer. This layer can be
6571changed by the command *DefaultLayers*; the default is 6.
6572+
6573_StaysPut_ puts the window in the put layer. This layer can be changed
6574by the command *DefaultLayers*; the default is 4.
6575+
6576_StaysOnBottom_ puts the window in the bottom layer. This layer can be
6577changed by the command *DefaultLayers*; the default is 2.
6578+
6579_StartsLowered_ instructs fvwm to put the window initially at the
6580bottom of its layer rather than the default _StartsRaised_.
6581+
6582_StartShaded_ tells fvwm to shade the window. An optional direction
6583argument may be given, which can be one of "_North_", "_South_",
6584"_West_", "_East_", "_NorthWest_", "_NorthEast_", "_SouthWest_",
6585"_SouthEast_" or if no direction is given, the default is to shade
6586north.
6587+
6588_SkipMapping_ tells fvwm not to switch to the desk the window is on
6589when it gets mapped initially (useful with _StartsOnDesk_ or
6590_StartsOnPage_).
6591+
6592_KeepWindowGroupsOnDesk_ makes new windows that have the window group
6593hint set appear on the same desk as the other windows of the same
6594group. Since this behavior may be confusing, the default setting is
6595_ScatterWindowGroups_. The window group hint is ignored when placing
6596windows in this case.
6597
6598*Transient windows*::
6599	_DecorateTransient_ causes transient windows, which are normally left
6600	undecorated, to be given the usual fvwm decorations (title bar,
6601	buttons, etc.). Note that some pop-up windows, such as the xterm
6602	menus, are not managed by the window manager and still do not receive
6603	decorations. _NakedTransient_ (the default) causes transient windows
6604	not to be given the standard decorations. You can only bind keys or
6605	mouse buttons to the sides and the client part of an undecorated
6606	window ('S' and ´W' contexts in bindings, see *Mouse* and _Key_
6607	commands).
6608+
6609A window with the _RaiseTransient_ style that has transient windows
6610raises all its transients when it is raised. The _DontRaiseTransient_
6611style disables this behavior. All windows are then treated as if they
6612had no transients.
6613+
6614A window with the _LowerTransient_ style that has transient windows
6615lowers all its transients when it is lowered. The _DontLowerTransient_
6616style disables this behavior. All windows are then treated as if they
6617had no transients.
6618+
6619The _StackTransientParent_ style augments _RaiseTransient_ and
6620_LowerTransient_ styles. Raising a window with _StackTransientParent_
6621style transfers the raise action to the main window if the window
6622being raised is a transient and its main window has _RaiseTransient_
6623style; this effect makes raise on a transient act just like raise on
6624its main - the whole group is raised. Similar behavior holds for
6625lowering a whole group of transients when the main has
6626_LowerTransient_ style. _DontStackTransientParent_ turns this behavior
6627off. _(Dont)StackTransientParent_ has no effect if _RaiseTransient_
6628and _LowerTransient_ are not used.
6629+
6630A reasonable emulation of Motif raise/lower on transients is possible
6631like this
6632+
6633
6634....
6635Style * RaiseTransient
6636Style * LowerTransient
6637Style * StackTransientParent
6638....
6639
6640*Extended Window Manager Hints styles*::
6641	To understand the used terminology in this sub section, please read
6642	the *Extended Window Manager Hints* section.
6643+
6644_EWMHDonateIcon_ instructs fvwm to set the application ewmh icon hint
6645with the icon that is used by fvwm if the application does not provide
6646such hint (and if the icon used by fvwm is not an icon window).
6647_EWMHDonateMiniIcon_ does the same thing for mini icons. This allows
6648compliant pager, taskbar, iconbox ...etc to display the same (mini)
6649icons as fvwm. Note that on some hardware (e.g., 8-bit displays) these
6650styles can slow down window mapping and that in general only one of
6651these styles is needed by a compliant application.
6652_EWMHDontDonateIcon_ and _EWMHDontDonateMiniIcon_ restore the defaults
6653which are to not set any ewmh (mini) icons hints.
6654+
6655By default, if an application provides an ewmh icon hint of small size
6656(i.e., height and width less than or equal to 22), then fvwm uses this
6657icon as its mini icon. _EWMHMiniIconOverride_ instructs fvwm to ignore
6658ewmh icons and to use the mini icon provided by the _MiniIcon_ style.
6659_EWMHNoMiniIconOverride_ restores the default.
6660+
6661_EWMHUseStackingOrderHints_ causes fvwm to use EWMH hints and respect
6662EWMH hints which change the window layer.
6663_EWMHIgnoreStackingOrderHints_ causes fvwm to ignore EWMH layer hints.
6664+
6665An application can ask for some reserved space on the desktop by a
6666hint. In the EWMH terminology such a hint is called a strut and it is
6667used to compute the working area and may be used for window placement
6668and in the maximize command. _EWMHIgnoreStrutHints_ causes fvwm to
6669ignore such hints, as _EWMHUseStrutHints_, causes fvwm to use it which
6670is the default.
6671+
6672_EWMHIgnoreStateHints_ causes fvwm to ignore initial EWMH state hints
6673when a new window is mapped. The default _EWMHUseStateHints_ causes
6674fvwm to accept such hints.
6675+
6676_EWMHIgnoreWindowType_ causes fvwm to ignore EWMH window type
6677specification. The default _!EWMHIgnoreWindowType_ causes fvwm to
6678style windows of specified types as such.
6679+
6680_EWMHMaximizeIgnoreWorkingArea_ causes fvwm to ignore the EWMH working
6681area when it executes a *Maximize* command. With
6682_EWMHMaximizeUseWorkingArea_ the EWMH working area is used as with
6683_EWMHMaximizeUseDynamicWorkingArea_ the EWMH dynamic working area is
6684used (the default).
6685+
6686_EWMHPlacementIgnoreWorkingArea_ causes fvwm to ignore the EWMH
6687working area when it places (or places again) a window. With
6688_EWMHPlacementUseWorkingArea_ the EWMH working area is taken in
6689account as with _EWMHPlacementUseDynamicWorkingArea_ the EWMH dynamic
6690working area is taken in account (the default). Note that with the
6691_MinOverlapPlacement_ and _MinOverlapPercentPlacement_ placement
6692policy, the way the EWMH (dynamic) working area is taken in account is
6693configurable with the _MinOverlapPlacementPenalties_ style.
6694
6695*Miscellaneous*::
6696	The _BackingStore_, _BackingStoreOff_ and _BackingStoreWindowDefault_
6697	determine if the X server uses backing store for the window or not.
6698	_BackingStore_ means that the X server tries to keep the obscured
6699	parts of a window in memory. This is usually slower if the client runs
6700	on the same machine as the X server, but can be much faster if the
6701	connection is slow (see also _SaveUnder_ below). _BackingStoreOff_
6702	disables backing store for the window. By default, fvwm does not
6703	enable or disable backing store itself but leaves is as the window
6704	requested it. To revert back to the application's choice, use the
6705	_BackingStoreWindowDefault_ style.
6706+
6707Note: This style is useless if the X server does not allow backing
6708store.
6709+
6710_SaveUnder_ enables the corresponding window attribute in the X
6711server. For a window using this style, the X server tries to store the
6712graphics below it in memory which is usually slower if the client runs
6713on the same machine as the X server. _SaveUnder_ may speed up fvwm if
6714the connection to the X server is slow (e.g. over a modem link). To
6715disable save under, use the _SaveUnderOff_ style. This is the default.
6716See also _BackingStore_ above.
6717+
6718Note: This style is useless if the X server does not allow save under.
6719+
6720_ParentalRelativity_ enables clients that use a background pixmap of
6721type _ParentRelative_ to achieve transparency. Fvwm modules that
6722support transparent colorsets require this setting. _Opacity_ is the
6723default and should be used for all non-transparent clients for better
6724performance.
6725+
6726_MwmDecor_ makes fvwm attempt to recognize and respect the mwm
6727decoration hints that applications occasionally use. To switch this
6728style off, use the _NoDecorHint_ style.
6729+
6730_MwmFunctions_ makes fvwm attempt to recognize and respect the mwm
6731prohibited operations hints that applications occasionally use.
6732_HintOverride_ makes fvwm shade out operations that mwm would
6733prohibit, but it lets you perform the operation anyway. _NoFuncHint_
6734allows turns off the mwm hints completely.
6735+
6736_OLDecor_ makes fvwm attempt to recognize and respect the olwm and
6737olvwm hints that many older XView and OLIT applications use. Switch
6738this option off with _NoOLDecor_.
6739+
6740With _GNOMEIgnoreHints_ fvwm ignores all GNOME hints for the window,
6741even if GNOME compliance is compiled in. This is useful for those
6742pesky applications that try to be more clever than the user and use
6743GNOME hints to force the window manager to ignore the user's
6744preferences. The _GNOMEUseHints_ style switches back to the default
6745behavior.
6746+
6747_UseDecor_ This style is deprecated and will be removed in the future.
6748There are plans to replace it with a more flexible solution in
6749fvwm-3.0.
6750+
6751_UseDecor_ accepts one argument: the name of a decor created with
6752*AddToDecor*. If no decor name is specified, the "Default" decor is
6753used. Windows do not actually contain decors, but are always assigned
6754to one. If the decor is later modified with *AddToDecor*, the changes
6755are visible for all windows which are assigned to it. The decor for a
6756window can be reassigned with *ChangeDecor*.
6757+
6758_UseStyle_ This style is deprecated and will be removed in the future.
6759There are plans to replace it with a more flexible solution in
6760fvwm-3.0.
6761+
6762_UseStyle_ takes one arg, which is the name of another style. That way
6763you can have unrelated window names easily inherit similar traits
6764without retyping. For example:
6765+
6766
6767....
6768Style rxvt UseStyle XTerm
6769....
6770
6771+
6772Warning: If a style is built from one or more parent styles and the
6773parent styles are changed, the derived style is not modified. To
6774achieve this you have to issue the _UseStyle_ line again.
6775+
6776_Unmanaged_ Windows with the _Unmanaged_ style option are ignored by
6777fvwm. They are not decorated, can not be moved or resized, etc. You
6778probably want to use *Bugopts RaiseOverUnmanaged* too. This option can
6779be turned off with the _!Unmanaged_ style.
6780+
6781_State_ sets the initial value of one of the 32 user defined states
6782which are associated with each window. The state number ranges from 0
6783to 31 and must be given as an argument. The states have no meaning in
6784fvwm, but they can be checked in conditional commands like *Next* with
6785the _State_ condition and manipulated with the *State* command.
6786+
6787
6788....
6789# turn on state 11 for xterms ...
6790Style xterm State 11
6791# ... but not for rxvts.
6792Style rxvt !State 11
6793....
6794
6795+
6796Windows with the _WindowListSkip_ styles do not appear in the menu
6797that is created with the *WindowList* command or the lists shown in
6798modules like *FvwmIconMan*. In the modules, the style can usually be
6799ignored with an option. Please refer to the man page of the module in
6800question for further information. To disable this feature, use the
6801default style _WindowListHit_.
6802+
6803The styles _CirculateSkip_ and _CirculateHit_ control whether the
6804window is considered by conditional commands, for example *Next*,
6805_Prev_ or _All_. Windows with _CirculateSkip_, are never selected by
6806conditional commands. However, the styles can be overridden explicitly
6807in the condition with the _CirculateHit_, _CirculateHitIcon_ or
6808_CirculateHitShaded_ conditions, and some conditional commands,
6809e.g. *Current* and _All_, do this by default. The styles
6810_CirculateSkipIcon_, _CirculateHitIcon_, _CirculateSkipShaded_ and
6811_CirculateHitShaded_ work like _CirculateSkip_ and _CirculateHit_ but
6812apply only to iconic or shaded windows. Note: if multiple ...Skip...
6813options are combined, windows are only selected if they match none of
6814the given conditions. So, with
6815+
6816
6817....
6818Style * CirculateSkipIcon, CirculateSkipShaded
6819....
6820
6821+
6822only windows that are neither iconic nor shaded are selected. Note:
6823For historical reasons, the conditional commands understand the names
6824of these styles as condition names. Take care not to confuse them.
6825
6826*Examples*::
6827
6828....
6829# Change default fvwm behavior to no title-
6830# bars on windows! Also define a default icon.
6831
6832Style *       !Title,                	   \
6833              Icon unknown1.xpm,     	   \
6834              BorderWidth 4,         	   \
6835              HandleWidth 5
6836
6837# now, window specific changes:
6838Style Fvwm* !Handles, Sticky,        	   \
6839            WindowListSkip,          	   \
6840            BorderWidth 0
6841Style FvwmPager   StaysOnTop, BorderWidth 0
6842Style *lock       !Handles, Sticky,        \
6843            	  StaysOnTop, WindowListSkip
6844Style xbiff       Sticky, WindowListSkip
6845Style FvwmButtons !Handles, Sticky,        \
6846            	  WindowListSkip
6847Style sxpm        !Handles
6848
6849# Put title-bars back on xterms only!
6850Style xterm     Title, Color black/grey
6851
6852Style rxvt        Icon term.xpm
6853Style xterm       Icon rterm.xpm
6854Style xcalc       Icon xcalc.xpm
6855Style xbiff       Icon mail1.xpm
6856Style xmh         Icon mail1.xpm,         \
6857                  StartsOnDesk 2
6858Style xman        Icon xman.xpm
6859Style matlab      Icon math4.xpm,         \
6860                  StartsOnDesk 3
6861Style xmag        Icon magnifying_glass2.xpm
6862Style xgraph      Icon graphs.xpm
6863Style FvwmButtons Icon toolbox.xpm
6864Style Maker       StartsOnDesk 1
6865Style signal      StartsOnDesk 3
6866
6867# Fire up Netscape on the second desk, in the
6868# middle of my 3x3 virtual desktop, and do not
6869# bother me with it...
6870Style Netscape* SkipMapping,              \
6871          StartsOnPage 1 1 1
6872....
6873
6874Note that all properties for a window are or'ed together. In the above
6875example "FvwmPager" gets the property _StaysOnTop_ via an exact window
6876name match but also gets _!Handles_, _Sticky_ and _WindowListSkip_ by
6877a match to "Fvwm*". It gets _!Title_ by virtue of a match to "*". If
6878conflicting styles are specified for a window, then the last style
6879specified is used.
6880
6881*WindowStyle* _options_::
6882	sets attributes (styles) on the selected window. The _options_ are
6883	exactly the same as for the *Style* command.
6884
6885=== Window Styles
6886
6887*AddButtonStyle* button [_state_] [_style_] [-- [!]_flag_ ...]::
6888	Adds a button style to _button_. _button_ can be a button number, or
6889	one of "_All_", "_Left_" or "_Right_". _state_ can be "_ActiveUp_",
6890	"_ActiveDown_", "_InactiveUp_" or "_InactiveDown_", or "_Active_" (the
6891	same as both "ActiveUp" and "ActiveDown") or "_Inactive_" (the same as
6892	both "InactiveUp" and "InactiveDown") or any of these 6 with
6893	"_Toggled_" prepended. The "Active" states apply to the focused
6894	window, the "Inactive" ones apply to all other windows. The "Up"
6895	states apply to the non pressed buttons, the "Down" ones apply to
6896	pressed buttons. The "Toggled" prefix refers to maximized, shaded or
6897	sticky windows that have the corresponding _MwmDecor..._ button style
6898	set. Additionally, the following shortcuts may be used: "_AllNormal_",
6899	"_AllToggled_", "_AllActive_", "_AllInactive_", "_AllUp_",
6900	"_AllDown_". They are actually different masks for 4 individual states
6901	from 8 total. These are supported too: "_AllActiveUp_",
6902	"_AllActiveDown_", "_AllInactiveUp_", "_AllInactiveDown_".
6903+
6904If _state_ is omitted, then the style is added to every state. If the
6905_style_ and _flags_ are enclosed in parentheses, then multiple _state_
6906definitions can be placed on a single line. _Flags_ for additional
6907button styles cannot be changed after definition.
6908+
6909Buttons are drawn in the order of definition, beginning with the most
6910recent button style, followed by those added with *AddButtonStyle*. To
6911clear the button style stack, change style flags, or for descriptions
6912of available styles and flags, see the *ButtonStyle* command.
6913+
6914Examples:
6915+
6916
6917....
6918**ButtonStyle** 1 Pixmap led.xpm -- Top Left
6919**ButtonStyle** 1 ActiveDown HGradient 8 grey black
6920**ButtonStyle All** --  UseTitleStyle
6921AddButtonStyle 1 \
6922	ActiveUp (Pixmap a.xpm) \
6923	ActiveDown (Pixmap b.xpm -- Top)
6924AddButtonStyle 1 Vector 4 50x30@1 70x70@0 30x70@0 50x30@1
6925....
6926
6927+
6928Initially for this example all button states are set to a pixmap. The
6929second line replaces the "ActiveDown" state with a gradient (it
6930overrides the pixmap assigned to it in the line before, which assigned
6931the same style to every state). Then, the _UseTitleStyle_ flag is set
6932for all buttons, which causes fvwm to draw any styles set with
6933*TitleStyle* before drawing the buttons. Finally, *AddButtonStyle* is
6934used to place additional pixmaps for both "ActiveUp" and "ActiveDown"
6935states and a vector button style is drawn on top of all states.
6936
6937*AddTitleStyle* [_state_] [_style_] [-- [!]_flag_ ...]::
6938	Adds a title style to the title-bar. _state_ can be "_ActiveUp_",
6939	"_ActiveDown_", "_InactiveUp_" or "_InactiveDown_", or "_Active_" (the
6940	same as both "ActiveUp" and "ActiveDown") or "_Inactive_" (the same as
6941	both "InactiveUp" and "InactiveDown") or any of these 6 with "Toggled"
6942	prepended. If _state_ is omitted, then the style is added to every
6943	state. If the _style_ and _flags_ are enclosed in parentheses, then
6944	multiple _state_ definitions can be placed on a single line. This
6945	command is quite similar to the *AddButtonStyle* command.
6946+
6947Title-bars are drawn in the order of definition, beginning with the
6948most recent *TitleStyle*, followed by those added with
6949*AddTitleStyle*. To clear the title style stack, change style flags,
6950or for the descriptions of available styles and flags, see the
6951*TitleStyle* and *ButtonStyle* commands.
6952
6953*AddToDecor* _decor_::
6954	This command is deprecated and will be removed in the future. There
6955	are plans to replace it with a more flexible solution in fvwm-3.0.
6956+
6957Add or divert commands to the decor named _decor_. A decor is a name
6958given to the set of commands which affect button styles, title-bar
6959styles and border styles. If _decor_ does not exist it is created;
6960otherwise the existing _decor_ is modified. Note: Earlier versions
6961allowed to use the *HilightColor*, *HilightColorset* and *WindowFont*
6962commands in decors. This is no longer possible. Please use the *Style*
6963command with the _Hilight..._ and _Font_ options.
6964+
6965New decors start out exactly like the "default" decor without any
6966style definitions. A given decor may be applied to a set of windows
6967with the _UseDecor_ option of the *Style* command. Modifying an
6968existing decor affects all windows which are currently assigned to it.
6969+
6970*AddToDecor* is similar in usage to the *AddToMenu* and *AddToFunc*
6971commands, except that menus and functions are replaced by
6972*ButtonStyle*, *AddButtonStyle*, *TitleStyle*, *AddTitleStyle* and
6973*BorderStyle* commands. Decors created with *AddToDecor* can be
6974manipulated with *ChangeDecor*, *DestroyDecor*, *UpdateDecor* and the
6975*Style* option.
6976+
6977The following example creates a decor "FlatDecor" and style
6978"FlatStyle". They are distinct entities:
6979+
6980
6981....
6982AddToDecor FlatDecor
6983+ ButtonStyle All Active (-- flat) Inactive (-- flat)
6984+ TitleStyle  -- flat
6985+ BorderStyle -- HiddenHandles NoInset
6986
6987Style FlatStyle \
6988	UseDecor FlatDecor, HandleWidth 4, ForeColor white, \
6989	BackColor grey40, HilightFore black, HilightBack grey70
6990
6991Style xterm UseStyle FlatStyle
6992....
6993
6994+
6995An existing window's decor may be reassigned with *ChangeDecor*. A
6996decor can be destroyed with *DestroyDecor*.
6997+
6998
6999....
7000DestroyDecor FlatDecor
7001AddToDecor FlatDecor ...
7002
7003Style FlatStyle UseDecor FlatDecor
7004....
7005
7006+
7007and now apply the style again:
7008+
7009
7010....
7011Style xterm UseStyle FlatStyle
7012....
7013
7014*BorderStyle* _state_ [_style_] [-- [!]_flag_ ...]::
7015	Defines a border style for windows. _state_ can be either "_Active_"
7016	or "_Inactive_". If _state_ is omitted, then the style is set for both
7017	states. If the _style_ and _flags_ are enclosed in parentheses, then
7018	multiple _state_ definitions can be specified per line.
7019+
7020_style_ is a subset of the available button styles, and can only be
7021_TiledPixmap_ (uniform pixmaps which match the bevel colors work best
7022this way) or _Colorset_. If a '!' is prefixed to any _flag_, the
7023behavior is negated. If _style_ is not specified, then one can change
7024flags without resetting the style.
7025+
7026The _HiddenHandles_ flag hides the corner handle dividing lines on
7027windows with handles (this option has no effect for !_Handles_
7028windows). By default, _HiddenHandles_ is disabled.
7029+
7030The _NoInset_ flag supplements _HiddenHandles_. If given, the inner
7031bevel around the window frame is not drawn. If _HiddenHandles_ is not
7032specified, the frame looks a little strange.
7033+
7034_Raised_ causes a raised relief pattern to be drawn (default). _Sunk_
7035causes a sunken relief pattern to be drawn. _Flat_ inhibits the relief
7036pattern from being drawn.
7037+
7038To decorate the active and inactive window borders with a textured
7039pixmap, one might specify:
7040+
7041
7042....
7043BorderStyle Active TiledPixmap marble.xpm
7044BorderStyle Inactive TiledPixmap granite.xpm
7045BorderStyle Active -- HiddenHandles NoInset
7046....
7047
7048+
7049To clear the style for both states:
7050+
7051
7052....
7053BorderStyle Simple
7054....
7055
7056+
7057To clear for a single state:
7058+
7059
7060....
7061BorderStyle Active Simple
7062....
7063
7064+
7065To unset a flag for a given state:
7066+
7067
7068....
7069BorderStyle Inactive -- !NoInset
7070....
7071
7072+
7073title-bar buttons can inherit the border style with the
7074_UseBorderStyle_ flag (see *ButtonStyle*).
7075
7076*ButtonState* [ActiveDown _bool_] [Inactive _bool_] [InactiveDown _bool_]::
7077	The *ButtonState* command controls which states of the window titles
7078	and title buttons are used. The default is to use all four states:
7079	"ActiveUp", "ActiveDown", "InactiveUp" and "InactiveDown" (see
7080	*ButtonStyle* and *TitleStyle* commands). The _bool_ argument after
7081	the key word controls if the designated state is used ("True") or not
7082	("False"). The _bool_ flag is the same as other commands, and not
7083	limited to just "True" or "False"; "Yes" and "No" may also be used.
7084	The "ActiveUp" state cannot be deactivated. If no arguments are
7085	provided or the given arguments are illegal, the default is restored.
7086+
7087If _ActiveDown_ argument is "False", no different button style for the
7088pressed down buttons used, instead "ActiveUp" state is used even when
7089button is pressed.
7090+
7091If _Inactive_ argument is "False", focused and unfocused windows look
7092similarly, the corresponding "Active" states are always used.
7093+
7094If _InactiveDown_ argument is "False" (only applied when _Inactive_ is
7095"True"), the pressed titles and title buttons in non-focused windows
7096are drawn using "InactiveUp" or "ActiveUp" states depending on the
7097values of the other key words.
7098
7099*ButtonStyle* button [_state_] [_style_] [-- [!]_flag_ ...]::
7100	Sets the button style for a title-bar button. _button_ is the
7101	title-bar button number between 0 and 9, or one of "_All_", "_Left_",
7102	"_Right_", or "_Reset_". Button numbering is described in the *Mouse*
7103	command section. If the _style_ and _flags_ are enclosed in
7104	parentheses, then multiple _state_ definitions can be specified per
7105	line.
7106+
7107_state_ refers to which button state should be set. Button states are
7108defined as follows: "_ActiveUp_" and "_ActiveDown_" refer to the
7109un-pressed and pressed states for buttons on active windows; while the
7110"_InactiveUp_" and "_InactiveDown_" states denote buttons on inactive
7111windows. The shortcut "_Active_" denotes both "ActiveUp" and
7112"ActiveDown" states. Shortcut "_Inactive_" denotes both "InactiveUp"
7113and "InactiveDown" states. The similar state names like just
7114described, but with the "Toggled" prefix are used instead for title
7115buttons which have one of the _MwmDecorMax_, _MwmDecorShade_,
7116_MwmDecorStick_ or _MwmDecorLayer_ hints, if the window is maximized,
7117shaded, sticky or placed on specific layer, respectively.
7118+
7119
7120....
7121AddToDecor Default
7122+ ButtonStyle 6                   \
7123  Vector 4 50x25@1 85x75@0 15x75@0 50x25@1
7124+ ButtonStyle 6 ToggledActiveUp   \
7125  Vector 4 50x75@0 85x25@1 15x25@0 50x75@0
7126+ ButtonStyle 6 ToggledActiveDown \
7127  Vector 4 50x75@0 85x25@1 15x25@0 50x75@0
7128+ ButtonStyle 6 ToggledInactive   \
7129  Vector 4 50x75@0 85x25@1 15x25@0 50x75@0
7130+ ButtonStyle 6 - MwmDecorShade
7131Mouse 0 6 N WindowShade
7132....
7133
7134+
7135Additionally, the following shortcuts may be used: "_AllNormal_",
7136"_AllToggled_", "_AllActive_", "_AllInactive_", "_AllUp_",
7137"_AllDown_". They are actually different masks for 4 individual states
7138from 8 total. These are supported too: "_AllActiveUp_",
7139"_AllActiveDown_", "_AllInactiveUp_", "_AllInactiveDown_".
7140+
7141If _state_ is specified, that particular button state is set. If
7142_state_ is omitted, every state is set. Specifying a style destroys
7143the current style (use *AddButtonStyle* to avoid this).
7144+
7145If _style_ is omitted, then state-dependent flags can be set for the
7146primary button style without destroying the current style. Examples
7147(each line should be considered independent):
7148+
7149
7150....
7151ButtonStyle Left -- flat
7152ButtonStyle All ActiveUp (-- flat) Inactive (-- flat)
7153....
7154
7155+
7156The first line sets every state of the left buttons to flat, while the
7157second sets only the "ActiveUp" and "Inactive" states of every button
7158to flat (only flags are changed; the buttons' individual styles are
7159not changed).
7160+
7161If you want to reset all buttons to their defaults:
7162+
7163
7164....
7165ButtonStyle Reset
7166....
7167
7168+
7169To reset the "ActiveUp" button state of button 1 to the default:
7170+
7171
7172....
7173ButtonStyle 1 ActiveUp Default
7174....
7175
7176+
7177To reset all button states of button 1 to the default of button number
71782:
7179+
7180
7181....
7182ButtonStyle 1 Default 2
7183....
7184
7185+
7186For any button, multiple _state_ definitions can be given on one line
7187by enclosing the _style_ and _flags_ in parentheses. If only one
7188definition per line is given the parentheses can be omitted.
7189+
7190_flags_ affect the specified _state_. If a '!' is prefixed to any
7191_flag_, its behavior is negated. The available state-dependent flags
7192for all styles are described here (the *ButtonStyle* entry deals with
7193state-independent flags).
7194+
7195_Raised_ causes a raised relief pattern to be drawn.
7196+
7197_Sunk_ causes a sunken relief pattern to be drawn.
7198+
7199_Flat_ inhibits the relief pattern from being drawn.
7200+
7201_UseTitleStyle_ causes the given button state to render the current
7202title style before rendering the buttons' own styles. The _Raised_,
7203_Flat_ and _Sunk_ *TitleStyle* flags are ignored since they are
7204redundant in this context.
7205+
7206_UseBorderStyle_ causes the button to inherit the decorated
7207*BorderStyle* options.
7208+
7209_Raised_, _Sunk_ and _Flat_ are mutually exclusive, and can be
7210specified for the initial *ButtonStyle* only. _UseTitleStyle_ and
7211_UseBorderStyle_ are also mutually exclusive (both can be off
7212however). The default is _Raised_ with both _UseBorderStyle and
7213UseTitleStyle_ left unset.
7214+
7215*Important*
7216+
7217for the "ActiveDown" and "InactiveDown" states: When a button is
7218pressed, the relief is inverted. Because of this, to obtain the raised
7219look in "ActiveDown" or "InactiveDown" states you must specify the
7220opposite of the desired relief (i.e. _Sunk_ for "ActiveDown" or
7221"InactiveDown"). This behavior is consistent, but may seem confusing
7222at first. The same applies to the "Toggled" states.
7223+
7224Button styles are classified as non-destructive, partially
7225destructive, or fully destructive. Non-destructive styles do not
7226affect the image. Partially destructive styles can obscure some or all
7227parts of the underlying image (i.e. _Pixmap_). Fully destructive
7228styles obscure the entire underlying image (i.e. _Solid_ or one of the
7229_gradient_ styles). Thus, if stacking styles with *AddButtonStyle* (or
7230*AddTitleStyle* for title-bars), use care in sequencing styles to
7231minimize redraw.
7232+
7233The available styles are:
7234+
7235_Simple_, _Default_, _Solid_, _Colorset_, _Vector_, _?Gradient_,
7236_Pixmap_, _AdjustedPixmap_, _ShrunkPixmap_, _StretchedPixmap_,
7237_TiledPixmap_, _MiniIcon_
7238+
7239The description of these styles and their arguments follow:
7240+
7241The _Simple_ style does nothing. There are no arguments, and this
7242style is an example of a non-destructive button style.
7243+
7244The _Default_ style conditionally accepts one argument: a number which
7245specifies the default button number to load. If the style command
7246given is *ButtonStyle* or *AddButtonStyle*, the argument is optional
7247(if given, it overrides the current button). If a command other than
7248*ButtonStyle* or *AddButtonStyle* is used, the number must be
7249specified.
7250+
7251The _Solid_ style fills the button with a solid color. The relief
7252border color is not affected. The color is specified as a single
7253argument. This style is fully destructive.
7254+
7255The _Colorset_ _cs_ [_alpha_] style fills the button with the Colorset
7256_cs_. The optional _alpha_ argument is a percentage between 0 and 100.
7257It causes fvwm to merge the colorset background onto the button using
7258this percentage. If the percentage is 0 the colorset background is
7259hidden and if it is 100 the colorset background is fully applied. The
7260default is 100. So, the destructiveness depends on the _alpha_
7261argument.
7262+
7263The _Vector_ _num_
7264__X__**[**__offset__**p]x**__Y__**[**__offset__**p]@***C*** ...**
7265style draws a line pattern. Since this is a standard button style, the
7266keyword _Vector_ is optional, _num_ is a number of point
7267specifications of the form
7268__X__**[**__offset__**p]x**__Y__**[**__offset__**p]@***C*** ...** _X_
7269and _Y_ are point coordinates inside the button, given in percents
7270(from 0 to 100). An optional absolute _offset_ in pixels, can be given
7271as "+<offset>p" for a positive or "-<offset>p" for a negative offset.
7272+
7273_C_ specifies a line color (0 - the shadow color, 1 - the highlight
7274color, 2 - the background color, 3 - the foreground color, 4 - only
7275move the point, do not draw). The first point color is not used. You
7276can use up to 10000 points in a line pattern. This style is partially
7277destructive.
7278+
7279The specification is a little cumbersome:
7280+
7281
7282....
7283ButtonStyle 2 Vector 4 50x30@1 70x70@0 30x70@0 50x30@1
7284....
7285
7286+
7287then the button 2 decoration uses a 4-point pattern consisting of a
7288line from (x=50,y=30) to (70,70) in the shadow color (@0), and then to
7289(30,70) in the shadow color, and finally to (50,30) in the highlight
7290color (@1). Is that too confusing? See the fvwm web pages for some
7291examples with screenshots.
7292+
7293A more complex example of _Vector_:
7294+
7295
7296....
7297ButtonStyle 8 Vector 10 45x65@2 45x75@3 \
729820x75@3 20x50@3 35x50@3 35x65@1 35x25@1 \
729975x25@1 75x65@0 35x65@0
7300ButtonStyle 0 Vector 10 45x65@2 45x75@0 \
730120x75@0 20x50@1 45x50@1 45x65@0 75x65@3 \
730275x25@3 35x25@3 35x47@3
7303....
7304
7305+
7306The _?Gradient_ styles denote color gradients. Fill in the question
7307mark with any one of the defined gradient types. Please refer to the
7308*Color Gradients* section for a description of the gradient syntax.
7309The gradient styles are fully destructive.
7310+
7311The _Pixmap_ style displays a pixmap. A pixmap should be specified as
7312an argument. For example, the following would give button number 2 the
7313same pixmap for all 4 states (2 active and 2 inactive), and button
7314number 4 all different pixmaps.
7315+
7316
7317....
7318ButtonStyle 2 Pixmap my_pixmap.xpm
7319ButtonStyle 4 \
7320ActiveUp (Pixmap activeup.xpm) \
7321ActiveDown (Pixmap activedown.xpm) \
7322Inactive (Pixmap inactiveup.xpm)
7323ButtonStyle 4 \
7324InactiveDown Pixmap inactivedown.xpm
7325....
7326
7327+
7328The pixmap specification can be given as an absolute or relative
7329pathname (see *ImagePath*). If the pixmap cannot be found, the button
7330style reverts to _Simple_. Flags specific to the _Pixmap_ style are
7331_Left_, _Right_, _Top_, and _Bottom_. These can be used to justify the
7332pixmap (default is centered for both directions). Pixmap transparency
7333is used for the color "None." This style is partially destructive.
7334+
7335The _AdjustedPixmap_ style is similar to the _Pixmap_ style. But the
7336image is resized to exactly fit the button.
7337+
7338The _ShrunkPixmap_ style is similar to the _Pixmap_ style. But if the
7339image is bigger than the button the image is resized to fit into the
7340button.
7341+
7342The _StretchedPixmap_ style is similar to the _Pixmap_ style. But if
7343the image is smaller than the button the image is resized to cover the
7344button.
7345+
7346The _TiledPixmap_ style accepts a pixmap to be tiled as the button
7347background. One pixmap is specified as an argument. Pixmap
7348transparency is not used. This style is fully destructive.
7349+
7350The _MiniIcon_ style draws the window's miniature icon in the button,
7351which is specified with the _MiniIcon_ option of the *Style* command.
7352This button style accepts no arguments. Example:
7353+
7354
7355....
7356Style *     MiniIcon mini-bx2.xpm
7357Style xterm MiniIcon mini-term.xpm
7358Style Emacs MiniIcon mini-doc.xpm
7359
7360ButtonStyle 1 MiniIcon
7361....
7362
7363*ButtonStyle* _button_ - [!]_flag_ ...::
7364	Sets state-independent flags for the specified _button_.
7365	State-independent flags affect button behavior. Each _flag_ is
7366	separated by a space. If a '!' is prefixed to the flag then the
7367	behavior is negated. The special flag _Clear_ clears any existing
7368	flags.
7369+
7370The following flags are usually used to tell fvwm which buttons should
7371be affected by mwm function hints (see _MwmFunctions_ option of the
7372*Style* command. This is not done automatically since you might have
7373buttons bound to complex functions, for instance.
7374+
7375_MwmDecorMenu_ should be assigned to title-bar buttons which display a
7376menu. The default assignment is the leftmost button. When a window
7377with the _MwmFunctions_ *Style* option requests not to show this
7378button, it is hidden.
7379+
7380_MwmDecorMin_ should be assigned to title-bar buttons which minimize
7381or iconify the window. The default assignment is the second button
7382over from the rightmost button. When a window with the _MwmFunctions_
7383*Style* option requests not to show this button, it is hidden.
7384+
7385_MwmDecorMax_ should be assigned to title-bar buttons which maximize
7386the window. The default assignment is the rightmost button. When a
7387window with the _MwmFunctions_ *Style* option requests not to show
7388this button, it is hidden. When the window is maximized, the vector
7389pattern on the button looks pressed in.
7390+
7391_MwmDecorShade_ should be assigned to title-bar buttons which shade
7392the window (see *WindowShade* command). When the window is shaded, the
7393vector pattern on the button looks pressed in.
7394+
7395_MwmDecorStick_ should be assigned to title-bar buttons which make the
7396window sticky. When the window is sticky, the vector pattern on the
7397button looks pressed in.
7398+
7399The flag _MwmDecorLayer_ _layer_ should be assigned to title-bar
7400buttons which place the window in the layer numbered _layer_. When the
7401window is on that specific layer, the vector pattern on the button
7402looks pressed in.
7403
7404*ChangeDecor* _decor_::
7405	This command is deprecated and will be removed in the future. There
7406	are plans to replace it with a more flexible solution in fvwm-3.0.
7407+
7408Changes the decor of a window to _decor_. _decor_ is "Default" or the
7409name of a decor defined with *AddToDecor*. If _decor_ is invalid,
7410nothing occurs. If called from somewhere in a window or its border,
7411then that window is affected. If called from the root window the user
7412is allowed to select the target window. *ChangeDecor* only affects
7413attributes which can be set using the *AddToDecor* command.
7414+
7415
7416....
7417ChangeDecor CustomDecor1
7418....
7419
7420*DestroyDecor* [recreate] _decor_::
7421	This command is deprecated and will be removed in the future. There
7422	are plans to replace it with a more flexible solution in fvwm-3.0.
7423+
7424Deletes the _decor_ defined with *AddToDecor*, so that subsequent
7425references to it are no longer valid. Windows using this _decor_
7426revert to the "Default" decor. The optional parameter _recreate_ tells
7427fvwm not to throw away the decor completely but to throw away only its
7428contents. If the decor is created again later, windows do not use it
7429before the _UseDecor_ style is applied again unless the decor was
7430destroyed with the _recreate_ option. The decor named "Default" cannot
7431be destroyed.
7432+
7433
7434....
7435DestroyDecor CustomDecor1
7436....
7437
7438*TitleStyle* [_justification_] [Height [_num_]] [MinHeight [_num_]]::
7439	Sets attributes for the title-bar. Justifications can be _Centered_,
7440	_RightJustified_ or _LeftJustified_. _Height_ sets the title bar's
7441	height to an amount in pixels. _MinHeight_ sets the minimal height in
7442	pixels of the title bar. Defaults are _Centered_, the window's font
7443	height and no minimal height. To reset the font height to the default
7444	value, omit the _num_ argument after the _Height_ keyword. The
7445	_MinHeight_ height is reset by _Height_ or if given with no argument.
7446	Example:
7447+
7448
7449....
7450TitleStyle LeftJustified Height 24
7451....
7452
7453*TitleStyle* [_state_] [_style_] [-- [!]_flag_ ...]::
7454	Sets the style for the title-bar. See also *AddTitleStyle* and
7455	*ButtonStyle* _state_ can be one of "_ActiveUp_", "_ActiveDown_",
7456	"_InactiveUp_", or "_InactiveDown_". Shortcuts like "_Active_" and
7457	"_Inactive_" are allowed. The states with the "Toggled" prefix are
7458	allowed too, the title itself does not use "Toggled" states, but these
7459	states are used for the buttons with *ButtonStyle* _UseTitleStyle_. If
7460	_state_ is omitted, then the _style_ is added to every state. If
7461	parentheses are placed around the _style_ and _flags_, then multiple
7462	state definitions can be given per line. _style_ can be omitted so
7463	that flags can be set while not destroying the current style.
7464+
7465If a '!' is prefixed to any _flag_, its behavior is negated. Valid
7466flags for each state include _Raised_, _Flat_ and _Sunk_ (these are
7467mutually exclusive). The default is _Raised_. See the note in
7468*ButtonStyle* regarding the "_ActiveDown_" state. Examples:
7469+
7470
7471....
7472TitleStyle ActiveUp HGradient 16 navy black
7473TitleStyle \
7474ActiveDown (Solid red -- flat) \
7475Inactive (TiledPixmap wood.xpm)
7476TitleStyle \
7477ActiveUp (-- Flat) \
7478ActiveDown (-- Raised) \
7479InactiveUp (-- Flat) \
7480InactiveDown (-- Sunk)
7481....
7482
7483+
7484This sets the "ActiveUp" state to a horizontal gradient, the
7485"ActiveDown" state to solid red, and the "Inactive" states to a tiled
7486wood pixmap. Finally, "ActiveUp" and "InactiveUp" are set to look
7487flat, while "ActiveDown" set to be sunk (the _Raised_ flag for the
7488"ActiveDown" state causes it to appear sunk due to relief inversion),
7489and "InactiveDown" is set to look raised. An example which sets flags
7490for all states:
7491+
7492
7493....
7494TitleStyle -- flat
7495....
7496
7497+
7498For a flattened look:
7499+
7500
7501....
7502TitleStyle -- flat
7503ButtonStyle All Active (-- flat) Inactive (-- flat)
7504....
7505
7506+
7507*TitleStyle* accepts all the *ButtonStyle* styles and arguments:
7508+
7509_Simple_, _Default_, _Solid_, _Colorset_, _Vector_, _?Gradient_,
7510_Pixmap_, _AdjustedPixmap_, _ShrunkPixmap_, _StretchedPixmap_,
7511_TiledPixmap_, _MiniIcon_.
7512+
7513See the *ButtonStyle* command for a description of all these styles
7514and their arguments.
7515+
7516In addition to these styles *TitleStyle* accepts a powerful
7517_MultiPixmap_ option. This allows you to specify different pixmaps,
7518colorsets or colors for different parts of the titlebar. Some of them
7519are tiled or stretched to fit a particular space; others are discrete
7520"transition" images. The definable _sections_ are:
7521+
7522_Main_:::
7523	The full titlebar
7524+
7525_LeftMain_:::
7526	Left of title text
7527+
7528_RightMain_:::
7529	Right of title text
7530+
7531_UnderText_:::
7532	Underneath title text
7533+
7534_LeftOfText_:::
7535	just to the left of the title text
7536+
7537_RightOfText_:::
7538	just to the right of the title text
7539+
7540_LeftEnd_:::
7541	at the far left end of the titlebar (just after left buttons if any)
7542+
7543_RightEnd_:::
7544	at the far right end of the titlebar (just before right buttons if any)
7545+
7546_Buttons_:::
7547	under buttons in case of _UseTitleStyle_
7548+
7549_LeftButtons_:::
7550	under left buttons in case of _UseTitleStyle_
7551+
7552_RightButtons_:::
7553	under right buttons in case of _UseTitleStyle_
7554
7555None of these are mandatory except for _Main_ (or, if you do not
7556define _Main_ you must define both _LeftMain_ and _RightMain_). If no
7557_Buttons_ pixmaps are defined and _UseTitleStyle_ is specified for one
7558or more buttons, _Main_, _LeftMain_ or _RightMain_ are used as
7559appropriate.
7560
7561The syntax for this style type is:
7562
7563....
7564MultiPixmap section style arg, ...
7565....
7566
7567continuing for whatever you want to define. The _style_ can be either
7568_TiledPixmap_, _AdjustedPixmap_, _Colorset_ or _Solid_. See the
7569*ButtonStyle* command for the description of these styles. In the case
7570of a transition section, _LeftEnd_, _LeftOfText_, _RightOfText_ or
7571_RightEnd_, _AdjustedPixmap_ only resize the pixmap in the "y"
7572direction. For the _Colorset_ and _Solid_ styles a width of the half
7573of the title bar height is assumed for the transition sections.
7574
7575An example:
7576
7577....
7578MultiPixmap Main AdjustedPixmap foo.xpm, \
7579      UnderText TiledPixmap bar.xpm, \
7580      Buttons Colorset 2
7581....
7582
7583
7584Note that the old syntax is still supported: if the style is omitted,
7585_TiledPixmap_ is assumed and adding "(stretched)" between the section
7586and the file name implies _AdjustedPixmap_.
7587*UpdateDecor* [_decor_]::
7588This command is deprecated and will be removed in the future. There
7589are plans to replace it with a more flexible solution in fvwm-3.0.
7590
7591This command is kept mainly for backward compatibility. Since all
7592elements of a decor are updated immediately when they are changed,
7593this command is mostly useless.
7594
7595Updates window decorations. _decor_ is an optional argument which
7596specifies the _decor_ to update. If given, only windows which are
7597assigned to that particular _decor_ are updated. This command is
7598useful, for instance, after a *ButtonStyle*, *TitleStyle* or
7599*BorderStyle* (possibly used in conjunction with *AddToDecor*).
7600Specifying an invalid decor results in all windows being updated.
7601
7602=== Controlling the Virtual Desktop
7603
7604*Desk* _arg1_ [_arg2_] [_min_ _max_]::
7605	This command has been renamed. Please see *GotoDesk* command.
7606
7607*DesktopName* _desk_ _name_::
7608	Defines the name of the desktop number _desk_ to _name_. This name is
7609	used in the *WindowList* command and in the *FvwmPager* where it
7610	override the _Label_ configuration option. Moreover, if consecutive
7611	names starting from desktop 0 are defined, then these names can be
7612	used by any EWMH compliant application (as a pager).
7613
7614*DesktopConfiguration* global | per-monitor | shared::
7615	This command controls the behaviour of how desktops should be managed
7616	by FVWM. By default, for all screens detected by FVWM through RandR
7617	support, the option of global means that all windows on the same desk
7618	across monitors is treated as one -- hence, when a change of
7619	desktop/page happens, the same change occurs across all monitors.
7620+
7621With per-monitor , each RandR monitor has a separate copy of desktops,
7622and hence function independently of one another when switching
7623desks/pages.
7624+
7625When __shared__ is set, the desktops are shared amongst all monitors.  So for
7626example, with the following number of desktops defined with two monitors
7627(__[]__ is monitor1, and __<>__ is monitor2):
7628+
7629....
7630[0]     1      2      <3>     4
7631....
7632+
7633
7634Moving between desktops would still honor the monitor the desktop is being
7635requested on.  If __monitor1__ wanted to switch to desktop 3, then that
7636desktop is exchanged with __monitor2__ such that the following showed the
7637active desktop on both monitors:
7638+
7639....
7640<0>     1      2      [3]     4
7641....
7642+
7643This concept is similar to how spectrwm or xmonad handles desktops.
7644+
7645**Note:** these each *DesktopConfiguration* mode can be changed on-the-fly.
7646
7647*DesktopSize* __Horizontal__x_Vertical_::
7648	Defines the virtual desktop size in units of the physical screen size.
7649
7650*EdgeResistance* __delay__**EdgeResistance** _scrolling_ _moving_ [_screen-scrolling_]::
7651	Tells how hard it should be to change the desktop viewport by moving
7652	the mouse over the edge of the screen. The parameter tells how many
7653	milliseconds the pointer must spend on the screen edge before fvwm
7654	moves the viewport. This is intended for people who use
7655+
7656
7657....
7658EdgeScroll 100 100
7659....
7660
7661+
7662but find themselves accidentally flipping pages when they do not want
7663to. If -1 is given as the delay, scrolling is disabled completely.
7664+
7665The second form of invocation with two or three arguments is obsolete
7666and should be replaced with the following three commands as needed:
7667+
7668
7669....
7670EdgeResistance scrolling
7671Style * EdgeMoveDelay scrolling
7672Style * EdgeMoveResistance moving
7673or
7674Style * EdgeMoveResistance moving screen-scrolling
7675....
7676
7677+
7678Fvwm does this substitution automatically and prints a warning.
7679
7680*EdgeScroll* _horizontal_[p] _vertical_[p] [wrap | wrapx | wrapy]::
7681	Specifies the percentage of a page to scroll when the cursor hits the
7682	edge of a page. A trailing '_p_' changes the interpretation to mean
7683	pixels. If you do not want any paging or scrolling when you hit the
7684	edge of a page include
7685+
7686
7687....
7688EdgeScroll 0 0
7689....
7690
7691+
7692in your _config_ file, or possibly better, set the *EdgeThickness* to
7693zero. See the *EdgeThickness* command. If you want whole pages, use
7694+
7695
7696....
7697EdgeScroll 100 100
7698....
7699
7700+
7701Both _horizontal_ and _vertical_ should be positive numbers.
7702+
7703If the _horizontal_ and _vertical_ percentages are multiplied by 1000
7704or one of the keywords _wrap_, _wrapx_ and _wrapy_ is given then
7705scrolling wraps around at the edge of the desktop. If
7706+
7707
7708....
7709EdgeScroll 100000 100000
7710....
7711
7712+
7713is used fvwm scrolls by whole pages, wrapping around at the edge of
7714the desktop.
7715
7716*EdgeThickness* 0 | 1 | 2::
7717	This is the width or height of the invisible window that fvwm creates
7718	on the edges of the screen that are used for the edge scrolling
7719	feature.
7720+
7721In order to enable page scrolling via the mouse, four windows called
7722the "pan frames" are placed at the very edge of the screen. This is
7723how fvwm detects the mouse's presence at the window edge. Because of
7724the way this works, they need to be at the top of the stack and eat
7725mouse events, so if you have any kind of error along the lines of:
7726"mouse clicks at the edge of the screen do the wrong thing" you're
7727having trouble with the pan frames and (assuming you do not use the
7728mouse to flip between pages) should set the EdgeThickness to 0.
7729+
7730A value of 0 completely disables mouse edge scrolling, even while
7731dragging a window. 1 gives the smallest pan frames, which seem to work
7732best except on some servers.
7733+
77342 is the default.
7735+
7736Pan frames of 1 or 2 pixels can sometimes be confusing, for example,
7737if you drag a window over the edge of the screen, so that it straddles
7738a pan frame, clicks on the window, near the edge of the screen are
7739treated as clicks on the root window.
7740
7741*EwmhBaseStruts* _screen RANDRNAME_ _left_ _right_ _top_ _bottom_::
7742	Where left, right, top and bottom are positive or null integers which
7743	define bands at the edge of the screen. If _screen_ is given, followed
7744	by the RANDRNAME of a given display, then the EwmhBaseStruts are
7745	defined for just RANDRNAME. _left_ defines a band on the left of your
7746	screen of width _left_, _right_ defines a band on the right of your
7747	screen of width _right_, _top_ defines a band on the top of your
7748	screen of height _top_ and _bottom_ defines a band on the bottom of
7749	your screen of height _bottom_. The unit is the pixel and the default
7750	is 0 0 0 0. These areas define additional reserved space to the
7751	reserved space defined by some ewmh compliant applications. This is
7752	used to compute the Working Area. See the *Extended Window Manager
7753	Hints* section for a definition of the Working Area.
7754
7755*EwmhNumberOfDesktops* _num_ [_max_]::
7756	This command is useful only for an ewmh compliant pager or taskbar (as
7757	kpager or kicker taskbar) and not for fvwm modules ( *FvwmPager* or
7758	*FvwmIconMan*). It causes a compliant application to consider at least
7759	_num_ desktops (desktop 0 to desktop _num_-1). The optional argument
7760	_max_ causes a compliant application to never consider more than _max_
7761	desktops. If _max_ is 0 (the default) there is no limitation. The
7762	actual number of desktops is determined dynamically. It is at least
7763	_num_, but it can be d if there is a window on desktop d-1 (or if the
7764	current desktop is desktop d-1) and d is less or equal to _max_ or
7765	_max_ is null. Moreover, a compliant pager can ask to change _num_
7766	itself. This is accepted by fvwm only if this number is less than or
7767	equal to _max_ or if _max_ is null. Note that negative desktops are
7768	not supported by the ewmh specification. The default is 4 0.
7769
7770*GotoDesk* [prev | _arg1_ [_arg2_] [_min_ _max_]]::
7771	Switches the current viewport to another desktop (workspace, room).
7772+
7773The command takes 1, 2, 3, or 4 arguments. A single argument is
7774interpreted as a relative desk number. Two arguments are understood as
7775a relative and an absolute desk number. Three arguments specify a
7776relative desk and the minimum and maximum of the allowable range. Four
7777arguments specify the relative, absolute, minimum and maximum values.
7778(Desktop numbers can be negative). If a literal _prev_ is given as the
7779single argument, the last visited desk number is used.
7780+
7781If _arg1_ is non zero then the next desktop number is the current
7782desktop number plus _arg1_.
7783+
7784If _arg1_ is zero then the new desktop number is _arg2_. (If _arg2_ is
7785not present, then the command has no effect.)
7786+
7787If _min_ and _max_ are given, the new desktop number is no smaller
7788than _min_ and no bigger than _max_. Values out of this range are
7789truncated (if you gave an absolute desk number) or wrapped around (if
7790you gave a relative desk number).
7791+
7792The syntax is the same as for *MoveToDesk*, which moves a window to a
7793different desktop.
7794+
7795The number of active desktops is determined dynamically. Only desktops
7796which contain windows or are currently being displayed are active.
7797Desktop numbers must be between 2147483647 and -2147483648 (is that
7798enough?).
7799
7800*GotoDeskAndPage* screen | prev | _desk_ _xpage_ _ypage_::
7801	Switches the current viewport to another desktop and page, similar to
7802	the *GotoDesk* and *GotoPage* commands. The new desk is _desk_ and the
7803	new page is (_xpage_,_ypage_).
7804
7805*GotoPage* screen | prev | [_options_] _x_[p] _y_[p]::
7806	Moves the desktop viewport to page (x,y). The upper left page is
7807	(0,0), the upper right is (M,0), where M is one less than the current
7808	number of horizontal pages specified in the *DesktopSize* command. The
7809	lower left page is (0,N), and the lower right page is (M,N), where N
7810	is the desktop's vertical size as specified in the *DesktopSize*
7811	command. To switch to a page relative to the current one add a
7812	trailing '_p_' after any or both numerical arguments.
7813+
7814Possible _options_ are _wrapx_ and _wrapy_ to wrap around the x or y
7815coordinate when the viewport is moved beyond the border of the
7816desktop.
7817+
7818The name of the RandR screen.
7819+
7820To go to the last visited page use _prev_ as the first argument. The
7821*GotoPage* function should not be used in a pop-up menu.
7822+
7823Examples:
7824+
7825
7826....
7827# Go to page (2,3)
7828GotoPage 2 3
7829
7830# Go to lowest and rightmost page
7831GotoPage -1 -1
7832
7833# Go to last page visited
7834GotoPage prev
7835
7836# Go two pages to the right and one page up
7837GotoPage +2p -1p
7838....
7839
7840*Scroll* [screen RANDRNAME] [_horizonal_[p] _vertical_[p] | reverse]::
7841	Scrolls the virtual desktop's viewport by _horizontal_ pages in the
7842	x-direction and _vertical_ pages in the y-direction or starts
7843	interactive scrolling of the viewport. Either or both entries may be
7844	negative. Both _horizontal_ and _vertical_ values are expressed in
7845	percent of pages, so
7846+
7847
7848....
7849Scroll 100 100
7850....
7851
7852+
7853means to scroll down and right by one full page.
7854+
7855
7856....
7857Scroll 50 25
7858....
7859
7860+
7861means to scroll right half a page and down a quarter of a page. The
7862*Scroll* function should not be called from pop-up menus. Normally,
7863scrolling stops at the edge of the desktop.
7864+
7865If the _horizontal_ and _vertical_ percentages are 100 or more and are
7866multiplied by 1000 then scrolling wraps around at the edge of the
7867desktop. If
7868+
7869
7870....
7871Scroll 100000 0
7872....
7873
7874+
7875is executed over and over fvwm moves to the next desktop page on each
7876execution and wraps around at the edge of the desktop, so that every
7877page is hit in turn.
7878+
7879If the letter '_p_' is appended to each coordinate (_horizontal_
7880and/or _vertical_), then the scroll amount is measured in pixels.
7881+
7882Without arguments or if the option _reverse_ is given interactive
7883scrolling takes place. The viewport scrolls as the mouse is moved.
7884With the _reverse_ option scrolling is done in opposite direction of
7885the mouse movement, and without it scrolling in the same direction as
7886the mouse.
7887+
7888The binding
7889+
7890
7891....
7892Mouse 1 A CM Scroll reverse
7893....
7894
7895+
7896gives an effect of grabbing and dragging the viewport with button 1 if Control
7897and Meta is pressed.
7898+
7899If _screen_ is given, followed by the RANDRNAME of a given display, then
7900the specified screen is scrolled. This is only useful if using per-monitor
7901or shared _DesktopConfiguration_ and wanting to scroll a monitor other than
7902the current monitor. Interactive scrolling always scrolls the current monitor.
7903
7904=== User Functions and Shell Commands
7905
7906*AddToFunc* [_name_ [I | J | M | C | H | D _action_]]::
7907	Begins or adds to a function definition. Here is an example:
7908+
7909
7910....
7911AddToFunc Move-or-Raise I Raise
7912 + M Move
7913 + D Lower
7914....
7915
7916+
7917The function name is "Move-or-Raise", and it could be invoked from a
7918menu or a mouse binding or key binding:
7919+
7920
7921....
7922Mouse 1 TS A Move-or-Raise
7923....
7924
7925+
7926The _name_ must not contain embedded whitespace. No guarantees are
7927made whether function names with embedded whitespace work or not. This
7928behavior may also change in the future without further notice. The
7929letter before the _action_ tells what kind of action triggers the
7930command which follows it. '_I_' stands for "Immediate", and is
7931executed as soon as the function is invoked. '_J_' is similar to
7932"Immediate" but is delayed until a button is pressed or released or
7933the pointer is moved, or the function completes. It is always executed
7934before the other function actions. '_M_' stands for "Motion", i.e. if
7935the user starts moving the mouse. '_C_' stands for "Click", i.e., if
7936the user presses and releases the mouse button. '_H_' stands for
7937"Hold", i.e. if the user presses a mouse button and holds it down for
7938more than *ClickTime* milliseconds. '_D_' stands for "Double-click".
7939The action '_I_' causes an action to be performed on the button-press,
7940if the function is invoked with prior knowledge of which window to act
7941on.
7942+
7943There is a number of predefined symbols that are replaced by certain
7944values if they appear on the command line. Please refer to the
7945*Command Expansion* section for details.
7946+
7947*Warning* Please read the comments on executing complex functions in
7948the section *Scripting and Complex Functions*.
7949+
7950Examples:
7951+
7952If you call
7953+
7954
7955....
7956Key F10 R A Function MailFunction xmh "-font fixed"
7957....
7958
7959+
7960and "MailFunction" is
7961+
7962
7963....
7964AddToFunc MailFunction
7965 + I Next ($0) Iconify off
7966 + I Next (AcceptsFocus, $0) Focus
7967 + I None ($0) Exec exec $0 $1
7968....
7969
7970+
7971Then the last line of the function becomes
7972+
7973
7974....
7975 + I None (xmh) Exec exec xmh -font fixed
7976....
7977
7978+
7979The expansion is performed as the function is executed, so you can use
7980the same function with all sorts of different arguments. You could use
7981+
7982
7983....
7984Key F11 R A Function MailFunction zmail "-bg pink"
7985....
7986
7987+
7988in the same _config_, if you wanted. An example of using "$[w.id]" is:
7989+
7990
7991....
7992AddToFunc PrintFunction
7993 + I Raise
7994 + I Exec xdpr -id $[w.id]
7995....
7996
7997+
7998Note that "$$" is expanded to '$'.
7999+
8000Another example: bind right mouse button within the window button
8001number 6 (this is a minimize button for the win95 theme) to iconify
8002all windows of the same resource:
8003+
8004
8005....
8006AddToFunc FuncIconifySameResource "I" All ($0) Iconify on
8007Mouse 3 6 A FuncIconifySameResource $[w.resource]
8008....
8009
8010*Beep*::
8011	As might be expected, this makes the terminal beep.
8012
8013*DestroyFunc* _function_::
8014	Deletes a function, so that subsequent references to it are no longer
8015	valid. You can use this to change the contents of a function during a
8016	fvwm session. The function can be rebuilt using *AddToFunc*.
8017+
8018
8019....
8020DestroyFunc PrintFunction
8021....
8022
8023*Echo* _string_::
8024	Prints a message to the debug log file, which requires logging to be
8025	enabled. See the *-v* option or *PrintInfo* for more information on both
8026	enabling debug logging and the log file location. Potentially useful for
8027	debugging things in your _config_ or getting the value of variables.
8028+
8029
8030....
8031Echo Beginning style definitions...
8032Echo Current desk $[desk.n].
8033....
8034
8035*EchoFuncDefinition* _function_::
8036	The *EchoFuncDefinition* is similar to the *Echo* command but prints
8037	the definition for the given _function_ to the debug log file. It is
8038	useful to find out how fvwm handles quoting and for debugging functions.
8039
8040*Exec* _command_::
8041	Executes _command_. You should not use an ampersand '&' at the end of
8042	the command. You probably want to use an additional "exec" at the
8043	beginning of _command_. Without that, the shell that fvwm invokes to
8044	run your command stays until the command exits. In effect, you'll have
8045	twice as many processes running as you need. Note that some shells are
8046	smart enough to avoid this, but it never hurts to include the "exec"
8047	anyway.
8048+
8049The following example binds function key
8050+
8051in the root window, with no modifiers, to the exec function. The
8052program rxvt is started with an assortment of options.
8053+
8054
8055....
8056Key F1 R N Exec exec rxvt -fg yellow -bg blue \
8057-e /bin/tcsh
8058....
8059
8060+
8061Note that this function doesn't wait for _command_ to complete, so
8062things like:
8063+
8064
8065....
8066Exec "echo AddToMenu ... > /tmp/file"
8067Read /tmp/file
8068....
8069
8070+
8071do not work reliably (see the *PipeRead* command).
8072
8073*ExecUseShell* [_shell_]::
8074	Makes the *Exec* command use the specified shell, or the value of the
8075	_$SHELL_ environment variable if no shell is specified, instead of the
8076	default Bourne shell (_/bin/sh_).
8077+
8078
8079....
8080ExecUseShell
8081ExecUseShell /usr/local/bin/tcsh
8082....
8083
8084*Function* _FunctionName_::
8085	Used to bind a previously defined function to a key or mouse button.
8086	The following example binds mouse button 1 to a function called
8087	"Move-or-Raise", whose definition was provided as an example earlier
8088	in this man page. After performing this binding fvwm executes the
8089	"move-or-raise" function whenever button 1 is pressed in a window's
8090	title-bar.
8091+
8092
8093....
8094Mouse 1 T A Function Move-or-Raise
8095....
8096
8097+
8098The keyword *Function* may be omitted if _FunctionName_ does not
8099coincide with an fvwm command.
8100+
8101Warning: Please read the comments on executing complex functions in
8102the section *Scripting and Complex Functions*.
8103
8104*InfoStoreAdd* _key_ _value_::
8105	Stores the _value_ at the given _key_. This is useful to store generic
8106	information used in the lifetime of an fvwm config file. For example
8107	storing program preferences for opening video files.
8108+
8109The purpose of this command is to store internal information to fvwm
8110which can be used bu fvwm functions, or when opening programs of a
8111certain type. Previous to this command the only way to do this was via
8112*SetEnv* but this is discouraged because it places such information in
8113the environment, which pollutes it and makes the information global to
8114other processes started by fvwm which may then modify them which might
8115not be what's wanted. Hence the point of *InfoStoreAdd* is to still
8116allow for such information to be stored, but kept internal to fvwm.
8117+
8118In this way, one can build up as many key/value pairs as needed.
8119Recalling the value of a given key happens through fvwm's usual
8120expansion mechanism. See the *Command Expansion* section for more
8121details. For example:
8122+
8123
8124....
8125InfoStoreAdd teddybearprog xteddy
8126
8127# Echo the value of teddybearprog
8128Echo $[infostore.teddybearprog]
8129....
8130
8131+
8132Removing an entry from the InfoStore is done with the
8133*InfoStoreRemove* command.
8134
8135*InfoStoreRemove* _key_::
8136	Removes an entry at the given _key_ from the InfoStore. Example:
8137+
8138
8139....
8140InfoStoreRemove teddybearprog
8141....
8142
8143*Nop*::
8144	Does nothing. This is used to insert a blank line or separator in a
8145	menu. If the menu item specification is
8146+
8147
8148....
8149AddToMenu MyMenu " " Nop
8150....
8151
8152+
8153then a blank line is inserted. If it looks like
8154+
8155
8156....
8157+ "" Nop
8158....
8159
8160+
8161then a separator line is inserted. Can also be used as the
8162double-click action for *Menu* or *Popup*.
8163
8164*PipeRead* _command_ [quiet]::
8165	Causes fvwm to read commands from the output of the _command_. This
8166	_command_ is executed by _/bin/sh_ as if you typed it on the command
8167	line. If the command consists of more than one word it must be quoted.
8168	Useful for building up dynamic menu entries based on a directories
8169	contents, for example. If the keyword _Quiet_ follows the command no
8170	message is produced if the _command_ is not found.
8171+
8172Example:
8173+
8174
8175....
8176AddToMenu HomeDirMenu
8177PipeRead 'for i in $HOME/*; \
8178do echo "+ $i Exec xterm -e vi $i"; done'
8179....
8180
8181+
8182Note: The *PipeRead* changes the pointer to a watch cursor by default
8183during execution. However, some commands, for example xwd, need to
8184take control of the pointer themselves and do not work. To disable the
8185watch cursor, use the command prior to *PipeRead*
8186+
8187
8188....
8189BusyCursor Read off
8190....
8191
8192+
8193The *PipeRead* command executes synchronously. If you want to *Exec*
8194something, but need the command to run synchronously, you might do
8195something like:
8196+
8197
8198....
8199PipeRead 'command 1>&2'
8200....
8201
8202+
8203The redirection causes any output from the program to go to stderr
8204instead of being read as a sequence of commands by fvwm. *PipeRead*
8205returns 1 if the given command could be executed or -1 if not (see the
8206section *Conditional Commands* for the meaning of return codes).
8207
8208*Read* _filename_ [quiet]::
8209	Causes fvwm to read commands from the file named _filename_. If the
8210	keyword _Quiet_ follows the command no message is produced if the file
8211	is not found. If the file name does not begin with a slash ('/'), fvwm
8212	looks in the user's data directory, then the system data directory.
8213	The user's data directory is by default _$HOME/.fvwm_. It can be
8214	overridden by exporting _FVWM_USERDIR_ set to any other directory. The
8215	*Read* command returns 1 if the given file could be read or -1 if not
8216	(see the section *Conditional Commands* for the meaning of return
8217	codes).
8218
8219*SetEnv* _variable_ _value_::
8220	Set an environment variable to a new value, similar to the shell's
8221	export or setenv command. The _variable_ and its _value_ are inherited
8222	by processes started directly by fvwm. This can be especially useful
8223	in conjunction with the *FvwmM4* module. For example:
8224+
8225
8226....
8227SetEnv height HEIGHT
8228....
8229
8230+
8231makes the *FvwmM4* set variable _HEIGHT_ usable by processes started
8232by fvwm as the environment variable _$height_. If _value_ includes
8233whitespace, you should enclose it in quotes. If no _value_ is given,
8234the variable is deleted.
8235
8236*Silent* _command_::
8237	A number of commands require a window to operate on. If no window was
8238	selected when such a function is invoked the user is asked to select a
8239	window. Sometimes this behavior is unwanted, for example if the
8240	function was called by a module and the window that was selected at
8241	first does not exist anymore. You can prevent this by putting *Silent*
8242	in front of the fvwm _command_. If a function that needs a window is
8243	called with *Silent* without a window selected, it simply returns
8244	without doing anything. If *Silent* is used on a user defined function
8245	it affects all function and sub function calls until the original
8246	function exits.
8247+
8248Another usage of *Silent* is with binding commands *Key*, *PointerKey*
8249and *Mouse*, this disables error messages.
8250+
8251*Silent* also disables the error message for non-existent commands.
8252Note: This command is treated as a prefix to its _command_. Expansion
8253of the command line is done as if *Silent* was not there.
8254+
8255Examples:
8256+
8257
8258....
8259Silent Move 0 0
8260Silent User_defined_function
8261# do not complain on keyboards without "Help" key
8262Silent Key Help R A Popup HelpMenu
8263....
8264
8265*UnsetEnv* [_variable_]::
8266	Unset an environment variable, similar to shell's export or unsetenv
8267	command. The _variable_ then is removed from the environment array
8268	inherited by processes started directly by fvwm.
8269
8270*Wait* _window_::
8271	This command is intended to be used in fvwm functions only. It causes
8272	execution of a function to pause until a new window matching _window_
8273	appears. This can be a window's name, class, or resource string. It
8274	may contain the wildcards '*' and '?', which are matched in the usual
8275	Unix filename manner. This is particularly useful in the
8276	"InitFunction" if you are trying to start windows on specific
8277	desktops:
8278+
8279
8280....
8281AddToFunc InitFunction
8282 + I Exec exec xterm -geometry 80x64+0+0
8283 + I Wait xterm
8284 + I GotoDesk 0 2
8285 + I Exec exec xmh -font fixed -geometry \
8286 507x750+0+0
8287 + I Wait xmh
8288 + I GotoDesk 0 0
8289....
8290
8291+
8292The above function starts an xterm on the current desk, waits for it
8293to map itself, then switches to desk 2 and starts an xmh. After the
8294xmh window appears control moves to desk 0.
8295+
8296Fvwm remains partially functional during a wait, but any input from
8297the modules is queued up and processed only after the window appears
8298or the command is aborted. For example, windows can not be focused
8299with *FvwmIconMan* or *FvwmPager* during a wait.
8300+
8301You can escape from a *Wait* pause by pressing Ctrl-Alt-Escape (where Alt is
8302the first modifier). To redefine this key sequence see the *EscapeFunc* command.
8303
8304*Status* _On | Off_::
8305	Turns status either On or Off. This sends information in JSON format
8306	down a named pipe (set via FVWM_STATUS_PIPE env var) about the current
8307	desks and number of windows, etc. This is meant to provide a fast
8308	means of supplying third-party tools information about what's
8309	happening in Fvwm. For example, the JSON could be manipulated and sent
8310	to tools such as _lemonbar_, _polybar_, etc.
8311+
8312The format of the JSON blob looks like this:
8313+
8314
8315....
8316{
8317    "version": 1,
8318    "current_screen": "HDMI2",
8319    "screens": {
8320        "HDMI2": {
8321            "current_client": "n6tadam@shuttle: ~",
8322            "desktops": {
8323                "0": {
8324                    "number": 0,
8325                    "is_urgent": false,
8326                    "is_current": true,
8327                    "number_of_clients": 5
8328                },
8329            },
8330        },
8331     },
8332}
8333....
8334
8335+
8336These sections repeat for all screens/groups/etc, depending on how
8337many there are of each.
8338
8339=== Conditional Commands
8340
8341Conditional commands are commands that are only executed if certain
8342conditions are met. Most conditional commands work on windows, like
8343*Next*, *ThisWindow* or *All*. There is one conditional command, *Test*,
8344that works on global conditions unrelated to windows. The syntax of the
8345conditions is described below. For readability, the list of conditions
8346is located at the end of this section.
8347
8348*Return Codes*::
8349	All commands in this section (unless specifically stated for the
8350	command) also have a return code that can be 1 (if the condition was
8351	met) or 0 (if the condition was not met). Some commands may return -1
8352	which means that an error occurred and the return code is useless. The
8353	*Break* command returns -2. Additionally, the return codes of commands
8354	run in a complex functions are passed to the invoking complex
8355	function. The return code is used by the *TestRc* command. Please
8356	refer to the commands' description for examples. The return code can
8357	also be accessed through the variable _$[cond.rc]_. Non conditional
8358	commands do not modify the return code of the last conditional
8359	command. Important note: return codes are only defined inside
8360	functions created with the *AddToFunc* command and are not inherited
8361	by sub functions. To run a command without altering the return code,
8362	the *KeepRc* command can be used.
8363
8364*The Ring of Windows*::
8365	Fvwm stores windows in a ring internally. Think of the focused window
8366	as a cursor on the current position in the ring. The *Next* command
8367	and many other commands search forwards through the ring for a
8368	matching window, and *Prev* searches backwards. The windows in the
8369	ring are either ordered by creation time (if the
8370	_!FPSortWindowlistByFocus_, _NeverFocus_ or _MouseFocus_ styles are
8371	used) or by the last time they had the focus.
8372
8373*List of Conditional Commands*::
8374	*All* [_options_] [(_conditions_)] _command_:::
8375	Execute _command_ on all windows meeting the conditions. It returns 1
8376	if any window matches the condition and 0 otherwise. The execution
8377	starts at the top of the window ring and continues towards the bottom.
8378	The _options_ can be any combination of _Reverse_ and _UseStack_. If
8379	the option _Reverse_ is given the execution order is reversed. The
8380	option _UseStack_ makes All use the stacking order instead of the
8381	window ring when walking through windows. See the *Conditions* section
8382	for a list of conditions.
8383+
8384This command implies the conditions _CirculateHit_, _CirculateHitIcon_
8385and _CirculateHitShaded_. They can be turned off by specifying
8386_!CirculateHit_ etc. explicitly.
8387+
8388*Any* [(_conditions_)] _command_:::
8389	Performs _command_ if any window which satisfies all _conditions_
8390	exists. The command is run in the context of the root window. See
8391	the *Conditions* section for a list of conditions.
8392+
8393*Break* [_levels_]:::
8394	If the break command is used in a function, function execution is
8395	terminated immediately. Further commands of the function are not
8396	processed. Normally, all nested invocations of complex functions are
8397	left. An optional integer number _levels_ may be given to break out
8398	of the given number of nested functions and continue execution of a
8399	higher level function. The *Break* command always has the return
8400	code -2. Example:
8401+
8402....
8403AddToFunc PickWindowRaiseAndDeiconify
8404+ I Pick
8405+ I TestRc (Error) Break
8406+ I Raise
8407+ I Iconify off
8408....
8409+
8410*Current* [(_conditions_)] _command_:::
8411	Performs _command_ on the currently focused window if it satisfies
8412	all _conditions_. See the *Conditions* section for a list of
8413	conditions.
8414+
8415This command implies the conditions _CirculateHit_,
8416_CirculateHitIcon_ and _CirculateHitShaded_. They can be turned off
8417by specifying _!CirculateHit_ etc. explicitly.
8418+
8419*Direction* [FromPointer] _direction_ [(_conditions_)] _command_:::
8420	Performs _command_ (typically *Focus*) on a window in the given
8421	direction which satisfies all _conditions_. Normally, the center of
8422	the currently focused window or the context window in which the
8423	command was invoked is taken as the starting point. Lacking such a
8424	window, or when the _FromPointer_ option is given, the current
8425	position of the pointer is taken as the starting point. The
8426	_direction_ may be one of "North", "Northeast", "East", "Southeast",
8427	"South", "Southwest", "West", "Northwest" and "Center". Which window
8428	*Direction* selects depends on angle and distance between the center
8429	points of the windows. Closer windows are considered a better match
8430	than those farther away. The _Center_ direction simply selects the
8431	window closest to the starting point. Returns -1 if an invalid
8432	direction was given. See the *Conditions* section for a list of
8433	conditions.
8434+
8435*KeepRc* _command_:::
8436	Runs the _command_ but does not alter the return code of the
8437	previous command. Note: *KeepRc* is treated as a prefix to its
8438	_command_. Expansion of the command line is done as if *KeepRc* was
8439	not there.
8440+
8441*Next* [(_conditions_)] _command_:::
8442	Performs _command_ (typically *Focus*) on the next window which
8443	satisfies all _conditions_. If the command is running in a window
8444	context, it starts looking for a matching window from there.
8445	Otherwise it starts at the focused window. See *Conditions* section
8446	for a list of conditions.
8447+
8448*None* [(_conditions_)] _command_:::
8449	Performs _command_ if no window which satisfies all _conditions_
8450	exists. The command is run in the context of the root window.
8451	Returns 1 if no window matches the conditions and 0 otherwise. See
8452	*Conditions* section for a list of conditions.
8453+
8454This command implies the conditions _CirculateHit_,
8455_CirculateHitIcon_ and _CirculateHitShaded_. They can be turned off
8456by specifying _!CirculateHit_ etc. explicitly.
8457+
8458*NoWindow* _command_:::
8459	Performs _command_, but removes the window context if any. This is
8460	not really a conditional command, but a prefix that may be useful in
8461	menu items that should operate without a window even if such menu is
8462	bound to window decorations.
8463+
8464*Pick* [(_conditions_)] _command_:::
8465	*Pick* works like *Function* if invoked in the context of a window.
8466	If invoked in the root window, it first asks the user to pick a
8467	window and then executes the _command_ in the context of that
8468	window. This avoids annoying multiple selections with complex
8469	functions. The command is executed only if the given _conditions_
8470	are met. Returns -1 if no window was selected. See *Conditions*
8471	section for a list of conditions.
8472+
8473This command implies the conditions _CirculateHit_,
8474_CirculateHitIcon_ and _CirculateHitShaded_. They can be turned off
8475by specifying _!CirculateHit_ etc. explicitly.
8476+
8477*PointerWindow* [(_conditions_)] _command_:::
8478	Performs _command_ if the window under the pointer satisfies all
8479	_conditions_. Returns -1 if there is no window under the pointer.
8480	See *Conditions* section for a list of conditions.
8481+
8482This command implies the conditions _CirculateHit_,
8483_CirculateHitIcon_ and _CirculateHitShaded_. They can be turned off
8484by specifying _!CirculateHit_ etc. explicitly.
8485+
8486*Prev* [(_conditions_)] _command_:::
8487	Performs _command_ (typically *Focus*) on the previous window which
8488	satisfies all _conditions_. If the command is running in a window
8489	context, it starts looking for a matching window from there.
8490	Otherwise it starts at the focused window. See *Conditions* section
8491	for a list of conditions.
8492+
8493*ScanForWindow* [FromPointer] _dir1_ _dir2_ [(_conditions_)] _command_:::
8494	Performs _command_ (typically *Focus*) on a window in the given
8495	direction which satisfies all _conditions_. Normally, the center of
8496	the currently focused window or the context window in which the
8497	command was invoked is taken as the starting point. Lacking such a
8498	window, or when the _FromPointer_ option is given, the current
8499	position of the pointer is taken as the starting point. The
8500	direction _dir1_ may be one of "North", "NorthEast", "East",
8501	"SouthEast", "South", "SouthWest", "West", and "NorthWest". Which
8502	window *ScanForWindow* selects depends first on the position along
8503	the primary axis given by _dir1_. If any windows have the exact same
8504	coordinate along the primary axis, the secondary direction is used
8505	to order the windows. The direction _dir2_ may be one of the same
8506	set of values as _dir1_. If _dir2_ is not perfectly perpendicular to
8507	_dir1_, ScanForWindow returns a failure. When using ScanForWindow
8508	repeatedly with the same arguments, it is guaranteed that all
8509	windows matching the conditions will eventually be found. If the
8510	focus reaches a limit along the primary axis, it will wrap around to
8511	the opposite side. Returns -1 if an invalid direction was given. See
8512	*Conditions* section for a list of conditions.
8513+
8514*Test* [(_test-conditions_)] _command_:::
8515	Performs _command_ if all _test-conditions_ are satisfied. The
8516	_test-conditions_ are keywords with possible arguments from the list
8517	below and are separated by commas or whitespace. They include:
8518	_Version operator x.y.z_, _EnvIsSet varname_, _EnvMatch varname
8519	pattern_, _EdgeHasPointer direction_, _EdgeIsActive direction_,
8520	_Start_, _Init_, _Restart_, _Exit_, _Quit_, _ToRestart_, _True_,
8521	_False_, _F_, _R_, _W_, _X_ and _I_. A test-condition prefixed with
8522	"!" is negated.
8523+
8524The _Version_ _operator x.y.z_ test-condition is fulfilled if the
8525logical condition of the expression is true. Valid _operator_ values
8526are: _>=_, _>_, _<=_, _<_, _==_ and _!=_.
8527+
8528Example:
8529+
8530
8531....
8532Test (Version >= 2.5.11) Echo 2.5.11 or later.
8533....
8534
8535+
8536The _EnvIsSet_ _varname_ test-condition is true if the given
8537environment variable is set. The _EnvMatch_ _varname pattern_
8538test-condition is true if _pattern_ matches the given environment or
8539infostore variable value. (See *InfoStoreAdd*). The pattern may
8540contain special "*" and "?" chars. The "varname" is coded without
8541the leading dollar sign ($).
8542+
8543The _EdgeHasPointer_ [_direction_] test-condition is true if the
8544edge in the given direction currently contains the pointer. The
8545_EdgeIsActive_ [_direction_] test-condition is true if the edge in
8546the given direction currently is active. An edge is active, and can
8547contain a pointer if either a command is bound to it or edge scroll
8548is available in that direction. The direction may be one of *
8549Any__,__ North__,__ Top__,__ Up__,__ West__,__ Left__,__ South__,__
8550Bottom__, __ Down__,__ Right* and * East__. If no direction is
8551specified __Any* is assumed.
8552+
8553The _Start_ test-condition is the same as either _Init_ or
8554_Restart_. It is only true on startup or restart prior and during
8555*StartFunction* execution. The _Exit_ test-condition is the same as
8556either _Quit_ or _ToRestart_. It is only valid on shutdown during
8557*ExitFunction* function execution.
8558+
8559The _True_ and _False_ test-conditions are unconditionally true and
8560false.
8561+
8562Additionally, if a test-condition name is not recognized, the Error
8563return code is set and the command is not executed.
8564+
8565The _F_ _file_, _R_ _file_, _W_ _file_, _X_ _file_ and _I_ _file_
8566test-conditions test for existence of the given [F]ile (possibly
8567with [R]ead/[W]rite permissions), e[X]ecutable (in _$PATH_), or the
8568[I]mage (in ImagePath).
8569+
8570Example:
8571+
8572
8573....
8574AddToFunc StartFunction I Test (Init) Exec exec xterm
8575
8576AddToFunc VerifyVersion
8577+ I Test (Version 2.5.*) Echo 2.5.x detected
8578+ I TestRc (NoMatch) \
8579Test (!Version 2.6.*) Echo Future version
8580+ I TestRc (NoMatch) \
8581Echo 2.6.x is detected
8582
8583Test (F $[FVWM_USERDIR]/local-config) Read local-config
8584Test (X xterm-utf16) Exec exec xterm-utf16
8585....
8586+
8587*TestRc* [([!]_returncode_)] _command_:::
8588	Performs _command_ if the last conditional command returned the
8589	value _returncode_. Instead of the numeric values 0 (no match), 1
8590	(match), -1 (error), and -2 (break) the symbolic names "_NoMatch_",
8591	"_Match_", "_Error_" and "_Break_" can be used. If no _returncode_
8592	is given, the default 0 is assumed. If the return code is prefixed
8593	with '!', the command is executed if _returncode_ does not match the
8594	value returned by the conditional command. The *TestRc* command can
8595	only be used inside functions. If the _command_ is another
8596	conditional command, the previous return code is replaced by the new
8597	one. Example:
8598+
8599
8600....
8601AddToFunc ToggleXterm
8602+ I All (my_xtermwindow) Close
8603+ I TestRc (NoMatch) Exec xterm -T my_xtermwindow
8604....
8605+
8606*ThisWindow* [(_conditions_)] command:::
8607	*ThisWindow* executes the specified _command_ in the context of the
8608	current operand window. If there is no operand window (it is invoked
8609	in the root window), the command is ignored. *ThisWindow* is never
8610	interactive. The command is executed only if the given _conditions_
8611	are met. It returns -1 if used outside a window context. See
8612	*Conditions* section for a list of conditions.
8613+
8614This command implies the conditions _CirculateHit_,
8615_CirculateHitIcon_ and _CirculateHitShaded_. They can be turned off
8616by specifying "!CirculateHit" etc. explicitly.
8617+
8618*WindowId* [_id_] [(_conditions_)] | [root [_screen_]] _command_:::
8619	The *WindowId* command looks for a specific window _id_ and runs the
8620	specified _command_ on it. The second form of syntax retrieves the
8621	window id of the root window of the given _screen_. If no _screen_
8622	is given, the current screen is assumed. The window indicated by
8623	_id_ may belong to a window not managed by fvwm or even a window on
8624	a different screen. Although most commands can not operate on such
8625	windows, there are some exceptions, for example the *WarpToWindow*
8626	command. Returns -1 if no window with the given id exists. See
8627	*Conditions* section for a list of conditions.
8628+
8629This command implies the conditions _CirculateHit_,
8630_CirculateHitIcon_ and _CirculateHitShaded_. They can be turned off
8631by specifying _!CirculateHit_ etc. explicitly.
8632+
8633Examples:
8634+
8635
8636....
8637WindowId 0x34567890 Raise
8638WindowId root 1 WarpToWindow 50 50
8639WindowId $0 (Silly_Popup) Delete
8640....
8641
8642+
8643In the past this command was mostly useful for functions used with
8644the *WindowList* command, or for selective processing of *FvwmEvent*
8645calls (as in the last example), but currently these handler
8646functions are called within a window context, so this command is not
8647really needed in these cases. Still it may be useful if, for
8648example, the window id should be stored in the environment variable
8649for a further proceeding.
8650
8651+
8652....
8653Pick SetEnv BOOKMARKED_WINDOW $[w.id]
8654WindowId $[BOOKMARKED_WINDOW] WarpToWindow
8655....
8656
8657
8658*Conditions*::
8659	The _conditions_ that may be given as an argument to any conditional
8660	command are a list of keywords separated by commas, enclosed in
8661	parentheses. Unless stated otherwise, conditional commands accept all
8662	the conditions listed below. Note that earlier versions of fvwm
8663	required the conditions to be separated by whitespace instead of
8664	commas and enclosed in brackets instead of parentheses (this is still
8665	supported for backward compatibility).
8666+
8667In addition, the _conditions_ may include one or more window names to
8668match to. If more than one window name is given, all of them must
8669match. The window name, icon name, class, and resource are considered
8670when attempting to find a match. Each name may include the wildcards
8671'*' and '?', and may consist of two or more alternatives, separated by
8672the character '|', which acts as an OR operator. (If OR operators are
8673used, they must not be separated by spaces from the names.) Each
8674window name can begin with '!', which prevents _command_ if any of the
8675window name, icon name, class or resource match. However, '!' must not
8676be applied to individual names in a group separated by OR operators;
8677it may only be applied to the beginning of the group, and then it
8678operates on the whole group.
8679+
8680Examples:
8681+
8682....
8683Next ("Netscape|konqueror|Mozilla*") WarpToWindow 99 90
8684....
8685+
8686This goes to the next web browser window, no matter which of the three
8687named web browsers is being used.
8688+
8689....
8690Next ("Mozilla*", "Bookmark*") WarpToWindow 99 90
8691....
8692+
8693This goes to Mozilla's bookmark manager window, ignoring other Mozilla
8694windows and other browsers' bookmark windows.
8695+
8696....
8697All ("XTerm|rxvt", !console) Iconify
8698....
8699
8700+
8701This iconifies all the xterm and rxvt windows on the current page,
8702except that the one named "console" (with the -name option to xterm)
8703is excluded.
8704+
8705
8706....
8707Next (!"FvwmPager|FvwmForm*|FvwmButtons") Raise
8708Next (!FvwmPager, !FvwmForm*, !FvwmButtons) Raise
8709....
8710
8711+
8712These two commands are equivalent; either one raises the next window
8713which is not one of the named fvwm modules.
8714+
8715Any condition can be negated by using a an exclamation mark ('!')
8716directly in front of its name.
8717+
8718_AcceptsFocus_, _AnyScreen_, _CirculateHit_, _CirculateHitIcon_,
8719_CirculateHitShaded_, _Closable_, _CurrentDesk_, _CurrentGlobalPage_,
8720_CurrentGlobalPageAnyDesk_, _CurrentPage_, _CurrentPageAnyDesk_,
8721_CurrentScreen_, _Desk_, _FixedPosition_, _FixedSize_, _Focused_,
8722_HasBorders_, _HasHandles_, _HasPointer_, _HasTitle_, _TitleAtTop_,
8723_TitleAtBottom_, _TitleAtLeft_, _TitleAtRight_, _Iconic_,
8724_Iconifiable_, _Layer [n]_, _Maximizable_, _Maximized_, _Overlapped_,
8725_PlacedByButton n_, _PlacedByButton3_, _PlacedByFvwm_, _Raised_, _Shaded_,
8726_State n_, _Sticky_, _StickyAcrossDesks_, _StickyAcrossPages_, _StickyIcon_,
8727_StickyAcrossDesksIcon_, _StickyAcrossPagesIcon_, _Transient_,
8728_Visible_.
8729+
8730The _AcceptsFocus_ condition excludes all windows that do not want the
8731input focus (the application has set the "Input hints" for the window
8732to False) and do not use the _Lenience_ option of the *Style* command.
8733Also, all windows using the _NeverFocus_ style are ignored. Note:
8734_!Lenience_ is equivalent to the deprecated option _NoLenience_.
8735+
8736With the _AnyScreen_ condition used together with any of the
8737_Current..._ conditions, windows that do not intersect the screen
8738containing the mouse pointer are considered for a match too. For
8739example:
8740+
8741
8742....
8743# Focus next window on current page,
8744# regardless of screen
8745Next (CurrentPage, AnyScreen) Focus
8746....
8747
8748+
8749The _CirculateHit_ and _CirculateHitIcon_ options override the
8750_CirculateSkip_ and _CirculateSkipIcon_ *Style* attributes for normal
8751or iconic windows. The _CirculateHitShaded_ option overrides the
8752_CirculateSkipShaded_ *Style.* All three options are turned on by
8753default for the *Current* command. They can be turned off by
8754specifying _!CirculateHit_ etc. explicitly. Note: Do not confuse these
8755conditions with the style options of the same name. Specifically,
8756+
8757
8758....
8759Style foo CirculateSkip
8760Next (foo, CirculateHit) ...
8761....
8762
8763+
8764is not the same as
8765+
8766
8767....
8768Style foo CirculateHit ...
8769Next (foo)
8770....
8771
8772+
8773The prior selects windows with the name foo only in the Next command.
8774In the second example, these windows are always matched in all
8775conditional commands.
8776+
8777The _Closable_ condition matches only windows that are allowed to be
8778closed.
8779+
8780The _CurrentDesk_ condition matches only windows that are on the
8781current desk.
8782+
8783The _CurrentGlobalPage_ condition matches only windows that are on the
8784current page of the current desk, regardless of which screen the
8785window is on. This condition implicitly activates the _CurrentDesk_
8786condition.
8787+
8788The _CurrentGlobalPageAnyDesk_ condition matches only windows that are
8789on the current page of any desk, regardless of RandR screen .
8790+
8791The _CurrentPage_ condition matches only windows that are on the
8792current page of the current desk. This condition implicitly activates
8793the _CurrentDesk_ condition.
8794+
8795The _CurrentPageAnyDesk_ and _CurrentScreen_ conditions matches only
8796windows that are on the current page of any desk.
8797+
8798The _Screen [name]_ condition matches only windows which are on the
8799specified screen.
8800+
8801The _Desk [n]_ condition matches only windows which are on the
8802specified desk.
8803+
8804The _FixedPosition_ condition excludes all windows that do not have a
8805fixed position, either set through WM hints or the *Style* option
8806_FixedPosition_. Example:
8807+
8808
8809....
8810DestroyFunc ToggleFixedGeometry
8811AddToFunc   ToggleFixedGeometry
8812+ I Pick (FixedPosition) \
8813WindowStyle VariablePosition, VariableSize
8814+ I TestRc (NoMatch) WindowStyle FixedPosition, FixedSize
8815....
8816
8817+
8818The _FixedSize_ condition excludes all windows that do not have a
8819fixed size, either set through WM hints or the *Style* option
8820_FixedSize_.
8821+
8822The _Focused_ matches on the window that currently has the keyboard
8823focus. This is not useful for the *Current* command but can be used
8824with the other conditional commands.
8825+
8826The _HasBorders_ condition excludes all windows that do not have borders.
8827+
8828The _HasHandles_ condition excludes all windows that do not have
8829resize handles.
8830+
8831The _HasPointer_ condition excludes all windows that do not contain
8832the pointer.
8833+
8834The _HasTitle_ condition excludes all windows that do not have a titlebar.
8835+
8836The _TitleAtTop_, _TitleAtBottom_, _TitleAtLeft_, _TitleAtRight_ conditions
8837test for the titlebar at that window location.
8838+
8839The _Iconic_ condition matches only iconic windows.
8840+
8841The _Iconifiable_ condition matches only windows that are allowed to
8842be iconified.
8843+
8844The _Layer [n]_ condition matches only windows on the specified layer.
8845The optional argument of the _Layer_ condition defaults to the layer
8846of the focused window. The negation _!Layer_ switches off the _Layer_
8847condition.
8848+
8849The _Maximizable_ condition matches only windows that are allowed to
8850be maximized.
8851+
8852The _Maximized_ condition matches only maximized windows.
8853+
8854The _Overlapped_ condition matches only windows that are overlapped by
8855other windows on the same layer (or unmanaged windows if the option
8856_RaiseOverUnmanaged_ of the *BugOpts* command is used). Note that this
8857condition can be slow if you have many windows or if
8858RaiseOverUnmanaged is used and the connection to the X server is slow.
8859+
8860The _PlacedByButton n_ condition is fulfilled if the last interactive
8861motion of the window (with the *Move* command or as _ManualPlacement_)
8862was ended by pressing mouse button _n_. Example:
8863+
8864
8865....
8866Mouse   1 T     A       Function MoveWindow
8867
8868DestroyFunc MoveWindow
8869AddToFunc MoveWindow
8870+ C Move
8871+ C ThisWindow (PlacedByButton 5) WindowShade off
8872+ C TestRc (Match) Maximize on 0 100
8873+ C ThisWindow (PlacedByButton 4) WindowShade on
8874....
8875
8876+
8877The _PlacedByButton3_ condition has the same meaning as
8878_PlacedByButton_ 3. It remains only for backward compatibility.
8879+
8880The _PlacedByFvwm_ condition excludes all windows that have been
8881placed manually or by using the user or program position hint.
8882+
8883The _Raised_ conditions matches only windows that are fully visible on
8884the current viewport and not overlapped by any other window.
8885+
8886The _Shaded_ conditions matches only shaded windows (see *WindowShade*
8887command).
8888+
8889The _State n_ or _!State n_ conditions match only windows with the
8890specified integer state set (or unset). See the *State* command for
8891details. The argument may range from 0 to 31.
8892+
8893The _Sticky_, _StickyAcrossDesks_ and _StickyAcrossPages_ match only
8894windows that are currently sticky, sticky across all desks or sticky
8895across all pages. Please refer to the *Style* options with the same
8896name and the commands *Stick*, *StickAcrossDesks* and
8897*StickAcrossPages* for details.
8898+
8899The _StickyIcon_, _StickyAcrossDesksIcon_ and _StickyAcrossPagesIcon_
8900match only windows that become sticky, sticky across all desks or
8901sticky across all pages when they are in iconified state.
8902+
8903The _Transient_ condition matches only windows that have the
8904"transient" property set by the application. This it usually the case
8905for application popup menus and dialogs. The *FvwmIdent* module can be
8906used to find out whether a specific window is transient.
8907+
8908The _Visible_ condition matches only windows that are at least
8909partially visible on the current viewport and not completely
8910overlapped by other windows.
8911
8912=== Module Commands
8913
8914Fvwm maintains a database of module configuration lines in a form
8915
8916....
8917*<ModuleName>: <Config-Resource>
8918....
8919
8920where _<ModuleName>_ is either a real module name or an alias.
8921
8922This database is initially filled from config file (or from output of
8923*-cmd* config command), and can be later modified either by user (via
8924*FvwmCommand*) or by modules.
8925
8926When modules are run, they read appropriate portion of database. (The
8927concept of this database is similar to one used in X resource database).
8928
8929Commands for manipulating module configuration database are described
8930below.
8931
8932**+*+** _module_config_line_::
8933	Defines a module configuration. _module_config_line_ consists of a
8934	module name (or a module alias) and a module resource line. The new
8935	syntax allows a delimiter, a colon and optional spaces, between the
8936	module name and the rest of the line, this is recommended to avoid
8937	conflicts.
8938+
8939
8940....
8941*FvwmPager: WindowBorderWidth 1
8942*FvwmButtons-TopRight: Geometry 100x100-0+0
8943*FvwmButtons-Bottom: Geometry +0-0
8944....
8945
8946*DestroyModuleConfig* _module_config_::
8947	Deletes module configuration entries, so that new configuration lines
8948	may be entered instead. This also sometimes the only way to turn back
8949	some module settings, previously defined. This changes the way a
8950	module runs during a fvwm session without restarting. Wildcards can be
8951	used for portions of the name as well.
8952+
8953The new non-conflicting syntax allows a delimiter, a colon and
8954optional spaces between the module name and the rest of the line. In
8955this case a module name (or alias) can't have wildcards.
8956+
8957
8958....
8959DestroyModuleConfig FvwmButtons*
8960DestroyModuleConfig FvwmForm: Fore
8961DestroyModuleConfig FvwmIconMan: Tips*
8962....
8963
8964*KillModule* _modulename_ [_modulealias_]::
8965	Causes the module which was invoked with name _modulename_ to be
8966	killed. The name may include wildcards. If _modulealias_ is given,
8967	only modules started with the given alias are killed.
8968+
8969
8970....
8971# kill all pagers
8972KillModule FvwmPager
8973
8974Module FvwmEvent SoundEvent
8975KillModule FvwmEvent SoundEvent
8976....
8977
8978*Module* _modulename_ [_moduleparams_]::
8979	Specifies a module with its optional parameters which should be
8980	spawned. Currently several modules, including *FvwmButtons*,
8981	*FvwmEvent*, *FvwmForm*, *FvwmPager*, *FvwmScript* support aliases.
8982	Aliases are useful if more than one instance of the module should be
8983	spawned. Aliases may be configured separately using *** syntax. To
8984	start a module *FvwmForm* using an alias _MyForm_, the following
8985	syntax may be used:
8986+
8987
8988....
8989Module FvwmForm MyForm
8990....
8991
8992+
8993At the current time the available modules (included with fvwm) are
8994*FvwmAnimate* (produces animation effects when a window is iconified
8995or de-iconified), *FvwmAuto* (an auto raise module), *FvwmBacker* (to
8996change the background when you change desktops), *FvwmBanner* (to
8997display a spiffy XBM, XPM, PNG or SVG), *FvwmButtons* (brings up a
8998customizable tool bar), *FvwmCommandS* (a command server to use with
8999shell's FvwmCommand client), *FvwmConsole* (to execute fvwm commands
9000directly), *FvwmCpp* (to preprocess your _config_ with cpp),
9001*FvwmEvent* (trigger various actions by events), *FvwmForm* (to bring
9002up dialogs), *FvwmIconMan* (a flexible icon manager), *FvwmIdent* (to
9003get window info), *FvwmM4* (to preprocess your _config_ with m4),
9004*FvwmPager* (a mini version of the desktop), *FvwmPerl* (a Perl
9005manipulator and preprocessor), *FvwmProxy* (to locate and control
9006obscured windows by using small proxy windows), *FvwmRearrange* (to
9007rearrange windows), *FvwmScript* (another powerful dialog toolkit),
9008These modules have their own man pages. There may be other modules out
9009on there as well.
9010+
9011Modules can be short lived transient programs or, like *FvwmButtons* ,
9012can remain for the duration of the X session. Modules are terminated
9013by the window manager prior to restarts and quits, if possible. See
9014the introductory section on modules. The keyword *Module* may be
9015omitted if _modulename_ is distinct from all fvwm commands.
9016
9017*ModuleListenOnly* _modulename_ [_moduleparams_]::
9018	This command works like the *Module* command, but fvwm never sends any
9019	messages to the module. This may be handy to write a module as a shell
9020	script that is triggered by external events without the burden to
9021	answer packets sent by fvwm. For example, a module written as a shell
9022	script may change labels of the *FvwmButtons* module to implement a
9023	simple clock.
9024
9025*ModulePath* _path_::
9026	Specifies a colon separated list of directories in which to search for
9027	modules. To find a module, fvwm searches each directory in turn and
9028	uses the first file found. Directory names on the list do not need
9029	trailing slashes.
9030+
9031The *ModulePath* may contain environment variables such as _$HOME_ (or
9032_$\{HOME}_). Further, a '+' in the _path_ is expanded to the previous
9033value of the _path_, allowing easy appending or prepending to the
9034_path_.
9035+
9036For example:
9037+
9038
9039....
9040ModulePath ${HOME}/lib/fvwm/modules:+
9041....
9042
9043+
9044The directory containing the standard modules is available via the
9045environment variable _$FVWM_MODULEDIR_.
9046*ModuleSynchronous* [Expect _string_] [Timeout _secs_] _modulename_::
9047The *ModuleSynchronous* command is very similar to *Module*. Fvwm
9048stops processing any commands and user input until the module sends a
9049string beginning with "NOP FINISHED STARTUP" back to fvwm. If the
9050optional _Timeout_ is given fvwm gives up if the module sent no input
9051back to fvwm for _secs_ seconds. If the _Expect_ option is given, fvwm
9052waits for the given _string_ instead. *ModuleSynchronous* should only
9053be used during fvwm startup to enforce the order in which modules are
9054started. This command is intended for use with the (currently
9055hypothetical) module that should be in place before other modules are
9056started.
9057+
9058**Warning**: It is quite easy to hang fvwm with this command, even if a
9059timeout is given. Be extra careful choosing the string to wait for.
9060Although all modules in the fvwm distribution send back the "NOP
9061FINISHED STARTUP" string once they have properly started up, this may
9062not be the case for third party modules. Moreover, you can try to
9063escape from a locked *ModuleSynchronous* command by using the key
9064sequence
9065+
9066(see the *EscapeFunc*).
9067
9068*ModuleTimeout* _timeout_::
9069	Specifies how many seconds fvwm waits for a module to respond. If the
9070	module does not respond within the time limit then fvwm kills it.
9071	_timeout_ must be greater than zero, or it is reset to the default
9072	value of 30 seconds.
9073
9074*SendToModule* _modulename_ _string_::
9075	Sends an arbitrary string (no quotes required) to all modules, whose
9076	alias or name matching _modulename_, which may contain wildcards. This
9077	only makes sense if the module is set up to understand and deal with
9078	these strings though. Can be used for module to module communication,
9079	or implementation of more complex commands in modules.
9080
9081=== Session Management Commands
9082
9083*Quit*::
9084	Exits fvwm, generally causing X to exit too.
9085
9086*QuitScreen*::
9087	Causes fvwm to stop managing the screen on which the command was
9088	issued.
9089
9090*Restart* [_window_manager_ [_params_]]::
9091	Causes fvwm to restart itself if _window_manager_ is left blank, or to
9092	switch to an alternate window manager (or other fvwm version) if
9093	_window_manager_ is specified. If the window manager is not in your
9094	default search path, then you should use the full path name for
9095	_window_manager_.
9096+
9097This command should not have a trailing ampersand. The command can
9098have optional parameters with simple shell-like syntax. You can use
9099_~_ (is expanded to the user's home directory) and environmental
9100variables _$VAR_ or _$\{VAR}_. Here are several examples:
9101+
9102
9103....
9104Key F1 R N Restart
9105Key F1 R N Restart fvwm -s
9106Key F1 R N Restart ~/bin/fvwm -f $HOME/.fvwm/main
9107Key F1 R N Restart fvwm1 -s -f .fvwmrc
9108Key F1 R N Restart xterm -n '"X console"' \
9109-T \"X\ console\" -e fvwm1 -s
9110....
9111
9112+
9113If you need a native restart, we suggest only to use *Restart* command
9114without parameters unless there is a reason not to. If you still use
9115an old command 'Restart fvwm2' that was correct in 2.2.x, all current
9116command line arguments are lost. On a restart without parameters or
9117with --pass-args, they are preserved. Here are some cases when
9118'Restart fvwm2' or 'Restart fvwm' cause troubles:
9119+
9120* running fvwm under a session manager
9121* running fvwm with multi headed displays
9122* having command line arguments, like +-f+ themes-rc or +-cmd+
9123* if the first fvwm2 in the $PATH is a different one
9124
9125+
9126This is why we are issuing a warning on an old usage. If you really
9127want to restart to fvwm with no additional arguments, you may get rid
9128of this warning by using "Restart fvwm -s" or "Restart
9129/full/path/fvwm".
9130+
9131Note, currently with multi headed displays, restart of fvwms on
9132different screens works independently.
9133*Restart* *--pass-args* _window_manager_::
9134The same as *Restart* without parameters but the name for the current
9135window manager is replaced with the specified _window_manager_ and
9136original arguments are preserved.
9137+
9138This command is useful if you use initial arguments like
9139+
9140
9141....
9142-cmd FvwmCpp
9143....
9144
9145+
9146and want to switch to another fvwm version without losing the initial
9147arguments.
9148*Restart* *--dont-preserve-state* [_other-params_]::
9149The same as
9150+
9151
9152....
9153Restart [other-params]
9154....
9155
9156+
9157but it does not save any window states over the restart.
9158+
9159Without this option, *Restart* preserves most per-window state by
9160writing it to a file named _.fs-restart-$HOSTDISPLAY_ in the user's
9161home directory.
9162
9163*SaveSession*::
9164	Causes a session manager (if any) to save the session. This command
9165	does not work for xsm, it seems that xsm does not implement this
9166	functionality. Use Unix signals to manage xsm remotely.
9167
9168*SaveQuitSession*::
9169	Causes a session manager (if any) to save and then shutdown the
9170	session. This command does not work for xsm, it seems that xsm does
9171	not implement this functionality. Use Unix signals to manage xsm
9172	remotely.
9173
9174=== Colorsets
9175
9176Colorsets are a powerful method to control colors. Colorsets create
9177appearance resources that are shared by fvwm and its modules. When a
9178colorset is modified all parts of fvwm react to that change. A colorset
9179includes a foreground color, background color, shadow and highlight
9180color (often based on the background color), background face (this
9181includes images and all kinds of gradients). There is a way to render
9182background face and specify other color operations.
9183
9184In the 2.4.x versions a special module *FvwmTheme* was introduced to
9185manage colorsets. Starting with the 2.5.x beta version, the *FvwmTheme*
9186functionality was moved to the core fvwm, so this module became
9187obsolete. In 2.6.7 the *FvwmTheme* module was removed.
9188
9189The old syntax:
9190
9191....
9192DestroyModuleConfig FvwmTheme: *
9193*FvwmTheme: Colorset 0 fg black, bg rgb:b4/aa/94
9194*FvwmTheme: Colorset 1 fg black, bg rgb:a1/b2/c8
9195....
9196
9197corresponds to the new syntax:
9198
9199....
9200CleanupColorsets
9201Colorset 0 fg black, bg rgb:b4/aa/94
9202Colorset 1 fg black, bg rgb:a1/b2/c8
9203....
9204
9205*Colorset* _num_ [_options_]::
9206	Creates or modifies colorset _num_. Colorsets are identified by this
9207	number. The number can start at zero and can be a very large number.
9208+
9209Warning: The highest colorset number used determines memory
9210consumption. Thus, if you define 'Colorset 100000', the memory for
9211100001 colorsets is used. Keep your colorset numbers as small as
9212possible.
9213+
9214By convention, colorsets are numbered like this:
9215+
9216
9217....
9218# 0 = Default colors
9219# 1 = Inactive windows
9220# 2 = Active windows
9221# 3 = Inactive menu entry and menu background
9222# 4 = Active menu entry
9223# 5 = greyed out menu entry (only bg used)
9224# 6 = module foreground and background
9225# 7 = hilight colors
9226....
9227
9228+
9229If you need to have more colors and do not want to reinvent the wheel,
9230you may use the convention used in fvwm-themes, it defines the meaning
9231of the first 40 colorsets for nearly all purposes:
9232+
9233_http://fvwm-themes.sourceforge.net/doc/colorsets_
9234+
9235Each colorset has four colors, an optional pixmap and an optional
9236shape mask. The four colors are used by modules as the foreground,
9237background, highlight and shadow colors. When a colorset is created it
9238defaults to a foreground of black and background of gray. The
9239background and foreground are marked as "average" and "contrast" (see
9240later) so that just specifying a pixmap or gradient gives sensible
9241results.
9242+
9243_options_ is a comma separated list containing some of the keywords:
9244fg, Fore, Foreground, bg, Back, Background, hi, Hilite, Hilight, sh,
9245Shade, Shadow, fgsh, Pixmap, TiledPixmap, AspectPixmap, Transparent,
9246RootTransparent, Shape, TiledShape, AspectShape, NoShape, ?Gradient,
9247Tint, fgTint, bgTint, Alpha, fgAlpha, Dither, NoDither, IconTint,
9248IconAlpha, Plain.
9249+
9250_fg_, _Fore_ and _Foreground_ take a color name as an argument and set
9251the foreground color. The special name _Contrast_ may be used to
9252select a color that contrasts well with the background color. To reset
9253the foreground color to the default value you can simply omit the
9254color name.
9255+
9256_bg_, _Back_ and _Background_ take a color name as an argument and set
9257the background color. It also sets the highlight and shadow colors to
9258values that give a 3d effect unless these have been explicitly set
9259with the options below. The special name _Average_ may be used to
9260select a color that is the average color of the pixmap. If the pixmap
9261is tinted with the _Tint_ option, the tint is not taken in account in
9262the computation of the average color. You should use the _bgTint_
9263option to get the "real" average color. The background color is reset
9264to the default value if the color name is omitted.
9265+
9266_hi_, _Hilite_ and _Hilight_ take a color name as an argument and set
9267the highlight color. If the highlight color is not explicitly set, the
9268default is to calculate it from the background color. To switch back
9269to the default behavior the color name can be omitted.
9270+
9271_sh_, _Shade_ and _Shadow_ take a color name as an argument and set
9272the shadow color. If the shadow color is not explicitly set, the
9273default is to calculate it from the background color. To switch back
9274to the default behavior the color name can be omitted.
9275+
9276_fgsh_ takes a color name as an argument and sets the color used by
9277the shadowing font effect. See the *Font Shadow Effects* section of
9278the fvwm man page. By default this color is computed from the
9279foreground and background colors. To switch back to the default the
9280color name can be omitted.
9281+
9282_Pixmap_, _TiledPixmap_ and _AspectPixmap_ take a file name as an
9283argument, search the *ImagePath* and use it as the background pixmap.
9284Any transparent parts are filled with the background color. Not
9285specifying a file name removes any existing image from the colorset.
9286_TiledPixmap_ produces repeated copies of the image with no scaling,
9287_Pixmap_ causes the image to be stretched to fit whatever object the
9288colorset is applied to and _AspectPixmap_ stretches to fit but retains
9289the image aspect ratio.
9290+
9291_Transparent_ creates a transparent background pixmap. The pixmap is
9292used as a window background to achieve root transparency. For this you
9293should use the _ParentalRelativity_ option to the *Style* command. A
9294subsequent root background change may be detected or not, this depends
9295on the program used to set the background. If you use *fvwm-root*,
9296*xsetbg* (xli), *FvwmBacker* with solid or colorset colors or a recent
9297version of *Esetroot* (>= 9.2) a background change is detected. If
9298background changes are not detected (e.g., if you use *xv* or
9299*xsetroot*) you can force detection by using the *-d* option of
9300fvwm-root:
9301+
9302
9303....
9304xv -root -quit mybg.png; fvwm-root -d
9305....
9306
9307+
9308Due to the way X implements transparency no guarantees can be made
9309that the desired effect can be achieved. The application may even
9310crash. If you experience any problems with this option, do not use it.
9311+
9312Using outline move and resize (see the *OpaqueMoveSize* command and
9313the _ResizeOpaque_ *Style* option) as well as setting the
9314_WindowShadeShrinks_ style may help. The transparency achieved with
9315_Transparent_ depends on whether the colorset is applied to the
9316foreground or the background of a window. In the second case the
9317transparency is relative to the parent window of the window on which
9318the colorset is defined. For example:
9319+
9320
9321....
9322Colorset 12 VGradient 200 grey30 grey60
9323Colorset 17 Transparent
9324*FvwmIconMan: Colorset 12
9325*FvwmIconMan: PlainColorset 17
9326....
9327
9328+
9329gives an IconMan with a vertical grey gradient background and the
9330buttons use the background (by transparency). To obtain a (root)
9331transparent IconMan:
9332+
9333
9334....
9335Colorset 12 Transparent
9336Colorset 17 Transparent
9337Colorset 18 Transparent
9338Colorset 19 Transparent
9339
9340*FvwmIconMan: Colorset 12
9341*FvwmIconMan: PlainColorset 17
9342*FvwmIconMan: FocusColorset 18
9343*FvwmIconMan: IconColorset  19
9344....
9345
9346+
9347The Colorset IconMan option defines the IconMan window background, but
9348the PlainColorset and the FocusColorset are drawn on the foreground.
9349So, the transparency of the IconMan buttons is achieved by drawing
9350nothing. Now if this IconMan is swallowed in an FvwmButtons as:
9351+
9352
9353....
9354FvwmButtons:(Colorset 10, Swallow "FvwmIconMan" 'FvwmIconMan')
9355....
9356
9357+
9358then, *FvwmIconMan* becomes a child of *FvwmButtons* and it is
9359transparent relative to *FvwmButtons*. So, in this case *FvwmIconMan*
9360uses Colorset 10 as background. If you want root transparency use the
9361_RootTransparent_ option. *FvwmButtons* *FvwmIconMan*, and
9362*FvwmIdent*, are relatively simple. There is one main colorset option
9363which defines the background of the window and the other colorsets (if
9364any) are drawn on the foreground. The case of *FvwmProxy* is simpler,
9365the two colorsets refer to the window backgrounds. *FvwmPager* is more
9366complicated as almost everything in the pager are windows with some
9367parental relations (the mini windows are the child and the desktops
9368are the parents and all this is complicated by the hilighted page).
9369So, the colorsets apply to the background of these windows. You should
9370experiment. For *FvwmForm* and *FvwmScript* the situation is similar.
9371There is a main window (a child of the root window) which corresponds
9372to the main colorset and most of the widgets are windows which are
9373children of the main window. _Tint_ may work or not with the
9374_Transparent_ option. When the colorset is drawn on the foreground
9375_Tint_ should work. In some cases, tinting may be very slow. Tinting
9376may work with fvwm menu (without animation). Tinting may work better
9377if your X server has backing store enabled (try xdpyinfo to see if
9378this the case). There is a chance that the backing store support of
9379your X server does not work well with the terrible hack used to Tint
9380the ParentRelative Pixmap. So, to get tinted root transparency it is
9381more safe to use the _RootTransparent_ option.
9382+
9383_RootTransparent_ [ _buffer_ ] creates a root transparent background.
9384To make this option work, you must use an *Esetroot* compatible
9385program, fvwm-root with the --retain-pixmap option or *FvwmBacker*
9386with the RetainPixmap option (and colorset or solid backgrounds). The
9387_buffer_ keyword is useful only when the _Tint_ option is used too.
9388This speeds up creation of windows which use the colorset (useful for
9389fvwm menus) at the cost of memory usage. It also speeds up opaque move
9390and resize which can be unacceptably slow without _buffer_. However,
9391this option may add a lot of memory to your X server (depending on the
9392size of the image used to set the background). In summary, using
9393outline move and resize for modules which use such a colorset may be a
9394good idea.
9395+
9396_Shape_, _TiledShape_ and _AspectShape_ take a file name as an
9397argument, search the *ImagePath* and use it as the shape bitmap.
9398_TiledShape_ produces repeated copies of the bitmap with no scaling,
9399_Shape_ causes the bitmap to be stretched to fit whatever object the
9400colorset is applied to and _AspectShape_ stretches to fit but retains
9401the bitmap aspect ratio. If the file is a pixmap in xpm format the
9402shape mask (all opaque pixels) of the pixmap is used. For png and svg
9403images, the shape mask is equivalent to all not completely transparent
9404pixels (alpha > 0).
9405+
9406*Warning* Due to the way X11 implements shapes you cannot take back
9407making windows shaped. You may have to restart fvwm or the shaped
9408application.
9409+
9410_?Gradient ..._ creates a pixmap and stretches it to fit the window.
9411_?Gradient_ may be one of _HGradient_, _VGradient_, _DGradient_,
9412_BGradient_, _SGradient_, _CGradient_, _RGradient_ or _YGradient_. The
9413gradient types are as follows: H is horizontal; V is vertical; D is
9414diagonal from top left to bottom right; B is a backwards diagonal from
9415bottom left to top right; S is concentric squares; C is concentric
9416circles; R is a radar like pattern and Y is a Yin Yang style (but
9417without the dots). Please refer to the *Color Gradients* section for
9418the syntax of gradients.
9419+
9420_Tint_ takes 2 arguments, a color and a percentage between 0 and 100.
9421It causes the image defined using _?Pixmap_ or _?Gradient_ to be
9422tinted with the specified color using the percentage. If the image is
9423transparent _Tint_ tints only the image part. Unfortunately, a
9424colorset background specified using the _Transparent_ option can give
9425strange results. See the _Transparent_ option for details. With no
9426arguments this option removes the tint.
9427+
9428_fgTint_ takes 2 arguments, a color and a percentage between 0 and 100.
9429It causes the color defined using _fg_ to be tinted with the
9430specified color using the percentage. With no arguments this option
9431removes the tint.
9432+
9433_bgTint_ takes 2 arguments, a color and a percentage between 0 and 100.
9434It causes the color defined using _bg_ to be tinted with the
9435specified color using the percentage. If the _sh_ and _hi_ colors are
9436not specified, they are recomputed from the tinted bg color. With no
9437arguments this option removes the tint.
9438+
9439_Alpha_ takes a percentage between 0 and 100 as an argument. It causes
9440fvwm to merge the image defined using _?Pixmap_ or _?Gradient_ with
9441the _bg_ color using the percentage. If the percentage is 0 the image
9442is hidden and if it is 100 the image is displayed as usual (no merge).
9443The default is 100 and it is restored if no argument is given.
9444+
9445_fgAlpha_ takes a percentage between 0 and 100 as an argument. It
9446causes fvwm to merge the text and the colorset background using the
9447percentage. If the percentage is 0 the text is hidden and if it is 100
9448the text is displayed as usual (no merge). This option has an effect
9449only with fonts loaded by Xft, see the *Font Names and Font Loading*
9450section. The default is 100 and it is restored if no argument is
9451given.
9452+
9453_Dither_ causes fvwm to dither the image defined using _?Pixmap_ or
9454_?Gradient._ This is useful only with displays with depth less than or
9455equal to 16 (i.e., on displays which can only display less than 65537
9456colors at once). The dithering effect lets you simulate having more
9457colors available that you actually have. _NoDither_ causes fvwm to do
9458not dither the images. _Dither_ is the default if the depth is less
9459than or equal to 8 (a screen with 256 colors or less). In depth 15
9460(32768 colors) and 16 (65536 colors), the default is _NoDither_,
9461however this effect can be useful with images which contain a lot of
9462close colors. For example a fine gradient looks more smooth.
9463+
9464_IconTint_ takes 2 arguments, a color and a percentage between 0 and
9465100. It causes fvwm or a module to tint the "icons" which are rendered
9466into the colorset background with the specified color using a
9467percentage. Here "icons" means, fvwm Icons, fvwm menu icons, MiniIcons
9468which represent applications in various modules, images loaded by
9469modules (e.g., images specified by the _Icon_ *FvwmButtons* button
9470option) ...etc. With no arguments this option removes the icon tint.
9471
9472_IconAlpha_ takes a percentage between 0 and 100 as an argument. It
9473causes fvwm to merge the "icons" which are rendered into the colorset
9474background using this percentage. The default is 100 and it is
9475restored if no argument is given.
9476
9477_Note_: It is equivalent to use "Tint a_color rate" and "Alpha a" if a
9478= 100 and the bg color is a_color. This equivalence does not hold for
9479IconAlpha and IconTint as the background can be an image or a gradient
9480(and not a uniform color background). However, in some cases you can
9481achieve (almost) the same effect by using IconTint in the place of
9482IconAlpha. This is preferable as, in general, IconAlpha generates more
9483redrawing than IconTint.
9484
9485_NoShape_ removes the shape mask from the colorset while _Plain_
9486removes the background pixmap or gradient.
9487
9488Examples
9489
9490....
9491Colorset 3 fg tan, bg navy
9492....
9493
9494
9495If necessary this creates colorsets 0, 1, 2 and 3 and then changes
9496colorset 3 to have a foreground of tan, a background of navy.
9497
9498....
9499Colorset 3 bg "navy blue"
9500....
9501
9502changes the background color of colorset 3 to navy blue. The
9503foreground and pixmap are unchanged.
9504
9505....
9506Colorset 3 AspectPixmap large_murky_dungeon.xpm
9507....
9508
9509causes depression.
9510
9511....
9512Colorset 3 bg Average
9513....
9514
9515Sets the background color and the relief colors to match the
9516background pixmap. This is the default setting but it must be used if
9517a background color was specified and is now not required.
9518
9519....
9520Colorset 3 YGradient 200 3 blue 1000 navy 1 blue 1000 navy
9521....
9522
9523Adds a Yin Yang gradient background pixmap to colorset 3. If the
9524background is set to average it is recomputed along with the
9525foreground if that is set to contrast.
9526
9527....
9528#!/bin/sh
9529FvwmCommand "Colorset 7 fg navy, bg gray"
9530while true
9531do
9532	FvwmCommand "Colorset 7 fg gray"
9533	sleep 1
9534	FvwmCommand "Colorset 7 fg navy"
9535	sleep 1
9536done
9537....
9538
9539Makes colorset 7 blink.
9540
9541The color names used in colorsets are saved as fvwm variables which
9542can be substituted in any fvwm command. For example:
9543
9544
9545....
9546AddToFunc InitFunction
9547+ I Exec exec xterm -fg $[fg.cs0] -bg $[bg.cs0]
9548....
9549
9550Where $[fg.cs0] is the foreground color of colorset zero. Please refer
9551to the *Command Expansion* section for more information.
9552
9553*CleanupColorsets*::
9554	Resets a definition of all colorsets.
9555
9556*Color Gradients*::
9557	A color gradient is a background that changes its color gradually from
9558	one hue to a different one. Color gradients can be used by various
9559	commands and modules of fvwm. There are eight types of gradients:
9560	*HGradient* is a horizontal gradient, *VGradient* is vertical,
9561	*DGradient* is diagonal from top left to bottom right, *BGradient* is
9562	backwards diagonal from bottom left to top right, *SGradient* is
9563	concentric squares, *CGradient* is concentric circles, *RGradient* is
9564	a radar like pattern and *YGradient* is a Yin Yang style (but without
9565	the dots).
9566+
9567The color gradient syntax has two forms:
9568+
9569*?Gradient* _colors_ _start-color_ _end-color_
9570+
9571This form specifies a linear gradient. The arguments denote the total
9572number of _colors_ to allocate (between 2 and 1000), the initial color
9573and the final color.
9574+
9575Example:
9576+
9577
9578....
9579TitleStyle VGradient 20 rgb:b8/ce/bc rgb:5b/85/d0
9580....
9581
9582+
9583*?Gradient* _colors_ _segments_ _color_ _length_ _color_ [_length_
9584_color_] ...
9585+
9586The second form specifies a nonlinear gradient. The arguments are: the
9587total number of _colors_ to allocate (between 2 and 1000), then the
9588number of _segments_. For each segment, specify the starting _color_,
9589a relative _length_, then the ending color. Each subsequent segment
9590begins with the second color of the last segment. The lengths may be
9591any non-negative integers. The length of one segment divided by the
9592sum of all segments lengths is the fraction of the colors that are
9593used for the segment.
9594+
9595Examples:
9596+
9597
9598....
9599MenuStyle * \
9600MenuFace DGradient 128 2 lightgrey 50 blue 50 white
9601
9602# 20% gradient from red to blue,
9603# 30% from blue to black,
9604# 50% from black to grey
9605MenuStyle * \
9606MenuFace DGradient 100 3 Red 20 Blue 30 Black 50 Grey
9607
9608# 50% from blue to green, then
9609# 50% from yellow to red
9610Colorset 0 HGradient 128 3 Blue 1000 Green 1 Yellow 1000 Red
9611....
9612
9613
9614== ENVIRONMENT
9615
9616The environment variables that have an effect on how fvwm operates are
9617the following:
9618
9619_DISPLAY_::
9620	Fvwm starts on this display unless the *-display* option is given.
9621
9622_FVWM_USERDIR_::
9623	Used to determine the user's data directory for reading and writing
9624	files. If this variable is not already set, it is set by fvwm to
9625	_$HOME/.fvwm_, which is the default user's data directory.
9626
9627_FVWM3_LOGFILE_::
9628	Used to determine the path and filename to log debug information from
9629	fvwm3. By default debug log is written to
9630	_$FVWM_USERDIR_/fvwm3-output.log . If an absolute path is specified
9631	(starting with /) then _$FVWM_USERDIR_ is ignored, otherwise the log is
9632	written to _$FVWM_USERDIR_/_$FVWM3_LOGFILE_ .
9633
9634_FVWM_DATADIR_::
9635	Set by fvwm to the directory containing fvwm config and module data.
9636
9637_FVWM_MODULEDIR_::
9638	Set by fvwm to the directory containing the standard fvwm modules.
9639
9640_SESSION_MANAGER_::
9641	Fvwm tries to contact this session manager.
9642
9643_SESSION_MANAGER_NAME_::
9644	This is used mainly to determine xsm running to work around its bug. If
9645	this variable is set to "xsm", DiscardCommand is set as xsm expects it
9646	and not as XSMP requires. If you run fvwm under xsm, you should set this
9647	variable to "xsm", otherwise old state files are not removed.
9648
9649_SM_SAVE_DIR_::
9650	If this is set, fvwm saves its session data in this directory. Otherwise
9651	it uses _$HOME_. Note, the state files are named _.fs-??????_ and
9652	normally are removed automatically when not used anymore.
9653
9654*fvwm-config --info* is useful to query fvwm3 compiled-in paths
9655
9656== AUTHORS
9657
9658Robert Nation with help from many people, based on twm code, which was
9659written by Tom LaStrange. After Robert Nation came Charles Hines,
9660followed by Brady Montz. Currently fvwm is developed by a number of
9661people on the fvwm-workers mailing list.
9662
9663== COPYRIGHT
9664
9665Fvwm and all the modules, scripts and other files coming with the
9666distribution are subject to the GNU General Public License (GPL). Please
9667refer to the COPYING file that came with fvwm for details.
9668
9669== BUGS
9670
9671Bug reports can be sent to the fvwm-workers mailing list at
9672<fvwm-workers@fvwm.org>
9673
9674The official fvwm homepage is _http://fvwm.org/_.
9675