.\" Formatting instructions for the fvwm man page: .\" .\" - Do not use \f... formatting instructions .\" unless you have to, see below. .\" - Avoid single and double quotes wherever possible. .\" .\" For further details, please refer to the Linux Man-Page how-to. .\" .\" context typeface example .\" ---------------------------------- -------------- ----------------- .\" filenames: italics (.I) .I .fvwm2rc .\" command line options of fvwm2 cmd: bold (.B) .B \-cmd .\" arguments of command line options: italics (.I) .BI \-cmd command .\" built in commands: bold (.B) .B Move .\" references to built in commands: bold (.B) .RB See Move .\" references to man page sections: bold (.B) .RB See SYNOPSIS .\" references to style options: italics (.I) .RI See Lenience .\" built in command options: italics (.I) .BI "Move " "0 0" .\" command syntax: bold/ita. (.BI) .BI "Move [" "x y" "]" .\" environment variables: italics (.I) .I $DISPLAY .\" key names: small (.SM) .SM Tab .\" style names and strings: double quotes "stylename", "x" .\" single characters: single quotes '@' .\" module names: bold (.B) .B FvwmTheme .\" links to web pages: bold (.B) .B http://fvwm.org .\" acronyms: small (.SM) .SM ICCCM .\" .\" .\" The name fvwm is written in lower case throughout this man .\" page. .\" .\" Note that the word "will" is rarely correct in a man page or .\" any document. Describe what fvwm does, not what it will do, .\" even if you haven't written the feature yet. dje 2/3/01 .\" (3/Feb/2001). .\" .\" A note to everyone who needs to write dates. Don't use 2/3/01 .\" notation, a non-american person simply can't parse such .\" sequence of digits. Please use 3-Feb-2001 or 2001-02-03 forms. .\" migo 16/May/2001. .\" .\" A note about the rule against \f... formatting. On Solaris, .\" AIX, and HPUX the ".BI" type commands are limited to 6 .\" arguments. use \f... formatting in that case. See the lines .\" formatted with ".IP". .\" dje 15/June/2001. .\" .\" @(#)fvwm-2.4.20 9 Dec 2006 .de EX \"Begin example .ne 5 .if n .sp 1 .if t .sp .5 .nf .in +.5i .. .de EE .fi .in -.5i .if n .sp 1 .if t .sp .5 .. .ta .3i .6i .9i 1.2i 1.5i 1.8i .TH FVWM2 1 "9 Dec 2006" .UC .SH NAME fvwm2 \- F(?) Virtual Window Manager (version 2) for X11 .SH SYNOPSIS .B fvwm2 .RB [ \-blackout ] .RB [ \-clientId .IR id ] .RB [ \-cmd .IR config_command ] .RB [ \-d .IR displayname ] .RB [ \-debug ] .RB [ \-debug_stack_ring ] .RB [ \-f .IR config_file ] .RB [ \-h ] .RB [ \-replace ] .RB [ \-restore .IR state_file ] .RB [ \-s ] .RB [ \-version ] .RB [ \-visual .IR visual_class ] .RB [ \-visualId .IR id ] .SH DESCRIPTION Fvwm is a window manager for X11. It is designed to minimize memory consumption, provide a 3D look to window frames, and a virtual desktop. Note that there are several window managers around that have "fvwm" in their name. In the past, version 2.x of fvwm was commonly called fvwm2 to distinguish it from the former version 1.x (fvwm or even fvwm1). Since version 1.x has been replaced by version 2.x a long time ago we simply call version 2.x and all versions to come, fvwm, throughout this document, although the executable program is named fvwm2. There is an fvwm offspring called fvwm95. Although it is very similar to older versions of fvwm version 2 it is technically a different window manager that has been developed by different people. The main goal of fvwm95 was to supply a Windows 95 like look and feel. Since then fvwm has been greatly enhanced and only very few features of fvwm95 can not be imitated by fvwm. No active development has been going on for fvwm95 for several years now. Unfortunately Red Hat (a popular Linux distributor) has a pre-configured fvwm package based on fvwm version 2.x that is called fvwm95 too. Fvwm provides both a large .I virtual desktop and .I multiple disjoint desktops which can be used separately or together. The virtual desktop allows you to pretend that your video screen is really quite large, and you can scroll around within the desktop. The multiple disjoint desktops allow you to pretend that you really have several screens to work at, but each screen is completely unrelated to the others. Fvwm provides .I keyboard accelerators which allow you to perform most window-manager functions, including moving and resizing windows, and operating the menus, using keyboard shortcuts. Fvwm has also blurred the distinction between configuration commands and built-in commands that most window-managers make. Configuration commands typically set fonts, colors, menu contents, key and mouse function bindings, while built-in commands typically do things like raise and lower windows. Fvwm makes no such distinction, and allows, to the extent that is practical, anything to be changed at any time. Other noteworthy differences between Fvwm and other X11 window managers are the introduction of the .I SloppyFocus " and " NeverFocus focus methods. Focus policy can be specified for individual windows. Windows using .I SloppyFocus acquire focus when the pointer moves into them and retain focus until some other window acquires it. Such windows do not lose focus when the pointer moves into the root window. The .I NeverFocus policy is provided for use with windows into which one never types (e.g. xclock, oclock, xbiff, xeyes, tuxeyes) - for example, if a SloppyFocus terminal window has focus, moving the cursor over a .I NeverFocus decoration window won't deprive the terminal of focus. .SH OPTIONS These are the command line options that are recognized by fvwm: .TP .BI "-blackout" This option is provided for backward compatibility only. Blacking out the screen during startup is not necessary anymore. .TP .BI "-clientId " id This option is used when fvwm is started by a session manager. Should not be used by a user. .TP .BI "-cmd " config_command Causes fvwm to use .I config_command instead of .RB "'Read" .IR ".fvwm2rc'" as its initialization command. (Note that up to 10 .BR \-f " and " \-cmd parameters can be given, and they are executed in the order specified.) .TP .BI "-d " displayname Manage the display called .I displayname instead of the name obtained from the environment variable .IR "$DISPLAY" . .TP .BI "-debug" Puts X transactions in synchronous mode, which dramatically slows things down, but guarantees that fvwm's internal error messages are correct. Also causes fvwm to output debug messages while running. .TP .BI "-debug_stack_ring" Enables stack ring debugging. This option is only intended for internal debugging and should only be used by developers. .TP .BI "-f " config_file Causes fvwm to read .I config_file instead of .I .fvwm2rc as its initialization file. This is equivalent to .RB "-cmd 'Read" .IR "config_file'." . .TP .BI "-h" A short usage description is printed. .TP .BI "-replace" Try to take over from a previously running wm. This does not work unless the other wm is .SM ICCCM 2.0 compliant. .TP .BI "-restore " state_file This option is used when fvwm is started by a session manager. Should not be used by a user. .TP .BI "-s" On a multi-screen display, run fvwm only on the screen named in the .I $DISPLAY environment variable or provided through the .B -d option. Normally, fvwm attempts to start up on all screens of a multi-screen display. .TP .BI "-version" Prints the version of fvwm to .IR stderr . Also prints an information about the compiled in support for readline, rplay, stroke, xpm, gnome hints, session management and multibyte characters. .TP .BI "-visual " visual_class Causes fvwm to use .I visual_class for the window borders and menus. .I visual_class can be "StaticGray", "GrayScale", "StaticColor", "PseudoColor", "TrueColor" or "DirectColor". .TP .BI "-visualId " id Causes fvwm to use .I id as the visualId for the window borders and menus. .I id can be specified as N for decimal or 0xN for hexadecimal. See man page of xdpyinfo for a list of supported visuals. .SH ANATOMY OF A WINDOW Fvwm puts a decorative border around most windows. This border consists of a bar on each side and a small L-shaped section on each corner. There is an additional top bar called the title-bar which is used to display the name of the window. In addition, there are up to 10 title-bar buttons. The top, side, and bottom bars are collectively known as the side-bars. The corner pieces are called the frame. Unless the standard defaults files are modified, pressing mouse button 1 in the title or side-bars begins a move operation on the window. Pressing button 1 in the corner frame pieces begins a resize operation. Pressing button 2 anywhere in the border brings up an extensive list of window operations. Up to ten title-bar buttons may exist. Their use is completely user definable. The default configuration has a title-bar button on each side of the title-bar. The one on the left is used to bring up a list of window options, regardless of which mouse button is used. The one on the right is used to iconify the window. The number of title-bar buttons used depends on which ones have mouse actions bound to them. See the section on the .B Mouse command below. .SH THE VIRTUAL DESKTOP Fvwm provides multiple virtual desktops for users who wish to use them. The screen is a viewport onto a .I desktop which may be larger than the screen. Several distinct desktops can be accessed (concept: one desktop for each project, or one desktop for each application, when view applications are distinct). Since each desktop can be larger than the physical screen, divided into m by n .I pages which are each the size of the physical screen, windows which are larger than the screen or large groups of related windows can easily be viewed. The (m by n) size (i.e. number of pages) of the virtual desktops can be changed any time, by using the .B DeskTopSize built-in command. All virtual desktops must be (are) the same size. The total number of distinct desktops does not need to be specified, but is limited to approximately 4 billion total. All windows on a range of desktops can be viewed in the .BR FvwmPager , a miniature view of the desktops. The pager is an accessory program, called a module, which is not essential for the window manager to operate. Windows may also be listed, along with their geometries, in a window list, accessible as a pop-up menu, or as a separate window, called the .B FvwmWinList (another module). Fvwm keeps the windows on the desktop in a layered stacking order; a window in a lower layer never obscures a window in a higher layer. The layer of a window can be changed by using the .B Layer command. The concept of layers is a generalization of the .I StaysOnTop flag of older fvwm versions. The .IR StaysOnTop " and " StaysPut .B Style options are now implemented by putting the windows in suitable layers and the previously missing .IB "StaysOnBottom " Style option has been added. .B Sticky windows are windows which transcend the virtual desktop by "Sticking to the screen's glass". They always stay put on the screen. This is convenient for things like clocks and xbiff's, so you only need to run one such gadget and it always stays with you. Icons can also be made to stick to the glass, if desired. Window geometries are specified relative to the current viewport. That is: .EX xterm -geometry +0+0 .EE creates a window in the upper-left hand corner of the visible portion of the screen. It is permissible to specify geometries which place windows on the virtual desktop, but off the screen. For example, if the visible screen is 1000 by 1000 pixels, and the desktop size is 3x3, and the current viewport is at the upper left hand corner of the desktop, invoking: .EX xterm -geometry +1000+1000 .EE places a window just off of the lower right hand corner of the screen. It can be found by moving the mouse to the lower right hand corner of the screen and waiting for it to scroll into view. A geometry specified as something like: .EX xterm -geometry -5-5 .EE places the window's lower right hand corner 5 pixels from the lower right corner of the visible portion of the screen. Not all applications support window geometries with negative offsets. Some applications place the window's upper right hand corner 5 pixels above and to the left of the upper left hand corner of the screen; others may do just plain bizarre things. There are several ways to cause a window to map onto a desktop or page other than the currently active one. The geometry technique mentioned above (specifying x,y coordinates larger than the physical screen size), however, suffers from the limitation of being interpreted relative to the current viewport: the window may not consistently appear on a specific page, unless you always invoke the application from the same page. A better way to place windows on a different page, screen or desk from the currently mapped viewport is to use the .IR StartsOnPage or StartsOnScreen style specification (the successors to the older .I StartsOnDesk style) in the .I .fvwm2rc configuration file. The placement is consistent: it does not depend on your current location on the virtual desktop. Some applications that understand standard Xt command line arguments and X resources, like xterm and xfontsel, allow the user to specify the start-up desk or page on the command line: .EX xterm -xrm "*Desk:1" .EE starts an xterm on desk number 1; .EX xterm -xrm "*Page:3 2 1" .EE starts an xterm two pages to the right and one down from the upper left hand page of desk number 3. Not all applications understand the use of these options, however. You could achieve the same results with the following lines in your .I .Xdefaults file: .EX XTerm*Desk: 1 .EE or .EX XTerm*Page: 3 2 1 .EE .SH USE ON MULTI-SCREEN DISPLAYS If the .B -s command line argument is not given, fvwm automatically starts up on every screen on the specified display. After fvwm starts each screen is treated independently. Restarts of fvwm need to be performed separately on each screen. The use of .EX EdgeScroll 0 0 .EE is strongly recommended for multi-screen displays. You may need to quit on each screen to quit from the X session completely. This is not to be confused with Xinerama support. .SH XINERAMA SUPPORT Fvwm supports the Xinerama extension of newer X servers which is similar to multi head support (multiple screens) but allows to move windows between screens. If Xinerama support has been compiled into fvwm, it is used whenever fvwm runs on an X server that supports and uses multiple screens via Xinerama. Without this option, the whole desktop is treated as one big screen. For example, menus might pop up right between two screens. The .BI EdgeResistance command allows to specify an explicit resistance value for moving windows over the screen edge between two Xinerama screens. Xinerama support can be enabled or disabled on the fly or from the configuration file with the .B Xinerama command. Many modules and commands work nicely with Xinerama displays. Everywhere where a geometry in the usual X format can be supplied, fvwm's Xinerama extension allows to specify a screen in addition to the geometry (or even the screen alone). To do this, a '@' is added to the end of the geometry string followed by either the screen number or a letter. A number is taken as the number of the Xinerama screen to be used (as configured in the X server). The letter can be one of 'g' for the global screen (the rectangle that encloses all Xinerama screens), 'p' for the primary screen (see below), 'c' for the current screen (the one that currently contains the pointer). If the X server does not support Xinerama or only one screen is used, the screen bit is ignored. .EX Style * IconBox 64x300-0-0@p .EE Xinerama support can be configured to use a primary screen. Fwvm can be configured to place new windows and icons on this screen. The primary screen is screen 0 by default but can be changed with the .B XineramaPrimaryScreen command. Xinerama support was designed to work out of the box with the same configurations file that would work on a single screen. It may not work too well if the involved screens use different screen resolutions. In this situation, windows may get stuck in the portion of the whole desktop that belongs to neither screen. If this happens, the windows or icons can be retrieved with the command .EX All MoveToScreen .EE that can be entered in an FvwmConsole window or with FvwmCommand. For multi-screen implementations other than Xinerama, such as Single Logical Screen, it is possible to simulate a Xinerama configuration if the total screen seen by FVWM is made up of equal sized monitors in a rectangular grid. The commands .BR XineramaSls " and " XineramaSlsSize are used to configure this feature. .SH INITIALIZATION During initialization, fvwm searches for a configuration file which describes key and button bindings, and many other things. The format of these files is described later. Fvwm first searches for configuration files using the command .EX .BI "Read " .fvwm2rc .EE This looks for .IR .fvwm2rc " in " .IR "$HOME/.fvwm" " or " "$FVWM_USERDIR" directories, as described in .B Read below. If this fails, fvwm also searches for this file in the .I $HOME directory or for .I system.fvwm2rc file in the system place. If a configuration file is not found, any mouse button or the .SM Help or .SM F1 keys on the root window brings up menus and forms that can create a starting configuration file. Fvwm sets two environment variables which are inherited by its children. These are .I $DISPLAY which describes the display on which fvwm is running. .I $DISPLAY may be .I unix:0.0 or .IR ":0.0" , which doesn't work too well when passed through rsh to another machine, so .I $HOSTDISPLAY is set to a network-ready description of the display. .I $HOSTDISPLAY always uses the TCP/IP transport protocol (even for a local connection) so .I $DISPLAY should be used for local connections, as it may use Unix-domain sockets, which are faster. If you want to start some applications or modules with fvwm, you can simply put .EX Exec app .EE or .EX Module FvwmXxx .EE into your .IR .fvwm2rc , but it is not recommended; do this only if you know what you are doing. It is usually critical to start applications or modules after .I .fvwm2rc is read, because it contains styles or module configurations which can affect window appearance and functionality. The standard way to start applications or modules on fvwm's start up is to add them to an initialization function (usually .BR StartFunction " or " InitFunction ). This way they are only started after fvwm reads the entire .IR .fvwm2rc . Fvwm has three special functions for initialization: .BR StartFunction , which is executed on startups and restarts; .BR InitFunction " and " RestartFunction , which are executed during initialization and restarts (respectively) just after StartFunction. These functions may be customized in a user's .I .fvwm2rc file via the .B AddToFunc command (described later) to start up modules, xterms, or whatever you'd like to have started by fvwm. Fvwm has also a special exit function: . BR ExitFunction , executed when exiting or restarting before actually quitting. It could be used to explicitly kill modules, etc. If fvwm is run under a session manager, functions .BR SessionInitFunction " and " SessionRestartFunction are executed instead of InitFunction and RestartFunction. This helps to define the user's .I .fvwm2rc file to be good for both running under a session manager and without it. Generally it is a bad idea to start xterms or other applications in "Session*" functions. Also someone can decide to start different modules while running under a session manager or not. For the similar purposes . B SessionExitFunction is used instead of ExitFunction. .EX DestroyFunc StartFunction AddToFunc StartFunction + I ModuleSynchronous FvwmTheme + I Module FvwmPager * * + I Module FvwmButtons DestroyFunc InitFunction AddToFunc InitFunction + I Module FvwmBanner + I Module FvwmTaskBar + I xsetroot -solid cyan + I Exec xterm + I Exec netscape DestroyFunc RestartFunction AddToFunc RestartFunction + I Module FvwmTaskBar DestroyFunc SessionInitFunction AddToFunc SessionInitFunction + I Module FvwmBanner DestroyFunc SessionRestartFunction AddToFunc SessionRestartFunction + I Nop .EE You don't need to define all special functions if some are empty. .SH COMPILATION OPTIONS Fvwm has a number of compile-time options. If you have trouble using a certain command or feature, check to see if support for it was included at compile time. Optional features are described in the .I config.h file that is generated during compilation. .SH ICONS The basic fvwm configuration uses monochrome bitmap icons. If .B XPM extensions are compiled in, then color icons can be used. In order to use these options you need the XPM package, as described in the .I INSTALL.fvwm file. If both the .BR SHAPE " and " XPM options are compiled in you get shaped color icons, which are very spiffy. .SH MODULES A module is a separate program which runs as a separate Unix process but transmits commands to fvwm to execute. Users can write their own modules to do any weird or bizarre manipulations without bloating or affecting the integrity of fvwm itself. Modules must be spawned by fvwm so that it can set up two pipes for fvwm and the module to communicate with. The pipes are already open for the module when it starts and the file descriptors for the pipes are provided as command line arguments. Modules can be spawned during fvwm at any time during the X session by use of the .B Module built-in command. Modules can exist for the duration of the X session, or can perform a single task and exit. If the module is still active when fvwm is told to quit, then fvwm closes the communication pipes and waits to receive a SIGCHLD from the module, indicating that it has detected the pipe closure and has exited. If modules fail to detect the pipe closure fvwm exits after approximately 30 seconds anyway. The number of simultaneously executing modules is limited by the operating system's maximum number of simultaneously open files, usually between 60 and 256. Modules simply transmit text commands to the fvwm built-in command engine. Text commands are formatted just as in the case of a mouse binding in the .I .fvwm2rc setup file. Certain auxiliary information is also transmitted, as in the sample module .BR FvwmButtons . The .B FvwmButtons module is documented in its own man page. Please refer to the .B "MODULE COMMANDS" section for details. .SH ICCCM COMPLIANCE Fvwm attempts to be .SM ICCCM 2.0 compliant. In addition, .SM ICCCM states that it should be possible for applications to receive any keystroke, which is not consistent with the keyboard shortcut approach used in fvwm and most other window managers. In particular you cannot have the same keyboard shortcuts working with your fvwm and another fvwm running within Xnest (a nested X server running in a window). The same problem exists with mouse bindings. The .SM ICCCM states that windows possessing the property .EX WM_HINTS(WM_HINTS): Client accepts input or input focus: False .EE should not be given the keyboard input focus by the window manager. These windows can take the input focus by themselves, however. A number of applications set this property, and yet expect the window-manager to give them the keyboard focus anyway, so fvwm provides a window-style, .IR Lenience ", " which allows fvwm to overlook this .SM ICCCM rule. Even with this window-style it is not guaranteed that the application accepts focus. The differences between .SM ICCCM 1.1 and 2.0 include the ability to take over from a running .SM ICCCM 2.0 compliant window manager; thus .EX fvwm2; vi .fvwm2rc; fvwm2 -replace .EE resembles the .B Restart command. It is not exactly the same, since killing the previously running wm may terminate your X session, if the wm was started as the last client in your .IR .Xclients " or " .Xsession file. Further additions are support for client-side colormap installation (see the .SM ICCCM for details) and the urgency hint. Clients can set this hint in the WM_HINTS property of their window and expect the window manager to attract the users attention to the window. Fvwm has two re-definable functions for this purpose, "UrgencyFunc" and "UrgencyDoneFunc", which are executed when the flag is set/cleared. Their default definitions are: .EX AddToFunc UrgencyFunc + I Iconify off + I FlipFocus + I Raise + I WarpToWindow 5p 5p AddToFunc UrgencyDoneFunc + I Nop .EE .SH GNOME COMPLIANCE Fvwm attempts to be .SM GNOME compliant. Check .B http://www.gnome.org for what that may mean. .SM GNOME support is a compile time option which is on by default. To disable GNOME hints for some or all windows, the .I GNOMEIgnoreHints style can be used. .SH MWM COMPATIBILITY Fvwm provides options to emulate Motif Window Manager (Mwm) as well as possible. Please refer to the .B Emulate command as well as to the Mwm specific options of the .BR Style " and " MenuStyle commands for details. .SH OPEN LOOK and XVIEW COMPATIBILITY .SH OPEN LOOK and XVIEW COMPATIBILITY Fvwm supports all the Open Look decoration hints (except pushpins). Should you use any such application, please add the following line to your .fvwm2rc: .EX Style * OLDecor .EE Most (perhaps all) Open Look applications have a strange notion of keyboard focus handling. Although a lot of work went into fvwm to work well with these, you may still encounter problems. It is recommended to use the NeverFocus focus policy and the NoLenience style for all such applications (the windows will still get the focus): .EX Style NeverFocus, NoLenience .EE But in case you can not live with that focus policy, you can try using one of the other focus policies in combination with the Lenience style: .EX Style MouseFocus, Lenience Style SloppyFocus, Lenience Style ClickToFocus, Lenience .EE .SH M4 PREPROCESSING .PP M4 pre-processing is handled by a module in fvwm. To get more details, try man .BR FvwmM4 . In short, if you want fvwm to parse your files with m4, then replace the command .B Read with .B FvwmM4 in your .I .fvwm2rc file (if it appears at all), and start fvwm with the command .EX fvwm2 -cmd "FvwmM4 .fvwm2rc" .EE .SH CPP PREPROCESSING .PP Cpp is the C-language pre-processor. fvwm offers cpp processing which mirrors the m4 pre-processing. To find out about it, re-read the M4 section above, but replace "m4" with "cpp". .SH AUTO-RAISE .PP Windows can be automatically raised when it receives focus, or some number of milliseconds after it receives focus, by using the auto-raise module, .BR FvwmAuto . .SH CONFIGURATION FILES The configuration file is used to describe mouse and button bindings, colors, the virtual display size, and related items. The initialization configuration file is typically called .IR .fvwm2rc . By using the .B Read built-in, it is easy to read in new configuration files as you go. Lines beginning with '#' are ignored by fvwm. Lines starting with \'*' are expected to contain module configuration commands (rather than configuration commands for fvwm itself). Like in shell scripts embedded newlines in a configuration file line can be quoted by preceding them with a backslash. All lines linked in this fashion are treated as a single line. The newline itself is ignored. Fvwm makes no distinction between configuration commands and built-in commands, so anything mentioned in the built-in commands section can be placed on a line by itself for fvwm to execute as it reads the configuration file, or it can be placed as an executable command in a menu or bound to a mouse button or a keyboard key. It is left as an exercise for the user to decide which function make sense for initialization and which ones make sense for run-time. .SH SUPPLIED CONFIGURATION A sample configuration file, .IR .fvwm2rc , is supplied with the fvwm distribution. It is well commented and can be used as a source of examples for fvwm configuration. .\" .SH INTERNATIONALIZATION .\" Internationalized fvwm enables to display not only LATIN-1 .\" characters but also multi byte characters such as Japanese, .\" Korean, etc. You should set up your environment variable .\" .IR LC_TYPE " or " LANG , .\" to enable this feature. Also, you should specify proper .\" .I FONTSET .\" instead of .\" .IR FONT . .\" Note that no catalog-file or input-methods are implemented. .SH KEYBOARD SHORTCUTS Almost all window manager operations can be performed from the keyboard so mouse-less operation should be possible. In addition to scrolling around the virtual desktop by binding the .B Scroll built-in to appropriate keys, .BR Popup ", " Move ", " Resize ", " and most other built-ins can be bound to keys. Once a built in function is started the pointer is moved by using the up, down, left, and right arrows, and the action is terminated by pressing return. Holding down the .SM Shift key causes the pointer movement to go in larger steps and holding down the .SM control key causes the cursor movement to go in smaller steps. Standard emacs and vi cursor movement controls ( .SM n, .SM p, .SM f, .SM b, and .SM j, .SM k, .SM h, .SM l ) can be used instead of the arrow keys. .SH SESSION MANAGEMENT Fvwm supports session management according to the X Session Management Protocol. It saves and restores window position, size, stacking order, desk, stickiness, shadedness, maximizedness, iconifiedness for all windows. Furthermore, some global state is saved. Fvwm doesn't save any information regarding styles, decors, functions or menus. If you change any on these resources during a session (e.g. by issuing .B Style commands or by using various modules), these changes are lost after saving and restarting the session. To become permanent, such changes have to be added to the configuration file. Note further that the current implementation has the following anomaly when used on a multi-screen display: Starting fvwm for the first time, fvwm manages all screens by forking a copy of itself for each screen. Every copy knows its parent and issuing a .B Quit command to any instance of fvwm kills the master and thus all copies of fvwm. When you save and restart the session, the session manager brings up a copy of fvwm on each screen, but this time they are started as individual instances managing one screen only. Thus a .B Quit kills only the copy it was sent to. This is probably not a very serious problem, since with session management, you are supposed to quit a session through the session manager anyway. If it is really needed, .EX Exec exec killall fvwm2 .EE still kills all copies of fvwm. Your system must have the .B killall command though. .SH BOOLEAN ARGUMENTS A number of commands take one or several boolean arguments. These take a few equivalent inputs: "yes", "on", "true", "t" and "y" all evaluate to true while "no", "off", "false", "f" and "n" evaluate to false. Some commands allow "toggle" too which means that the feature is disabled if it is currently enabled and vice versa. .SH BUILT IN KEY AND MOUSE BINDINGS The following commands are built-in to fvwm: .EX Key Help R A Popup MenuFvwmRoot Key F1 R A Popup MenuFvwmRoot Key Tab A M WindowList Root c c NoDeskSort Key Escape A MC EscapeFunc Mouse 0 R N Menu MenuFvwmRoot Mouse 1 TS A FuncFvwmRaiseLowerX Move Mouse 1 F A FuncFvwmRaiseLowerX Resize AddToFunc FuncFvwmRaiseLowerX I Raise + M $0 + D Lower .EE The .SM Help and .SM F1 keys invoke a built-in menu that fvwm creates. This is primarily for new users that have not created their own configuration file. Either key on the root (background) window pops up an menu to help you get started. The .SM Tab key pressed anywhere with the .SM Meta key (same as the .SM Alt key on PC keyboards) held down pop-ups a window list. Mouse button 1 on the title-bar or side frame can move, raise or lower a window. Mouse button 1 on the window corners can resize, raise or lower a window. You can override or remove these bindings. To remove the window list binding, use this: .EX Key Tab A M - .EE .SH BUILT IN COMMANDS Fvwm supports a set of built-in functions which can be bound to keyboard or mouse buttons. If fvwm expects to find a built-in function in a command, but fails, it checks to see if the specified command should have been .EX Function (rest of command) .EE or .EX Module (rest of command) .EE This allows complex functions or modules to be invoked in a manner which is fairly transparent to the configuration file. Example: the .I .fvwm2rc file contains the line .EX HelpMe .EE Fvwm looks for a built-in command called "HelpMe", and fails. Next it looks for a user-defined complex function called "HelpMe". If no such user defined function exists, Fvwm tries to execute a module called "HelpMe". Note: There are many commands that affect look and feel of specific, some or all windows, like .BR Style ", " Mouse ", the " FvwmTheme module and many others. For performance reasons such changes are not applied immediately but only when fvwm is idle, i.e. no user interaction or module input is pending. Specifically, new .B Style options that are set in a function are not applied until after the function has completed. This can sometimes lead to unwanted effects. To force that all pending changes are applied immediately, use the .BR UpdateStyles ", " Refresh " or " RefreshWindow commands. .SS QUOTING Quotes are required only when needed to make fvwm consider two or more words to be a single argument. Unnecessary quoting is allowed. If you want a quote character in your text, you must escape it by using the backslash character. For example, if you have a pop-up menu called "Window-Ops", then you don't need quotes: .EX Popup Window-Ops .EE but if you replace the dash with a space, then you need quotes: .EX Popup "Window Ops" .EE The supported quoting characters are double quotes, single quotes and reverse single quotes. All three kinds of quotes are treated in the same way. Single characters can be quoted with a preceding backslash. Quoting single characters works even inside other kinds of quotes. .SS COMMAND EXPANSION Whenever a fvwm command line is executed, fvwm performs parameter expansion. A parameter is a '$' followed by a word enclosed in brackets ($[...]) or a single special character. If fvwm encounters an unquoted parameter on the command line it expands it to a string indicated by the parameter name. Unknown parameters are left untouched. Parameter expansion is performed before quoting. To quote a '$' use "$$". In the past some single letter variables were supported. It is deprecated now, since they cause a number of problems. You should use the longer substitutes instead. Example: .EX # Print the current desk number, horizontal # page and the window's class. Echo $[desk.n] $[page.nx] $[w.class] .EE Note: If the command is called outside a window context, it will print "$[w.class]" instead of the class name. It is usually not enough to have the pointer over a window to have a context window. To force using the window with the focus, the .B Current command can be used: .EX Current Echo $[desk.n] $[page.nx] $[w.class] .EE The parameters known by fvwm are: .in +.5i $$ .in +.3i A literal '$'. .in -.3i .in -.5i .in +.5i $. .in +.3i The absolute directory of the currently Read file. Intended for creating relative and relocatable configuration trees. If used outside of any read file, the returned value is '.'. .in -.3i .in -.5i .in +.5i $c .in +.3i The window's resource class name or "$c" if no window is associated with the command. (Deprecated, use $[w.class] instead.) .in -.3i .in -.5i .in +.5i $d .in +.3i The current desk number. (Deprecated, use $[desk.n] instead.) .in -.3i .in -.5i .in +.5i $n .in +.3i The window's name or "$n" if no window is associated with the command. (Deprecated, use $[w.name] instead.) .in -.3i .in -.5i .in +.5i $r .in +.3i The window's resource name or "$r" if no window is associated with the command. (Deprecated, use $[w.resource] instead.) .in -.3i .in -.5i .in +.5i $v .in +.3i The first line printed by the -version command line option. (Deprecated, use $[version.line] instead.) .in -.3i .in -.5i .in +.5i $w .in +.3i The window-id (expressed in hex, e.g. 0x10023c) of the window the command was called for or "$w" if no window is associated with the command. (Deprecated, use $[w.id] instead.) .in -.3i .in -.5i .in +.5i $x .in +.3i The x coordinate of the current viewport. (Deprecated, use $[vp.x] instead.) .in -.3i .in -.5i .in +.5i $y .in +.3i The y coordinate of the current viewport. (Deprecated, use $[vp.y] instead.) .in -.3i .in -.5i .in +.5i $0 to $9 .in +.3i The positional parameters given to a complex function (a function that has been defined with the .B AddToFunc command). "$0" is replaced with the first parameter, "$1" with the second parameter and so on. If the corresponding parameter is undefined, the "$..." is deleted from the command line. .in -.3i .in -.5i .in +.5i $* .in +.3i All positional parameters given to a complex function. This includes parameters that follow after "$9". .in -.3i .in -.5i .in +.5i $[version.num] .in +.3i The version number, like "2.6.0". .in -.3i .in -.5i .in +.5i $[version.info] .in +.3i The version info, like " (from cvs)", empty for the official releases. (Always empty in this branch.) .in -.3i .in -.5i .in +.5i $[version.line] .in +.3i The first line printed by the -version command line option. .in -.3i .in -.5i .in +.5i $[vp.x] $[vp.y] $[vp.width] $[vp.height] .in +.3i Either coordinate or the width or height of the current viewport. .in -.3i .in -.5i .in +.5i $[desk.n] .in +.3i The current desk number. .in -.3i .in -.5i .in +.5i $[desk.width] $[desk.height] .in +.3i The width or height of the whole desktop, i.e. the width or height multiplied by the number of pages in x or y direction. .in -.3i .in -.5i .in +.5i $[desk.pagesx] $[desk.pagesy] .in +.3i The number of total pages in a desk in x or y direction. This is the same as the values set by .BR DesktopSize . .in -.3i .in -.5i .in +.5i $[page.nx] $[page.ny] .in +.3i The current page numbers, by X and Y axes, starting from 0. .IR page " is equivalent to " area " in the GNOME terminology." .in -.3i .in -.5i .in +.5i $[w.id] .in +.3i The window-id (expressed in hex, e.g. 0x10023c) of the window the command was called for or "$[w.id]" if no window is associated with the command. .in -.3i .in -.5i .in +.5i $[w.x] $[w.y] $[w.width] $[w.height] .in +.3i Either coordinate or the width or height of the current window if it is not iconified. If no window is associated with the command or the window is iconified, the string is left as is. .in -.3i .in -.5i .in +.5i $[w.name] $[w.iconname] $[w.class] $[w.resource] .in +.3i The window's name or icon name or resource class or resource name respectivelly, or unexpended "$[w.]" string if no window is associated with the command. .in -.3i .in -.5i .in +.5i $[screen] .in +.3i The screen number fvwm is running on. Useful for setups with multiple screens. .in -.3i .in -.5i .in +.5i $[fg.cs] .in -.5i .in +.5i $[bg.cs] .in -.5i .in +.5i $[hilight.cs] .in -.5i .in +.5i $[shadow.cs] .in +.3i These class of parameters is replaced with the name of the foreground (fg), background (bg), hilight (hilight) or shadow (shadow) color that is defined in colorset (replace with zero or a positive integer). For example "$[fg.cs3]" is expanded to the name of the foreground color of colorset 3 (in rgb:rrrr/gggg/bbbb form). Please refer to the man page of the .B FvwmTheme module for details about colorsets. Note that although other parameters cannot be used in module configuration lines, it is possible to use this class of parameters. They can be used wherever a module expects a color name. Since the .B FvwmTheme module is not running when fvwm first passes through its configuration file, you may not get the desired results if you use this in commands like .EX Style * HilightFore $[fg.cs0], HilightBack $[bg.cs0] .EE .in -.3i .in -.5i .in +.5i $[...] .in +.3i If the string within the braces is neither of the above, fvwm tries to find an environment variable with this name and replaces its value if one is found (e.g. "$[PAGER]" could be replaced by "more"). Otherwise the string is left as is. .in -.3i .in -.5i Some examples can be found in the description of the .B AddToFunc command. .SS THE LIST OF BUILTIN COMMANDS The commands descriptions below are grouped together in the following sections. The sections are hopefully sorted in order of usefulness to the newcomer. .EX - Menu commands - Miscellaneous commands - Commands affecting window movement and placement - Commands for focus and mouse movement - Commands controlling window state - Commands for mouse, key and stroke bindings - The Style command (controlling window styles) - Other commands controlling window styles - Commands controlling the virtual desktop - Commands for user functions and shell commands - Conditional commands - Module commands - Quit, restart and session management commands - Color gradients .EE .SS COMMANDS FOR MENUS .TP .BI "AddToMenu " menu-name " [" menu-label " " action "]" Begins or adds to a menu definition. Typically a menu definition looks like this: .EX AddToMenu Utilities Utilities Title + Xterm Exec exec xterm -e tcsh + Rxvt Exec exec rxvt + "Remote Logins" Popup Remote-Logins + Top Exec exec rxvt -T Top -n \\ Top -e top + Calculator Exec exec xcalc + Xman Exec exec xman + Xmag Exec exec xmag + emacs Exec exec xemacs + Mail MailFunction \\ xmh "-font fixed" + "" Nop + Modules Popup Module-Popup + "" Nop + Exit Fvwm Popup Quit-Verify .EE The menu could be invoked via .EX Mouse 1 R A Menu Utilities Nop .EE or .EX Mouse 1 R A Popup Utilities .EE There is no end-of-menu symbol. Menus do not have to be defined in a contiguous region of the .I .fvwm2rc file. The quoted portion in the above examples is the menu label, which appears in the menu when the user pops it up. The remaining portion is a built-in command which should be executed if the user selects that menu item. An empty menu-label ("") and the .B Nop function can be used to insert a separator into the menu. The keywords .IR DynamicPopUpAction " and " DynamicPopDownAction have a special meaning when used as the name of a menu item. The action following the keyword is executed whenever the menu is popped up or down. This way you can implement dynamic menus. It is even possible to destroy itself with .B DestroyMenu and the rebuild from scratch. When the menu has been destroyed (unless you used the .I recreate option when destroying the menu), do not forget to add the dynamic action again. Note: Do not trigger actions that require user interaction. They will probably fail and may screw up your menus. See .B Silent command. Warning: Do not issue .B MenuStyle commands as dynamic menu actions. Chances are good that this will crash fvwm. Example (File browser): .EX # You can find the shell script # fvwm_make_browse_menu.sh in the utils # directory of the distribution. AddToMenu BrowseMenu + DynamicPopupAction Piperead \\ 'fvwm_make_browse_menu.sh BrowseMenu' .EE Example (Picture menu): .EX # Build a menu of all .jpg files in # $HOME/Pictures AddToMenu JpgMenu foo title + DynamicPopupAction Function MakeJpgMenu AddToFunc MakeJpgMenu + I DestroyMenu recreate JpgMenu + I AddToMenu JpgMenu Pictures Title + I PipeRead 'for i in $HOME/Pictures/*.jpg; \\ do echo AddToMenu JpgMenu "`basename $i`" Exec xv $i; done' .EE The keyword .I MissingSubmenuFunction has a similar meaning. It is executed whenever you try to pop up a sub-menu that does not exist. With this function you can define and destroy menus on the fly. You can use any command after the keyword, but the name of a function defined with .B AddToFunc follows it, fvwm executes this command: .EX Function .EE I.e. the name is passed to the function as its first argument and can be referred to with "$0". Example: .EX # There is another shell script # fvwm_make_directory_menu.sh in the utils # directory of the distribution. To use it, # define this function in your configuration # file: AddToFunc MakeMissingDirectoryMenu + I Exec fvwm_make_directory_menu.sh $0 AddToMenu SomeMenu + MissingSubmenuFunction MakeMissingDirectoryMenu + "Root directory" Popup / .EE This is another implementation of the file browser that uses sub-menus for subdirectories. Titles can be used within the menu. If you add the option .I top behind the keyword .BR Title , the title is added to the top of the menu. If there was a title already, it is overwritten. .EX AddToMenu Utilities Tools Title top .EE All text up to the first .SM Tab in the menu label is aligned to the left side of the menu, all text right of the first .SM Tab is aligned to the left in a second column and all text thereafter is placed right aligned in the third column. All other .SM Tabs are replaced by spaces. Note that you can change this format with the .I ItemFormat option of the .B MenuStyle command. If the menu-label contains an ampersand ('&'), the next character is taken as a hot-key for the menu item. Hot-keys are underlined in the label. To get a literal '&', insert "&&". Pressing the hot-key moves through the list of menu items with this hot-key or selects an item that is the only one with this hot-key. If the menu-label contains a sub-string which is set off by stars, then the text between the stars is expected to be the name of an xpm-icon or bitmap-file to insert in the menu. To get a literal \'*', insert "**". For example .EX + Calculator*xcalc.xpm* Exec exec xcalc .EE inserts a menu item labeled "Calculator" with a picture of a calculator above it. The following: .EX + *xcalc.xpm* Exec exec xcalc .EE Omits the "Calculator" label, but leaves the picture. If the menu-label contains a sub-string which is set off by percent signs, then the text between the percent signs is expected to be the name of an xpm-icon or bitmap-file (a so called mini icon to insert to the left of the menu label. A second mini icon that is drawn at the right side of the menu can be given in the same way. To get a literal '%', insert "%%". For example .EX + Calculator%xcalc.xpm% Exec exec xcalc .EE inserts a menu item labeled "Calculator" with a picture of a calculator to the left. The following: .EX + %xcalc.xpm% Exec exec xcalc .EE Omits the "Calculator" label, but leaves the picture. The pictures used with this feature should be small (perhaps 16x16). If the menu-name (not the label) contains a sub-string which is set off by at signs ('@'), then the text between them is expected to be the name of an xpm or bitmap file to draw along the left side of the menu (a side pixmap). You may want to use the .I SidePic option of the .B MenuStyle command instead. To get a literal '@', insert "@@". For example .EX AddToMenu StartMenu@linux-menu.xpm@ .EE creates a menu with a picture in its bottom left corner. If the menu-name also contains a sub-string surrounded by '^'s, then the text between '^'s is expected to be the name of an X11 color and the column containing the side picture is colored with that color. You can set this color for a menu style using the .I SideColor option of the .B MenuStyle command. To get a literal '^', insert "^^". Example: .EX AddToMenu StartMenu@linux-menu.xpm@^blue^ .EE creates a menu with a picture in its bottom left corner and colors with blue the region of the menu containing the picture. In all the above cases, the name of the resulting menu is name specified, stripped of the substrings between the various delimiters. .TP .BI "ChangeMenuStyle " "menustyle menu ..." Changes the menu style of .IR menu " to " menustyle . You may specified more than one menu in each call of .BR ChangeMenuStyle . .EX ChangeMenuStyle pixmap1 \\ ScreenSaverMenu ScreenLockMenu .EE .TP .BI "CopyMenuStyle " "orig-menustyle dest-menustyle" Copy .IR orig-menustyle " to " dest-menustyle , where .IR orig-menustyle is an existing menu style. If the menu style .IR dest_menustyle does not exist, then it is created. .TP .BI "DestroyMenu [" recreate "] " menu Deletes a menu, so that subsequent references to it are no longer valid. You can use this to change the contents of a menu during an fvwm session. The menu can be rebuilt using .BR AddToMenu . The optional parameter .I recreate tells fvwm not to throw away the menu completely but to throw away all the menu items (including the title). .EX DestroyMenu Utilities .EE .TP .BI "DestroyMenuStyle " menustyle Deletes the menu style named .I menustyle and changes all menus using this style to the default style, you cannot destroy the default menu style. .EX DestroyMenuStyle pixamp1 .EE .IP "\fBMenu\fP \fImenu-name\fP \ \fB[\fP \fIposition\fP \ \fB] [\fP \fIdouble-click-action\fP \ \fB]\fP" Causes a previously defined menu to be popped up in a sticky manner. That is, if the user invokes the menu with a click action instead of a drag action, the menu stays up. The command .I double-click-action is invoked if the user double-clicks a button (or hits the key rapidly twice if the menu is bound to a key) when bringing up the menu. If the double click action is not specified, double clicking on the menu does nothing. However, if the menu begins with a menu item (i.e. not with a title or a separator) and the double click action is not given, double clicking invokes the first item of the menu (but only if the pointer really was over the item). Several other commands affect menu operation. See .BR MenuStyle " and " SetAnimation . When in a menu, keyboard shortcuts work as expected. Cursor keystrokes are also allowed. Specifically, .SM Tab, .SM Meta-Tab, .SM Cursor-Down, .SM Ctrl-N, or .SM Ctrl-J move to the next item; .SM Shift-Tab, .SM Shift-Meta-Tab, .SM Cursor-Up, .SM Ctrl-P, or .SM Ctrl-K move to the prior item; .SM Cursor-Left or .SM Ctrl-B returns to the prior menu; .SM Cursor-Right or .SM Ctrl-F pop up the next menu; .SM Ctrl-Cursor-Up, .SM Shift-Ctrl-Meta-Tab and .SM Page-Up move up five items; .SM Ctrl-Cursor-Down, .SM Ctrl-Meta-Tab and .SM Page-Down move down five items, respectively; .SM Home, .SM Shift-Cursor-Up or .SM End, .SM Shift-Cursor-Down move to the first or last item, respectively; .SM Meta-Cursor-Up or .SM Meta-Cursor-Down move just behind the next or previous separator; .SM Shift-Ctrl-Tab or .SM Ctrl-Tab work exactly the same; .SM Enter, .SM Return, or .SM Space executes the current item; .SM Insert opens the "More..." sub-menu if any; .SM Escape and .SM Delete exit the current sequence of menus. The pointer is warped to where it was when the menu was invoked if it was both invoked and terminated with a keystroke. The .I position arguments allow placement of the menu somewhere on the screen, for example centered on the visible screen or above a title bar. Basically it works like this: you specify a .I context-rectangle and an offset to this rectangle by which the upper left corner of the menu is moved from the upper left corner of the rectangle. The .I position arguments consist of several parts: .EX .BI "[" context-rectangle "] " "x y" " [" special-options "]" .EE The .I context-rectangle can be one of: .in +.5i .BR Root .in +.3i the root window of the current screen. .in -.3i .BR XineramaRoot .in +.3i the root window of the whole Xinerama screen. Equivalent to "root" when Xinerama is not used. .in -.3i .BR Mouse .in +.3i a 1x1 rectangle at the mouse position. .in -.3i .BR Window .in +.3i the window with the focus. .in -.3i .BR Interior .in +.3i the inside of the focused window. .in -.3i .BR Title .in +.3i the title of the focused window or icon. .in -.3i .BR Button .in +.3i button #n of the focused window. .in -.3i .BR Icon .in +.3i the focused icon. .in -.3i .BR Menu .in +.3i the current menu. .in -.3i .BR Item .in +.3i the current menu item. .in -.3i .BR Context .in +.3i the current window, menu or icon. .in -.3i .BR This .in +.3i whatever widget the pointer is on (e.g. a corner of a window or the root window). .in -.3i .BI "Rectangle <" geometry ">" .in +.3i the rectangle defined by .RI < geometry > in X geometry format. Width and height default to 1 if omitted. .in -.3i .in -.5i If the context-rectangle is omitted or illegal (e.g. "item" on a window), "Mouse" is the default. Note that not all of these make sense under all circumstances (e.g. "Icon" if the pointer is on a menu). The offset values .I x and .I y specify how far the menu is moved from it's default position. By default, the numeric value given is interpreted as a percentage of the context rectangle's width (height), but with a trailing .RI ' m ' the menu's width (height) is used instead. Furthermore a trailing .RI ' p ' changes the interpretation to mean pixels. Instead of a single value you can use a list of values. All additional numbers after the first one are separated from their predecessor by their sign. Do not use any other separators. If .IR x " or " y are prefixed with "o" where is an integer, the menu and the rectangle are moved to overlap at the specified position before any other offsets are applied. The menu and the rectangle are placed so that the pixel at percent of the rectangle's width/height is right over the pixel at percent of the menu's width/height. So "o0" means that the top/left borders of the menu and the rectangle overlap, with "o100" it's the bottom/right borders and if you use "o50" they are centered upon each other (try it and you will see it is much simpler than this description). The default is "o0". The prefix "o" is an abbreviation for "+-m". A prefix of .RI ' c ' is equivalent to "o50". Examples: .EX # window list in the middle of the screen WindowList Root c c # menu to the left of a window Menu name window -100m c+0 # popup menu 8 pixels above the mouse pointer Popup name mouse c -100m-8p # somewhere on the screen Menu name rectangle 512x384+1+1 +0 +0 # centered vertically around a menu item AddToMenu foobar-menu + "first item" Nop + "special item" Popup "another menu" item \\ +100 c + "last item" Nop # above the first menu item AddToMenu foobar-menu + "first item" Popup "another menu" item \\ +0 -100m .EE Note that you can put a sub-menu far off the current menu so you could not reach it with the mouse without leaving the menu. If the pointer leaves the current menu in the general direction of the sub-menu the menu stays up. The .IR special-options : .in +.5i The .IR animated " and " Mwm " or " Win menu styles may move a menu somewhere else on the screen. If you do not want this you can add .I Fixed as an option. This might happen for example if you want the menu always in the top right corner of the screen. Where do you want a menu to appear when you click on it's menu item? The default is to place the title under the cursor, but if you want it where the position arguments say, use the .I SelectInPlace option. If you want the pointer on the title of the menu, use .I SelectWarp too. Note that these options apply only if the .IB "PopupAsRootMenu " MenuStyle option is used. The pointer is warped to the title of a sub-menu whenever the pointer would be on an item when the sub-menu is popped up .RI ( fvwm menu style) or never warped to the title at all .RI ( Mwm " or " Win menu styles). You can force (forbid) warping whenever the sub-menu is opened with the .IR WarpTitle " (" NoWarp ") option." Note that the .I special-options do work with a normal menu that has no other position arguments. .in -.5i .TP .BI "MenuStyle " "stylename options" Sets a new menu style or changes a previously defined style. The .I stylename is the style name; if it contains spaces or tabs it has to be quoted. The name "*" is reserved for the default menu style. The default menu style is used for every menu-like object (e.g. the window created by the .B WindowList command) that had not be assigned a style using the .BR ChangeMenuStyle . See also .BR DestroyMenuStyle . When using monochrome color options are ignored. .I options is a comma separated list containing some of the keywords Fvwm / Mwm / Win, BorderWidth, Foreground, Background, Greyed, HilightBack / HilightBackOff, ActiveFore / ActiveForeOff, MenuColorset, ActiveColorset, GreyedColorset, Hilight3DThick / Hilight3DThin / Hilight3DOff, Hilight3DThickness, Animation / AnimationOff, Font, MenuFace, PopupDelay, PopupOffset, TitleWarp / TitleWarpOff, TitleUnderlines0 / TitleUnderlines1 / TitleUnderlines2, SeparatorsLong / SeparatorsShort, TrianglesSolid / TrianglesRelief, PopupImmediately / PopupDelayed, PopdownImmediately / PopdownDelayed, DoubleClickTime, SidePic, SideColor, PopupAsRootMenu / PopupAsSubmenu, RemoveSubmenus / HoldSubmenus, SubmenusRight / SubmenusLeft, SelectOnRelease, ItemFormat, VerticalItemSpacing, VerticalTitleSpacing, AutomaticHotkeys / AutomaticHotkeysOff. In the above list some options are listed as option pairs or triples with a '/' in between. These options exclude each other. .IR Fvwm ", " Mwm ", " Win reset all options to the style with the same name in former versions of fvwm. The default for new menu styles is .I Fvwm style. These options override all others except .IR Foreground ", " Background ", " Greyed ", " HilightBack ", " .IR HilightFore " and " PopupDelay , so they should be used only as the first option specified for a menu style or to reset the style to defined behavior. The same effect can be created by setting all the other options one by one. .IR Mwm " and " Win style menus popup sub-menus automatically. .I Win menus indicate the current menu item by changing the background to dark. .I Fvwm sub-menus overlap the parent menu, .IR Mwm " and " Win style menus never overlap the parent menu. .I Fvwm style is equivalent to HilightBackOff, Hilight3DThin, ActiveForeOff, AnimationOff, Font, MenuFace, PopupOffset 0 67, TitleWarp, TitleUnderlines1, SeparatorsShort, TrianglesRelief, PopupDelayed, PopdownDelayed, PopupAsSubmenu, HoldSubmenus, SubmenusRight, BorderWidth 2, AutomaticHotkeysOff. .I Mwm style is equivalent to HilightBackOff, Hilight3DThick, ActiveForeOff, AnimationOff, Font, MenuFace, PopupOffset -3 100, TitleWarpOff, TitleUnderlines2, SeparatorsLong, TrianglesRelief, PopupImmediately, PopdownDelayed, PopupAsSubmenu, HoldSubmenus, SubmenusRight, BorderWidth 2, AutomaticHotkeysOff. .I Win style is equivalent to HilightBack, Hilight3DOff, ActiveForeOff, AnimationOff, Font, MenuFace, PopupOffset -5 100, TitleWarpOff, TitleUnderlines1, SeparatorsShort, TrianglesSolid, PopupImmediately, PopdownDelayed, PopupAsSubmenu, RemoveSubmenus, SubmenusRight, BorderWidth 2, AutomaticHotkeysOff. .I BorderWidth takes the thickness of the border around the menus in pixels. It may be zero to 50 pixels. The default is 2. Using an illegal value reverts the border width to the default. .IR Foreground " and " Background may have a color name as an argument. This color is used for menu text or the menu's background. You can omit the color name to reset these colors to the built in default. .I Greyed may have a color name as an argument. This color is the one used to draw a menu-selection which is prohibited (or not recommended) by the Mwm hints which an application has specified. If the color is omitted the color of greyed menu entries is based on the background color of the menu. .IR HilightBack " and " HilightBackOff switch hilighting the background of the selected menu item on and off. A specific background color may be used by providing the color name as an argument to .IR HilightBack . If you use this option without an argument the color is based on the menu's background color. .I ActiveFore " and " ActiveForeOff switch hilighting the foreground of the selected menu item on and off. A specific foreground color may be used by providing the color name as an argument to .IR ActiveFore . Omitting the color name has the same effect as using .IR ActiveForeOff . .I MenuColorset controls if a colorset is used instead of the .IR Foreground ", " Background " and " MenuFace menu styles. If the .I MenuColorset keyword is followed by a number equal to zero or greater, this number is taken as the number of the colorset to use. If the number is omitted, the colorset is switched off and the regular menu styles are used again. The foreground and background colors of the menu items are replaced by the colors from the colorset. If the colorset has a pixmap defined, this pixmap is used as the background of the menu. Note that the .I MenuFace menu style has been optimized for memory consumption and may use less memory than the background from a colorset. The shape mask from the colorset is used to shape the menu. Please refer to the description of the .B Colorset command and the documentation of the .B FvwmTheme module for details about colorsets. .I ActiveColorset works exactly like .IR MenuColorset , but the foreground from the colorset replaces the color given with the .I ActiveFore menu style and the colorset's background color replaces the color given with the .I HilightBack command (to turn on background hilighting you have to use the .I HilightBack menu style too). If specified, the hilight and shadow colors from the colorset are used too. The pixmap and shape mask from the colorset are not used. .I GreyedColorset works exactly like .IR MenuColorset , but the foreground from the colorset replaces the color given with the .I Greyed menu style. No other parts of the colorset are used. .IR Hilight3DThick ", " Hilight3DThin " and " Hilight3DOff determine if the selected menu item is hilighted with a 3D relief. Thick reliefs are two pixels wide, thin reliefs are one pixel wide. .I Hilight3DThickness takes one numeric argument that may be between -50 and +50 pixels. With negative values the menu item gets a pressed in look. The above three commands are equivalent to a thickness of 2, 1 and 0. .IR Animation " and " AnimationOff turn menu animation on or off. When animation is on, sub-menus that don't fit on the screen cause the parent menu to be shifted to the left so the sub-menu can be seen. .I Font takes a font name as an argument. If a font by this name exists it is used for the text of all menu items. If it does not exist or if the name is left blank the built in default is used. .I MenuFace enforces a fancy background upon the menus. You can use the same options for .I MenuFace as for the .BR ButtonStyle . See description of .B ButtonStyle command and the .B COLOR GRADIENTS sections for more information. If you use .I MenuFace without arguments the style is reverted back to normal. Some examples of MenuFaces are: .EX MenuFace DGradient 128 2 lightgrey 50 blue 50 \\ white MenuFace TiledPixmap texture10.xpm MenuFace HGradient 128 2 Red 40 Maroon 60 \\ White MenuFace Solid Maroon .EE Note: The gradient styles H, V, B and D are optimized for high speed and low memory consumption in menus. This is not the case for all the other gradient styles. They may be slow and consume huge amounts of memory, so if you encounter performance problems with them you may be better off by not using them. To improve performance you can try one or all of the following: Turn hilighting of the active menu item other than foreground color off: .EX MenuStyle