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