|
Hopefully, this page is exactly what you are looking for, but if not, you can always find further assistance on Unix/Linux Forum!
FVWM(1) FVWM 2.5.16 FVWM(1)
NAME
fvwm - F? Virtual Window Manager for X11
SYNOPSIS
fvwm [-c config-command] [-d displayname] [-f config-file] [-r] [-s
[screen_num]] [-V] [-C visual-class | -I visual-id] [-l colors [-L]
[-A] [-S] [-P]] [-D] [-h] [-i client-id] [-F state-file] [--debug-
stack-ring] [-blackout]
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, and the executable program is named fvwm. There is an fvwm
offspring called fvwm95, it is mostly a patched version of fvwm-2.0.43.
The main goal of fvwm95 was to supply a Windows 95 like look and feel.
Since then, fvwm has been greatly enhanced and practically all fvwm95
features can be achieved by fvwm.
Fvwm provides both, a large virtual desktop and multiple disjoint desk-
tops 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 desk-
tops allow you to pretend that you really have several screens to work
at, but each screen is completely unrelated to the others.
Fvwm provides 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 overcome the distinction between configuration commands
and action commands that most window managers make. Configuration com-
mands typically set fonts, colors, menu contents, key and mouse func-
tion bindings, while action commands do things like raise and lower
windows. Fvwm makes no such distinction, and allows anything to be
changed at any time.
Other noteworthy differences between fvwm and other X11 window managers
are the introduction of the SloppyFocus and NeverFocus focus methods.
Focus policy can be separately specified for different window groups.
Windows using SloppyFocus acquire focus when the pointer moves into
them and retain focus until some other window acquires it. Such win-
dows do not lose focus when the pointer moves into the root window.
The 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 pointer over a
NeverFocus decoration window does not deprive the terminal of focus.
OPTIONS
These are the command line options that are recognized by fvwm:
-i | --clientid
id This option is used when fvwm is started by a session man-
ager. Should not be used by a user.
-c | --cmd
config-command Causes fvwm to use config-command instead of
'Read config' (or 'Read .fvwm2rc') as its initialization
command. (Note that up to 10 -f and -c parameters can be given,
and they are executed in the order specified.)
Any module started by command line arguments is assumed to be a
module that sends back config commands. All command line mod-
ules have to quit before fvwm proceeds on to the StartFunction
and setting border decorations and styles. There is a potential
deadlock if you start a module other than FvwmCpp/FvwmM4/Fvwm-
Perl but there is a timeout so fvwm will eventually get going.
As an example, starting the pager this way hangs fvwm until the
timeout, but the following should work well:
fvwm -c "AddToFunc StartFunction I Module FvwmPager"
-d | --display
displayname Manage the display called displayname instead of the
name obtained from the environment variable $DISPLAY.
-D | --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.
-f config-file
Causes fvwm to read config-file instead of ~/.fvwm/config as its
initialization file. This is equivalent to -c 'Read config-
file'.
-h | --help
A short usage description is printed.
-r | --replace
Try to take over from a previously running wm. This does not
work unless the other wm is ICCCM 2.0 compliant.
-F | --restore
state-file This option is used when fvwm is started by a session
manager. Should not be used by a user.
-s | --single-screen
[screen_num] On a multi-screen display, run fvwm only on the
screen named in the $DISPLAY environment variable or provided
through the -d option. The optional argument screen_num should
be positive or null and override the screen number. Normally,
fvwm attempts to start up on all screens of a multi-screen dis-
play.
-V | --version
Prints the version of fvwm to stderr. Also prints an informa-
tion about the compiled in support for readline, rplay, stroke,
xpm, png, gnome hints, EWMH hints, session management, bidirec-
tional text, multibyte characters, xinerama and Xft aa font ren-
dering.
-C | --visual
visual-class Causes fvwm to use visual-class for the window bor-
ders and menus. visual-class can be "StaticGray", "GrayScale",
"StaticColor", "PseudoColor", "TrueColor" or "DirectColor".
-I | --visualid
id Causes fvwm to use id as the visual id for the window borders
and menus. id can be specified as N for decimal or 0xN for hex-
adecimal. See man page of xdpyinfo for a list of supported visu-
als.
-l | --color-limit
limit Specifies a limit on the colors used in image, gradient
and possibly simple colors used by fvwm. In fact, fvwm (and all
the modules) uses a palette with at most limit colors. This
option is only useful with screens that display 256 colors (or
less) with a dynamic visual (PseudoColor, GrayScale or Direct-
Color). The default depends on your X server and how you run
fvwm. In most case this default is reasonable. The -l option
should be used only if you encounter problems with colors. By
default, fvwm tries to detect "large" pre-allocated palettes. If
such a palette is detected fvwm uses it and a priori the -l must
not be used. Moreover, in this case the -A and -S options are
forced. Note that XFree-4.2 pre-allocate 244 colors (if you use
a driver with Render support) leaving only a few free colors.
This may leads to some colors problems (and nothing can be
done). XFree-4.3 or better pre-allocate only 85 colors. If no
pre-allocated palette is auto detected the defaults are as fol-
low:
| depth 8 (256 colors)| depth 4 (16 colors)
------------|---------------------|--------------------
PseudoColor | 68 (4 cc + 4 grey) | 10 (2 cc + 2 grey)
------------|---------------------|--------------------
GrayScale | 64 regular grey | 8 regular grey
----------- |---------------------|--------------------
DirectColor | 32 (3 cc + 5 grey) | 10 (2 cc + 2 grey)
------------|------------------------------------------
where "I cc" means a "IxIxI color cube"
These defaults may change before version 2.6. Note that if you
use a private color map (i.e., fvwm is started with the -C or
the -I options), then others defaults are used.
Now what to do if you encounter problems with colors? The first
thing to do is to check if you really cannot run your X server
with depth 15, 16 or better. Check your X server documentation.
Note that some hardware can support two different depths on the
same screen (typically depth 8 and depth 24). If depth 8 is the
default, you can force fvwm to use the best depth by using the C
option with TrueColor as argument. So now we assume that you
are forced to run in depth 8 with a dynamic visual because your
hardware/driver cannot do better or because you need to use an
application which needs to run under this mode (e.g., because
this application needs read-write colors). What it should be
understand is that you have only 256 colors and that all the
applications which uses the default color map must share these
colors. The main problem is that there are applications which
use a lot or even all the colors. If you use such application
you will have no more free colors and some applications (which
used only a few colors) may fail to start or are unusable. There
are three things that can be done (and fvwm does not really play
a particular role, all applications are concerned). The first is
to run the applications which waste your (default) color map
with a private color map. For example, run netscape with the
-install option, run KDE/QT applications with the --cmap option,
use the -C option for fvwm. The disadvantage of this method is
that it is visually disturbing (see the ColormapFocus command
for a better control of the color maps switching). The second
method is to limit the number of colors that the applications
used. Again, some applications have options to specify a given
color limit. With fvwm you may try various values, 61 (a special
"visual" palette), 56 (a 4x4x3 color cubes plus 6 grey), 29 (a
3x3x3 color cube plus 2 grey), 10 or 9. Also, you may use the -L
option. However, limiting the number of colors is not the
definitive solution. The definitive solution is to try cause
applications which use a lot of colors use the same colors. This
is a difficult task as there are no formal standards for this
goal. However, some toolkits as QT and GTK use color cubes as
palettes. So, the idea is to configure your applications/toolk-
its to all use the same color cube. Moreover, you can use the
colors in this color cube in your X resources configuration
files and/or as arguments to colors options. Fvwm can use any
color cube of the form RxGxB with 2 <= R <= 6, R = G, R-1 =< B
<= R and B >= 2. To get an RxGxB color cube give an argument to
-l an integer c >= R*G*B and < (R+1)*(G+1)*B if B=R and <
R*G*(B+1) if B < R (and different from 61). If c > R*G*B, then
some grey may be added to the color cube. You can use the Print-
Info Colors [1] command to get information on your fvwm colors
setting. In particular, this command prints the palette used by
fvwm in rgb format (the last integer gives the number of times
fvwm has allocated the colors).
-L | --strict-color-limit
If the screens display 256 colors (or less) and has a dynamic
visual, causes fvwm to use its palette for all the colors. By
default, the palette is used only for images and gradients.
-P | --visual-palette
If the screen displays 256 colors (or less) and has a dynamic
visual, this option causes fvwm to use a palette designed for
limiting the "visual" color distance between the points of the
palette. Moreover, for better color sharing, if possible colors
with a name in the X rgb data base are used for defining the
colors (with the hope that applications and images will prefer
to use named colors). If the -l option is not used this palette
has 61 colors. This palette is also automatically selected if
61 or 9 is used as argument to the -l option.
-A | --allocate-palette
If the screen displays 256 colors (or less) and has a dynamic
visual this option causes fvwm to allocate all the colors of its
palette at start up for reserving these colors for future use.
This option forces the .B -static-palette option. By default,
fvwm allocates (reserves) a color in its palette only if it
needs this color.
-S | --static-palette
If the screen displays 256 colors (or less) and has a dynamic
visual this option causes fvwm to never free the colors in its
palette. By default, when fvwm does not need a color any more it
frees this color so that a new color can be used. This option
may speed up image loading and save a few bits of memory.
-blackout
This option is provided for backward compatibility only. Black-
ing out the screen during startup is not necessary anymore.
--debug-stack-ring
Enables stack ring debugging. This option is only intended for
internal debugging and should only be used by developers.
ANATOMY OF A WINDOW
Fvwm puts a decorative border around most windows. This border con-
sists of a bar on each side and a small L-shaped section on each cor-
ner. There is an additional top bar called the title-bar which is used
to display the name of the window. In addition, there are up to 10
title-bar buttons. The top, side, and bottom bars are collectively
known as the side-bars. The corner pieces are called the frame.
With the built-in minimal configuration, dragging mouse button 1 in the
frame or side-bars begins a resize operation on the window. Dragging
mouse button 2 in the frame or side-bars begins a move operation.
There are raise/lower operations bound to a single clicking on borders.
Similarly for the window title.
Up to ten title-bar buttons may exist. Their use is completely user
definable. One popular configuration uses one button on the left that
is used to bring up a list of window options and two buttons on the
right used to iconify and maximize the window. Another popular config-
uration adds a close button to the right. The number of title-bar but-
tons used depends on which ones have mouse actions bound to them. See
the section on the Mouse command below.
THE VIRTUAL DESKTOP
Fvwm provides multiple virtual desktops for users who wish to use them.
The screen is a viewport onto a desktop which may be larger than the
screen. Several distinct desktops can be accessed (concept: one desk-
top for each project, or one desktop for each application, when view
applications are distinct). Since each desktop can be larger than the
physical screen, divided into m by n pages which are each the size of
the physical screen, windows which are larger than the screen or large
groups of related windows can easily be viewed.
The (m by n) size (i.e. number of pages) of the virtual desktops can be
changed any time, by using the DeskTopSize command. All virtual desk-
tops must be (are) the same size. The total number of distinct desk-
tops does not need to be specified, but is limited to approximately 4
billion total. All windows on a range of desktops can be viewed in the
FvwmPager, a miniature view of the desktops. The pager is an accessory
program, called a module, which is not essential for the window manager
to operate. Windows may also be listed, along with their geometries,
in a window list, accessible as a pop-up menu, or as a separate window,
called the 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 Layer command. The con-
cept of layers is a generalization of the StaysOnTop flag of older fvwm
versions. The StaysOnTop and StaysPut Style options are now implemented
by putting the windows in suitable layers and the previously missing
StaysOnBottom Style option has been added.
Sticky windows are windows which transcend the virtual desktop by
"Sticking to the screen's glass". They always stay put on the screen.
This is convenient for things like clocks and 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:
xterm -geometry +0+0
creates a window in the upper left hand corner of the visible portion
of the screen. It is permissible to specify geometries which place
windows on the virtual desktop, but off the screen. For example, if
the visible screen is 1000 by 1000 pixels, and the desktop size is 3x3,
and the current viewport is at the upper left hand corner of the desk-
top, invoking:
xterm -geometry +1000+1000
places a window just off of the lower right hand corner of the screen.
It can be found by moving the mouse to the lower right hand corner of
the screen and waiting for it to scroll into view. A geometry speci-
fied as something like:
xterm -geometry -5-5
places the window's lower right hand corner 5 pixels from the lower
right corner of the visible portion of the screen. Not all applica-
tions 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 rela-
tive to the current viewport: the window may not consistently appear on
a specific page, unless you always invoke the application from the same
page.
A better way to place windows on a different page, screen or desk from
the currently mapped viewport is to use the StartsOnPage or StartsOn-
Screen style specification (the successors to the older StartsOnDesk
style) in your config file. The placement is consistent: it does not
depend on your current location on the virtual desktop.
Some applications that understand standard Xt command line arguments
and X resources, like xterm and xfontsel, allow the user to specify the
start-up desk or page on the command line:
xterm -xrm "*Desk:1"
starts an xterm on desk number 1;
xterm -xrm "*Page:3 2 1"
starts an xterm two pages to the right and one down from the upper left
hand page of desk number 3. Not all applications understand the use of
these options, however. You could achieve the same results with the
following lines in your .Xdefaults file:
XTerm*Desk: 1
or
XTerm*Page: 3 2 1
USE ON MULTI-SCREEN DISPLAYS
If the -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
EdgeScroll 0 0
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.
XINERAMA SUPPORT
Fvwm supports the Xinerama extension of newer X servers which is simi-
lar to multi head support (multiple screens) but allows for move win-
dows 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 EdgeResistance command allows for specifying
an explicit resistance value for moving windows over the screen edge
between two Xinerama screens. Xinerama support can be enabled or dis-
abled on the fly or from the configuration file with the Xinerama com-
mand. 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 for specifying 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.
Style * IconBox 64x300-0-0@p
Xinerama support can be configured to use a primary screen. Fvwm can
be configured to place new windows and icons on this screen. The pri-
mary screen is screen 0 by default but can be changed with the Xin-
eramaPrimaryScreen command.
Xinerama support was designed to work out of the box with the same con-
figuration file that would work on a single screen. It may not per-
forrm very well if the involved screens use different screen resolu-
tions. In this situation, windows may get stuck in the portion of the
whole desktop that belongs to neither screen. When this happens, the
windows or icons can be retrieved with the command
All MoveToScreen
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 XineramaSls, XineramaSlsSize and Xin-
eramaSlsScreens are used to configure this feature.
INITIALIZATION
During initialization, fvwm searches for a configuration file which
describes key and button bindings, and many other things. The format of
these files is described later. Fvwm first searches for configuration
files using the command
Read config
This looks for file config in $FVWM_USERDIR and $FVWM_DATADIR directo-
ries, as described in Read below. If this fails more files are queried
for backward compatibility. Here is the complete list of all file
locations queried in the default installation (only the first found
file is used):
$HOME/.fvwm/config
/usr/local/share/fvwm/config
$HOME/.fvwm/.fvwm2rc
$HOME/.fvwm2rc
/usr/local/share/fvwm/.fvwm2rc
/usr/local/share/fvwm/system.fvwm2rc
/etc/system.fvwm2rc
Please note, the last 5 locations are not guarranteed to be supported
in the future.
If a configuration file is not found, the left mouse button, or Help or
F1 keys on the root window bring up menus and forms that can create a
starting configuration file.
Fvwm sets two environment variables which are inherited by its chil-
dren. These are $DISPLAY which describes the display on which fvwm is
running. $DISPLAY may be unix:0.0 or :0.0, which doesn't work too well
when passed through rsh to another machine, so $HOSTDISPLAY is set to a
network-ready description of the display. $HOSTDISPLAY always uses the
TCP/IP transport protocol (even for a local connection) so $DISPLAY
should be used for local connections, as it may use Unix-domain sock-
ets, which are faster.
If you want to start some applications or modules with fvwm, you can
simply put
Exec app
or
Module FvwmXxx
into your config, but it is not recommended; do this only if you know
what you are doing. It is usually critical to start applications or
modules after the entire config is read, because it contains styles or
module configurations which can affect window appearance and function-
ality.
The standard way to start applications or modules on fvwm's start up is
to add them to an initialization function (usually StartFunction or
InitFunction). This way they are only started after fvwm finishes to
read and execute config file.
Fvwm has three special functions for initialization: StartFunction,
which is executed on startups and restarts; InitFunction and Restart-
Function, which are executed during initialization and restarts
(respectively) just after StartFunction. These functions may be cus-
tomized in a user's config file using the AddToFunc command (described
later) to start up modules, xterms, or whatever you'd like to have
started by fvwm.
Fvwm has also a special exit function: ExitFunction, executed when
exiting or restarting before actually quitting. It could be used to
explicitly kill modules, etc.
If fvwm is run under a session manager, functions SessionInitFunction
and SessionRestartFunction are executed instead of InitFunction and
RestartFunction. This helps to define the user's config file to be
good for both running under a session manager and without it. Gener-
ally it is a bad idea to start xterms or other applications in "Ses-
sion*" functions. Also someone can decide to start different modules
while running under a session manager or not. For the similar purposes
SessionExitFunction is used instead of ExitFunction.
DestroyFunc StartFunction
AddToFunc StartFunction
+ I Module FvwmPager * *
+ I Module FvwmButtons
DestroyFunc InitFunction
AddToFunc InitFunction
+ I Module FvwmBanner
+ I Module 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
You don't need to define all special functions if some are empty. Also
note, all these special functions may be emulated now using StartFunc-
tion and ExitFunction, like this:
DestroyFunc StartFunction
AddToFunc StartFunction
+ I Test (Init) Module FvwmBanner
+ I Module FvwmPager * *
+ I Test (Restart) Beep
DestroyFunc ExitFunction
AddToFunc ExitFunction
+ I Test (Quit) Echo Bye-bye
+ I KillModule MyBuggyModule
+ I Test (ToRestart) Beep
COMPILATION OPTIONS
Fvwm has a number of compile-time options. If you have trouble using a
certain command or feature, check to see if support for it was included
at compile time. Optional features are described in the config.h file
that is generated during compilation.
ICONS AND IMAGES
Fvwm can load .xbm, .xpm, and .png images. XBM images are monochrome.
Fvwm can always display XBM files. XPM and PNG formats are color
images. Compile-time options determine whether fvwm can display XPM or
PNG icons and images. See the INSTALL.fvwm file for more information.
The related SHAPE compile-time option can make fvwm display spiffy
shaped icons.
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 Module command. Modules can exist for the duration of the X
session, or can perform a single task and exit. If the module is still
active when fvwm is told to quit, then fvwm closes the communication
pipes and waits to receive a SIGCHLD from the module, indicating that
it has detected the pipe closure and has exited. If modules fail to
detect the pipe closure fvwm exits after approximately 30 seconds any-
way. The number of simultaneously executing modules is limited by the
operating system's maximum number of simultaneously open files, usually
between 60 and 256.
Modules simply transmit commands to the fvwm command engine. Commands
are formatted just as in the case of a mouse binding in the config
setup file. Certain auxiliary information is also transmitted, as in
the sample module FvwmButtons. The FvwmButtons module is documented in
its own man page.
Please refer to the MODULE COMMANDS section for details.
ICCCM COMPLIANCE
Fvwm attempts to be ICCCM 2.0 compliant. In addition, ICCCM states
that it should be possible for applications to receive any keystroke,
which is not consistent with the keyboard shortcut approach used in
fvwm and most other window managers. In particular you cannot have the
same keyboard shortcuts working with your fvwm and another fvwm running
within Xnest (a nested X server running in a window). The same problem
exists with mouse bindings.
The ICCCM states that windows possessing the property
WM_HINTS(WM_HINTS):
Client accepts input or input focus: False
should not be given the keyboard input focus by the window manager.
These windows can take the input focus by themselves, however. A num-
ber of applications set this property, and yet expect the window man-
ager to give them the keyboard focus anyway, so fvwm provides a window
style, Lenience, which allows fvwm to overlook this ICCCM rule. Even
with this window style it is not guaranteed that the application
accepts focus.
The differences between ICCCM 1.1 and 2.0 include the ability to take
over from a running ICCCM 2.0 compliant window manager; thus
fvwm; vi ~/.fvwm/config; fvwm -replace
resembles the Restart command. It is not exactly the same, since
killing the previously running wm may terminate your X session, if the
wm was started as the last client in your .Xclients or .Xsession file.
Further additions are support for client-side colormap installation
(see the .SM ICCCM for details) and the urgency hint. Clients can set
this hint in the WM_HINTS property of their window and expect the win-
dow manager to attract the users attention to the window. Fvwm has two
re-definable functions for this purpose, "UrgencyFunc" and "Urgency-
DoneFunc", which are executed when the flag is set/cleared. Their
default definitions are:
AddToFunc UrgencyFunc
+ I Iconify off
+ I FlipFocus
+ I Raise
+ I WarpToWindow 5p 5p
AddToFunc UrgencyDoneFunc
+ I Nop
GNOME COMPLIANCE
Fvwm attempts to be GNOME (version 1) compliant. Check
http://www.gnome.org for what that may mean. To disable GNOME hints for
some or all windows, the GNOMEIgnoreHints style can be used.
EXTENDED WINDOW MANAGER HINTS
Fvwm attempts to respect the extended window manager hints (ewmh or
EWMH for short) specification: http://www.freedesktop.org/standards/wm-
spec.html and some extensions of this specification. This allows fvwm
to work with KDE version >= 2, GNOME version 2 and other applications
which respect this specification (any application based on GTK+ version
2). Applications which respect this specification are called ewmh com-
pliant applications.
This support is configurable with styles and commands. These styles
and commands have EWMH as the prefix (so you can find them easily in
this man page).
There is a new Context 'D' for the Key, PointerKey, Mouse and Stroke
commands. This context is for desktop applications (such as kdesktop
and Nautilus desktop).
When a compliant taskbar asks fvwm to activate a window (typically when
you click on a button which represents a window in such a taskbar),
then fvwm calls the complex function EWMHActivateWindowFunc which by
default is Iconify Off, Focus and Raise. You can redefine this func-
tion. For example:
DestroyFunc EWMHActivateWindowFunc
AddToFunc EWMHActivateWindowFunc I Iconify Off
+ I Focus
+ I Raise
+ I WarpToWindow 50 50
additionally warps the pointer to the center of the window.
The EWMH specification introduces the notion of Working Area. Without
ewmh support the Working Area is the full visible screen (or all your
screens if you have a multi head setup and you use Xinerama). However,
compliant applications (such as a panel) can ask to reserve space at
the edge of the screen. If this is the case, the Working Area is your
full visible screen minus these reserved spaces. If a panel can be hid-
den by clicking on a button the Working Area does not change (as you
can unhide the panel at any time), but the Dynamic Working Area is
updated: the space reserved by the panel is removed (and added again if
you pop up the panel). The Dynamic Working Area may be used when fvwm
places or maximizes a window. To know if an application reserves space
you can type "xprop | grep _NET_WM_STRUT" in a terminal and select the
application. If four numbers appear then these numbers define the
reserved space as explained in the EwmhBaseStruts command.
MWM COMPATIBILITY
Fvwm provides options to emulate Motif Window Manager (Mwm) as well as
possible. Please refer to the Emulate command as well as to the Mwm
specific options of the Style and MenuStyle commands for details.
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 config:
Style * OLDecor
Most (perhaps all) Open Look applications have a strange notion of key-
board 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):
Style <application name> NeverFocus, NoLenience
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:
Style <application name> MouseFocus, Lenience
Style <application name> SloppyFocus, Lenience
Style <application name> ClickToFocus, Lenience
M4 PREPROCESSING
M4 pre-processing is handled by a module in fvwm. To get more details,
try man FvwmM4. In short, if you want fvwm to parse your files with
m4, then replace the command Read with FvwmM4 in your ~/.fvwm/config
file (if it appears at all), and start fvwm with the command
fvwm -cmd "FvwmM4 config"
CPP PREPROCESSING
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".
AUTO-RAISE
Windows can be automatically raised when it receives focus, or some
number of milliseconds after it receives focus, by using the auto-raise
module, FvwmAuto.
CONFIGURATION FILES
The configuration file is used to describe mouse and button bindings,
colors, the virtual display size, and related items. The initializa-
tion configuration file is typically called config (or .fvwm2rc). By
using the Read command, it is easy to read in new configuration files
as you go.
Lines beginning with '#' are ignored by fvwm. Lines starting with ´*'
are expected to contain module configuration commands (rather than con-
figuration commands for fvwm itself). Like in shell scripts embedded
newlines in a configuration file line can be quoted by preceding them
with a backslash. All lines linked in this fashion are treated as a
single line. The newline itself is ignored.
Fvwm makes no distinction between configuration commands and action
commands, so anything mentioned in the fvwm commands section can be
placed on a line by itself for fvwm to execute as it reads the configu-
ration file, or it can be placed as an executable command in a menu or
bound to a mouse button or a keyboard key. It is left as an exercise
for the user to decide which function make sense for initialization and
which ones make sense for run-time.
SUPPLIED CONFIGURATION
A sample configuration file, system.fvwm2rc, is supplied with the fvwm
distribution. It is well commented and can be used as a source of
examples for fvwm configuration. It may be copied to
/usr/local/share/fvwm/config file.
Alternativelly, the built-in menu (accessible when no configuration
file is found) has options to create an initial config file for the
user.
If you are new to fvwm, try fvwm-themes package demonstrating the pow-
erful fvwm functionality.
FONT NAMES AND FONT LOADING
The fonts used for the text of a window title, icon titles, menus and
geometry window can be specified by using the Font and IconFont Style,
the Font MenuStyle and the DefaultFont command. Also, all the Modules
which use text have configuration command(s) to specify font(s). All
these styles and commands take a font name as an argument. This section
explains what is a font name for fvwm and which fonts fvwm loads.
First, you can use what we can call a usual font name, for example,
-adobe-courier-bold-r-normal--10-100-75-75-m-60-ISO8859-1
-adobe-courier-bold-r-normal--10-*
-*-fixed-medium-o-normal--14-*-ISO8859-15
That is, you can use an X Logical Font Description (XLFD for short).
Then the "first" font which matches the description is loaded and used.
This "first" font depends of your font path and also of your locale.
Fonts which match the locale charset are loaded in priority order. For
example with
-adobe-courier-bold-r-normal--10-*
if the locale charset is ISO8859-1, then fvwm tries to load a font
which matches
-adobe-courier-bold-r-normal--10-*-ISO8859-1
with the locale charset ISO8859-15 fvwm tries to load
-adobe-courier-bold-r-normal--10-*-ISO8859-15.
A font name can be given as an extended XLFD. This is a comma separated
list of (simple) XLFD font names, for example:
-adobe-courier-bold-r-normal--14-*,-*-courier-medium-r-normal--14-*
Each simple font name is tried until a matching font with the locale
charset is found and if this fails each simple font name is tried with-
out constraint on the charset.
More details on the XLFD can be found in the X manual page, the X Logi-
cal Font Description Conventions document (called xlfd) and the XLoad-
Font and XCreateFontSet manual pages. Some useful font utilities are:
xlsfonts, xfontsel, xfd and xset.
If you have Xft support you can specify an Xft font name (description)
of a true type (or Type1) font prefixed by "xft:", for example:
"xft:Luxi Mono"
"xft:Luxi Mono:Medium:Roman:size=14:encoding=iso8859-1"
The "first" font which matches the description is loaded. This first
font depends on the XftConfig configuration file with Xft1 and on the
/etc/fonts/fonts.conf file with Xft2. One may read the Xft manual page
and the fontconfig man page with Xft2. The first string which follows
"xft:" is always considered as the family. With the second example Luxi
Mono is the Family (Other XFree TTF families: "Luxi Serif", "Luxi
Sans"), Medium is the Weight (other possible weights: Light, DemiBold,
Bold, Black), Roman is the slant or the style (other possibility: Regu-
lar, Oblique, Italic) size specifies the point size (for a pixel size
use pixelsize=), encoding allows for enforce a charset (iso8859-1 or
iso10646-1 only; if no encoding is given the locale charset is
assumed). An important parameter is "minspace=bool" where bool is True
or False. If bool is False (the default?) Xft gives a greater font
height to fvwm than if bool is True. This may modify text placement,
icon and window title height, line spacing in menus and FvwmIdent, but-
ton height in some fvwm modules ...etc. With a LCD monitor you may try
to add "rgba=mode" where mode is either rgb, bgr, vrgb or vbgr to
enable subpixel rendering. The best mode depends on the way your LCD
cells are arranged. You can pass other specifications in between ":",
as "foundry=foundry_name", "spacing=type" where type can be monospace,
proportional or charcell, "charwidth=integer", "charheight=integer" or
"antialias=bool" where bool is True or False. It seems that these
parameters are not always taken in account. To determine which Xft
fonts are really loaded you can export XFT_DEBUG=1 before starting fvwm
and take a look to the error log. With Xft2 you may use fc-list to list
the available fonts. Anyway, Xft support is experimental (from the X
and the fvwm point of view) and the quality of the rendering depends on
number of parameters (the XFree and the freetype versions and your
video card(s)).
After an Xft font name you can add after a ";" an XLFD font name (sim-
ple or extended) as:
xft:Verdana:pixelsize=14;-adobe-courier-bold-r-normal--14-*
then, if either loading the Xft font fails or fvwm has no Xft support,
fvwm loads the font "-adobe-courier-bold-r-normal--14-*". This allows
for writing portable configuration files.
FONT AND STRING ENCODING
Once a font is loaded, fvwm finds its encoding (or charset) using its
name (the last two fields of the name). fvwm assumes that the strings
which are displayed with this font use this encoding (an exception is
that if an iso10646-1 font is loaded, then UTF-8 is assumed for string
encoding). In a normal situation, (i) a font is loaded by giving a
font name without specifying the encoding, (ii) the encoding of the
loaded font is the locale encoding, and then (iii) the strings in the
fvwm configuration files should use the locale encoding as well as the
window and icon name. With Xft the situation is bit different as Xft
supports only iso10646-1 and iso8859-1. If you do not specify one of
these encodings in the Xft font name, then fvwm does strings conversion
using (iii). Note that with multibyte fonts (and in particular with
"CJK" fonts) for good text rendering, the locale encoding should be the
charset of the font.
To override the previous rules, it is possible to specify the string
encoding in the beginning of a font description as follow:
StringEncoding=enc:_full_font_name_
where enc is an encoding supported by fvwm (usually font name charset
plus some unicode encodings: UTF-8, USC-2, USC-4 and UTF-16).
For example, you may use an iso8859-1 locale charset and have an Fvwm-
Form in Russian using koi8-r encoding. In this case, you just have to
ask FvwmForm to load a koi8-r font by specifying the encoding in the
font name. With a multibyte language, (as multibyte font works well
only if the locale encoding is the charset of the font), you should use
an iso10646-1 font:
StringEncoding=jisx0208.1983-0:-*-fixed-medium-r-*-ja-*-iso10646-1
or
"StringEncoding=jisx0208.1983-0:xft:Bitstream Cyberbit"
if your FvwmForm configuration uses jisx0208.1983-0 encoding. Another
possibility is to use UTF-8 encoding for your FvwmForm configuration
and use an iso10646-1 font:
-*-fixed-medium-r-*-ja-*-iso10646-1
or
"StringEncoding=UTF-8:xft:Bitstream Cyberbit"
or equivalently
"xft:Bitstream Cyberbit:encoding=iso10646-1"
In general iso10646-1 fonts together with UTF-8 string encoding allows
the display of any characters in a given menu, FvwmForm
More and more, unicode is used and text files use UTF-8 encoding. How-
ever, in practice the characters used range over your locale charset
(this is the case when you generate a menu with fvwm-menu-desktop with
recent versions of KDE and GNOME). For saving memory (an iso10646-1
font may have a very large number of characters) or because you have a
pretty font without an iso10646-1 charset, you can specify the string
encoding to be UTF-8 and use a font in the locale charset:
StringEncoding=UTF-8:-*-pretty_font-*-12-*
In most cases, fvwm correctly determines the encoding of the font. How-
ever, some fonts don't end with valid encoding names. When the font
name isn't normal, for example:
-misc-fixed-*--20-*-my_utf8-36
you need to add the encoding after the font name using a slash as a
delimiter. For example:
MenuStyle * Font -misc-fixed-*--20-*-my_utf8-36/iso10646-1
If fvwm finds an encoding, fvwm uses the iconv system functions to do
conversion between encodings. Unfortunately, there are no standards.
For conversion between iso8859-1 and UTF-8: a GNU system uses
"ISO-8859-1" and other systems use "iso881" to define the converters
(these two names are supported by fvwm). Moreover, in some cases it may
be necessary to use machine specific converters. So, if you experience
problems you can try to get information on your iconv implementation
("man iconv" may help) and put the name which defines the converter
between the font encoding and UTF-8 at the end of the font name after
the encoding hint and a / (another possible solution is to use GNU
libiconv). For example use:
Style * Font -misc-fixed-*--14-*-iso8859-1/*/latin1
to use latin1 for defining the converter for the iso8859-1 encoding.
The "*" in between the "/" says to fvwm to determine the encoding from
the end of the font name. Use:
Style * Font -misc-fixed-*--14-*-local8859-6/iso8859-6/local_iso8859_6_iconv
to force fvwm to use the font with iso8859-6 as the encoding (this is
useful for bi-directionality) and to use local_iso8859_6_iconv for
defining the converters.
FONT SHADOW EFFECTS
Fonts can be given 3d effects. At the beginning of the font name (or
just after a possible StringEncoding specification) add
Shadow=size [offset] [directions]:
size is a positive integer which specifies the number of pixels of
shadow. offset is an optional positive integer which defines the num-
ber of pixels to offset the shadow from the edge of the character. The
default offset is zero. directions is an optional set of directions
the shadow emanates from the character. The directions are a space
separated list of fvwm directions:
N, North, Top, t, Up, u, -
E, East, Right, r, Right, r, ]
S, South, Bottom, b, Down, d, _
W, West, Left, l, Left, l, [
NE, NorthEast, TopRight, tr, UpRight, ur, ^
SE, SouthEast, BottomRight, br, DownRight, dr, >
SW, SouthWest, BottomLeft, bl, DownLeft, dl, v
NW, NorthWest, TopLeft, tl, UpLeft, ul, <
C, Center, Centre, .
A shadow is displayed in each given direction. All is equivalent to
all the directions. The default direction is BottomRight. With the
Center direction, the shadow surrounds the whole string. Since this is
a super set of all other directions, it is a waste of time to specify
this along with any other directions.
The shadow effect only works with colorsets. The color of the shadow
is defined by using the fgsh option of the Colorset command. Please
refer to the COLORSETS section for details about colorsets.
Note: It can be difficult to find the font, fg, fgsh and bg colors to
make this effect look good, but it can look quite good.
BI-DIRECTIONAL TEXT
Arabic and Hebrew text require bi-directional text support to be dis-
played correctly, this means that logical strings should be converted
before their visual presentation, so left-to-right and right-to-left
sub-strings are determined and reshuffled. In fvwm this is done auto-
matically in window titles, menus, module labels and other places if
the fonts used for displaying the text are of one of the charsets that
require bidi (bi-directional) support. For example, this includes
iso8859-6, iso8859-8 and iso10646-1 (unicode), but not other iso8859-*
fonts.
This bi-directional text support is done using the fribidi library com-
pile time option, see INSTALL.fvwm.
KEYBOARD SHORTCUTS
Almost all window manager operations can be performed from the keyboard
so mouse-less operation should be possible. In addition to scrolling
around the virtual desktop by binding the Scroll command to appropriate
keys, Popup, Move, Resize, and any other command can be bound to keys.
Once a command is started the pointer is moved by using the up, down,
left, and right arrows, and the action is terminated by pressing
return. Holding down the Shift key causes the pointer movement to go
in larger steps and holding down the control key causes the pointer
movement to go in smaller steps. Standard emacs and vi cursor movement
controls ( n, p, f, b, and j, k, h, l ) can be used instead of the
arrow keys.
SESSION MANAGEMENT
Fvwm supports session management according to the X Session Management
Protocol. It saves and restores window position, size, stacking order,
desk, stickiness, shadedness, maximizedness, iconifiedness for all win-
dows. 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 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 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 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 man-
ager anyway. If it is really needed,
Exec exec killall fvwm
still kills all copies of fvwm. Your system must have the killall com-
mand though.
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 dis-
abled if it is currently enabled and vice versa.
CONDITIONAL COMMANDS AND RETURN CODES
Fvwm recognizes a number of commands that are executed only if certain
conditions are met. For a complete description, please refer to the
section CONDITIONAL COMMANDS below.
BUILT-IN KEY AND MOUSE BINDINGS
The following commands are built-in to fvwm:
Key Help R A Popup MenuFvwmRoot
Key F1 R A Popup MenuFvwmRoot
Key Tab A M WindowList Root c c NoDeskSort
Key Escape A MC EscapeFunc
Mouse 1 R A Menu MenuFvwmRoot
Mouse 1 T A FuncFvwmRaiseLowerX Move
Mouse 1 FS A FuncFvwmRaiseLowerX Resize
Mouse 2 FST A FuncFvwmRaiseLowerX Move
AddToFunc FuncFvwmRaiseLowerX
+ I Raise
+ M $0
+ D Lower
The Help and F1 keys invoke a built-in menu that fvwm creates. This is
primarily for new users that have not created their own configuration
file. Either key on the root (background) window pops up an menu to
help you get started.
The Tab key pressed anywhere with the Meta key (same as the 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 win-
dow.
You can override or remove these bindings. To remove the window list
binding, use this:
Key Tab A M -
MODULE AND FUNCTION COMMANDS
If fvwm encounters a command that it doesn't recognize, it checks to
see if the specified command should have been
Function (rest of command)
or
Module (rest of command)
This allows complex functions or modules to be invoked in a manner
which is fairly transparent to the configuration file.
Example: the config file contains the line
HelpMe
Fvwm looks for an fvwm command called "HelpMe", and fails. Next it
looks for a user-defined complex function called "HelpMe". If no such
function exists, fvwm tries to execute a module called "HelpMe".
DELAYED EXECUTION OF COMMANDS
Note: There are many commands that affect look and feel of specific,
some or all windows, like Style, Mouse, Colorset, TitleStyle and many
others. For performance reasons such changes are not applied immedi-
ately but only when fvwm is idle, i.e. no user interaction or module
input is pending. Specifically, new Style options that are set in a
function are not applied until after the function has completed. This
can sometimes lead to unwanted effects.
To force that all pending changes are applied immediately, use the
UpdateStyles, Refresh or RefreshWindow commands.
QUOTING
Quotes are required only when needed to make fvwm consider two or more
words to be a single argument. Unnecessary quoting is allowed. If you
want a quote character in your text, you must escape it by using the
backslash character. For example, if you have a pop-up menu called
"Window-Ops", then you don't need quotes:
Popup Window-Ops
but if you replace the dash with a space, then you need quotes:
Popup "Window Ops"
The supported quoting characters are double quotes, single quotes and
reverse single quotes. All three kinds of quotes are treated in the
same way. Single characters can be quoted with a preceding backslash.
Quoting single characters works even inside other kinds of quotes.
COMMAND EXPANSION
Whenever an fvwm command line is executed, fvwm performs parameter
expansion. A parameter is a '$' followed by a word enclosed in brack-
ets ($[...]) or a single special character. If fvwm encounters an
unquoted parameter on the command line it expands it to a string indi-
cated by the parameter name. Unknown parameters are left untouched.
Parameter expansion is performed before quoting. To get a literal '$'
use "$$".
In the past, some single letter variables were supported. It is depre-
cated now, since they cause a number of problems. You should use the
longer substitutes instead.
Example:
# Print the current desk number, horizontal page number
# and the window's class (unexpanded here, no window).
Echo $[desk.n] $[page.nx] $[w.class]
Note: If the command is called outside a window context, it 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 Current command can be used:
Current Echo $[desk.n] $[page.nx] $[w.class]
The parameters known by fvwm are:
$$
A literal '$'.
$.
The absolute directory of the currently Read file. Intended
for creating relative and relocatable configuration trees. If
used outside of any read file, the returned value is '.'.
$0 to $9
The positional parameters given to a complex function (a func-
tion that has been defined with the AddToFunc command). "$0"
is replaced with the first parameter, "$1" with the second
parameter and so on. If the corresponding parameter is unde-
fined, the "$..." is deleted from the command line.
$*
All positional parameters given to a complex function. This
includes parameters that follow after "$9".
$[version.num]
The version number, like "2.6.0".
$[version.info]
The version info, like " (from cvs)", empty for the official
releases.
$[version.line]
The first line printed by the --version command line option.
$[vp.x] $[vp.y] $[vp.width] $[vp.height]
Either coordinate or the width or height of the current view-
port.
$[desk.n]
The current desk number.
$[desk.name<n>]
These parameters are replaced with the name of the desktop num-
ber <n> that is defined with the DesktopName command. If no
name is defined, then the default name is returned.
$[desk.width] $[desk.height]
The width or height of the whole desktop, i.e. the width or
height multiplied by the number of pages in x or y direction.
$[desk.pagesx] $[desk.pagesy]
The number of total pages in a desk in x or y direction. This
is the same as the values set by DesktopSize.
$[page.nx] $[page.ny]
The current page numbers, by X and Y axes, starting from 0.
page is equivalent to area in the GNOME terminology.
$[w.id]
The window-id (expressed in hex, e.g. 0x10023c) of the window
the command was called for or "$[w.id]" if no window is associ-
ated with the command.
$[w.name] $[w.iconname] $[w.iconfile] $[w.miniiconfile] $[w.class]
$[w.resource]
The window's name, icon name, file name of its icon or mini
icon defined with the Icon or MiniIcon style including the path
information if the file was found on disk, resource class or
resource name respectivelly, or unexpanded "$[w.<attribute>]"
string if no window is associated with the command.
$[w.x] $[w.y] $[w.width] $[w.height]
Either coordinate or the width or height of the current window
if it is not iconified. If no window is associated with the
command or the window is iconified, the string is left as is.
$[w.desk]
The number of the desk on which the window is shown. If the
window is sticky the current desk number is used.
$[w.layer]
The layer of the window.
$[cw.x] $[cw.y] $[cw.width] $[cw.height]
These work like $[w....] but return the geometry of the client
part of the window. In other words: the border and title of
the window is not taken into account.
$[i.x], $[it.x], $[ip.x] $[i.y], $[it.y], $[ip.y] $[i.width],
$[it.width], $[ip.width] $[i.height], $[it.height], $[ip.height]
These work like $[w....] but return the geometry of the icon
($[i....]), the icon title ($[it....]) or the icon picture
($[ip....]).
$[pointer.x] $[pointer.y]
These return the position of the pointer on the screen. If the
pointer is not on the screen, these variables are not expanded.
$[pointer.wx] $[pointer.wy]
These return the position of the pointer in the selected win-
dow. If the pointer is not on the screen, the window is iconi-
fied or no window is selected, these variables are not
expanded.
$[pointer.cx] $[pointer.cy]
These return the position of the pointer in the client portion
of the selected window. If the pointer is not on the screen,
the window is shaded or iconified or no window is selected,
these variables are not expanded.
$[screen]
The screen number fvwm is running on. Useful for setups with
multiple screens.
$[fg.cs<n>]
$[bg.cs<n>]
$[hilight.cs<n>]
$[shadow.cs<n>]
These parameters are replaced with the name of the foreground
(fg), background (bg), hilight (hilight) or shadow (shadow)
color that is defined in colorset <n> (replace <n> with zero or
a positive integer). For example "$[fg.cs3]" is expanded to
the name of the foreground color of colorset 3 (in
rgb:rrrr/gggg/bbbb form). Please refer to the COLORSETS sec-
tion for details about colorsets.
$[schedule.last]
This is replaced by the id of the last command that was sched-
uled with the Schedule command, even if this command was
already executed.
$[schedule.next]
This is replaced by the id the next command used with Schedule
will get (unless a different id is specified explicitly).
$[cond.rc]
The return code of the last conditional command. This variable
is only valid inside a function and can not be used in a condi-
tional command. Please refer to the section CONDITIONAL COM-
MANDS in the command list.
$[func.context]
The context character of the running command as used in the
command. This is useful for example with:
Mouse 3 FS N WindowShade $$[func.context]
$[gt.str]
return the translation of str by looking in the current locale
catalog(s). If no translation is found str is returned as is.
See the LocalePath command.
$[...]
If the string within the braces is neither of the above, fvwm
tries to find an environment variable with this name and
replaces its value if one is found (e.g. "$[PAGER]" could be
replaced by "more"). Otherwise the string is left as is.
Some examples can be found in the description of the AddToFunc command.
SCRIPTING AND COMPLEX FUNCTIONS
To achieve the more complex effects, fvwm has a number of commands that
improve its scripting abilities. Scripts can be read from a file with
Read, from the output of a command with PipeRead or written as a com-
plex function with the AddToFunc command. For the curious, section 7
of the fvwm FAQ shows some real life applications of scripting. Please
refer to the sections COMMANDS FOR USER FUNCTIONS AND SHELL COMMANDS
and CONDITIONAL COMMANDS for details. A word of warning: during exe-
cution of complex functions, fvwm needs to take all input from the
mouse pointer (the pointer is "grabbed" in the slang of X). No other
programs can receive any input from the pointer while a function is
run. This can confuse some programs. For example, the xwd program
refuses to make screen shots when run from a complex function. To
achieve the same functionality you can use the Read or PipeRead command
instead.
THE LIST OF FVWM COMMANDS
The command descriptions below are grouped together in the following
sections. The sections are hopefully sorted in order of usefulness to
the newcomer.
- 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
MENUS
Before a menu can be opened, it has to be populated with menu items
using the AddToMenu command and bound to a key or mouse button with the
Key, PointerKey or Mouse command (there are many other ways to invoke a
menu too). This is usually done in the configuration file.
Fvwm menus are extremely configurable in look and feel. Even the
slightest nuances can be changed to the user's liking, including the
menu item fonts, the background, delays before popping up sub menus,
generating menus dynamically and many other features. Please refer to
the MenuStyle command to learn more.
Types of Menus
In fvwm there are four slightly different types of menus:
Popup menus can appear everywhere on the screen on their own or
attached to a part of a window. The Popup command opens popup
menus. If the popup menu was invoked with a mouse button held
down, it is closed when the button is released. THe item under
the pointer is then activated and the associated action is exe-
cuted.
Menu is a very similar command, but the menus it opens are
slightly less transient. When invoked by clicking a mouse but-
ton, it stays open and can be navigated with no button held.
But if it is invoked by a button press followed by mouse motion,
it behaves exactly like a popup menu.
Tear off menus or Pin up menus are menus from either of the
above two commands that have been "torn off" their original con-
text and pinned on the desktop like a normal window. They are
created from other menus by certain key presses or mouse
sequences or with the TearMenuOff command from inside a menu.
Sub menus are menus inside menus. When a menu item that has the
Popup command as its action is selected, the named menu is
opened as an inferior menu to the parent. Any type of menu can
have sub menus.
Menu Anatomy
Menus consist of any number of titles which are inactive menu
items that usually appear at the top of the menu, normal items
triggering various actions when selected, separator lines
between the items, tear off bars (a horizontal broken line) that
tear off the menu when selected, and sub menu items indicated
with a triangle pointing left or right, depending on the direc-
tion in which the sub menu appears. All the above menu items
are optional.
Additionally, if the menu is too long to fit on the screen, the
excess menu items are put in a continuation menu and a sub menu
with the string "More..." is placed at the bottom of the menu.
Finally, there may be a picture running up either side of the
menu (a "side bar").
Menu Navigation
Menus can be navigated either with the keyboard or with the
mouse. Many people prefer to use the mouse, but it can be
rather tedious. Once you get the hang of it, keyboard naviga-
tion can be much faster. While fvwm displays a menu, it can do
nothing else. For example, new windows do not appear before the
menu is closed. However, this is not exactly true for tear off
menus. See the Tear Off Menus section for details.
Mouse Navigation
Moving the pointer over a menu selects the item below it. Nor-
mally this is indicated by a 3d border around the item, but not
all parts of a menu can be selected. Pressing any mouse button
while a menu is open activates the item below it. Items of a
popup menu are also activated by releasing a held mouse button.
In case of an item that hides a sub menu, the sub menu is dis-
played if the pointer hovers over the item long enough or moves
close to the triangle indicating the sub menu. This behaviour
can be tuned with menu styles.
Scrolling a mouse wheel over a menu either wraps the pointer
along the menu (default), scrolls the menu under the pointer or
act as if the menu was clicked depending on the MouseWheel menu
style.
Clicking on a selected item activates it - what happens exactly
depends on the type of the item.
Clicking on a title, a separator, the side bar, or outside the
menu closes the menu (exception: tear off menus can not be
closed this way). Pressing mouse button 2 over a menu title or
activating a tear off bar creates a tear off menu from the cur-
rent menu. Clicking on a normal menu item invokes the command
that is bound to it, and clicking on a sub menu item either
closes all open menus and replaces them with the sub menu or
posts the menu (default).
Posting menus is meant to ease mouse navigation. Once a sub
menu is posted, only items from that sub menu can be selected.
This can be very useful to navigate the menu if the pointer
tends to stray off the menu. To unpost the menu and revert back
to normal operation, either click on the same sub menu item or
press any key.
Keyboard Navigation
Just like with mouse navigation, the item below the pointer is
selected. This is achieved by warping the pointer to the menu
items when necessary. While a menu is open, all key presses are
intercepted by the menu. No other application can get keyboard
input (although this is not the case for tear off menus).
Items can be selected directly by pressing a hotkey that can be
configured individually for each menu item. The hotkey is indi-
cated by underlining it in the menu item label. With the Auto-
maticHotkeys menu style fvwm automatically assigns hotkeys to
all menu items.
The most basic keys to navigate through menus are the cursor
keys (move up or down one item, enter or leave a sub menu),
Space (activate item) and Escape (close menu). Numerous other
keys can be used to navigate through menus:
Enter, Return, Space activate the current item.
Escape, Delete, Ctrl-G exit the current sequence of menus or
destroy a tear off menu.
J, N, Cursor-Down, Tab, Meta-Tab, Ctrl-F, move to the next item.
K, P, Cursor-Up, Shift-Tab, Shift-Meta-Tab, Ctrl-B, move to the
prior item.
L, Cursor-Right, F enter a sub menu.
H, Cursor-Left, B return to the prior menu.
Ctrl-Cursor-Up, Ctrl-K Ctrl-P, Shift-Ctrl-Meta-Tab, Page-Up move
up five items.
Ctrl-Cursor-Down, Ctrl-J Ctrl-N, Ctrl-Meta-TabP, Page-Down move
down five items.
Home, Shift-Cursor-Up, Ctrl-A move to the first item.
End, Shift-Cursor-Down, Ctrl-E move to the last item.
Meta-Cursor-Up, Ctrl-Cursor-Left, Shift-Ctrl-Tab move up just
below the next separator.
Meta-Cursor-Down, Ctrl-Cursor-Right, Ctrl-Tab move down just
below the next separator.
Insert opens the "More..." sub menu if any.
Backspace tears off the menu.
Tear Off Menus
A tear off menu is any menu that has been "torn off" the window
it was attached to and pinned to the root window. There are
three ways to tear off a menu: click on the menu title with
mouse button 2, press Backspace in the menu or activate its tear
off bar (a horizontal bar with a broken line). Tear off bars
must be added to the menu as any other item by assigning them
the command TearMenuOff.
The action taken with the backspace key cannot be overridden but
the action of mouse button 2 on the title can. To remove the
builtin mouse button 2 binding, use:
Mouse 2 M N -
("M" is for "Menu" context)
To assign some other button for tearoff, use:
Mouse 1 M N TearOff
Note that the Modifier, must be "N" (none) and that the notation
"Mouse 0" (for any mouse button cannot be used.)
The window containing the menu is placed as any other window
would be. If you find it confusing to have your tear off menus
appear at random positions on the screen, put this line in your
configuration file:
Style fvwm_menu UsePPosition
A tear off menu is a cross breeding between a window and a menu.
The menu is swallowed by a window and its title is stripped off
and displayed in the window title. The main advantage is that
the menu becomes permanent - activating an item does not close
the menu. Therefore, it can be used multiple times without
reopening it. To destroy such a menu, close its window or press
the Escape key.
Tear off menus behave somewhat differently than normal menus and
windows. They do not take the keyboard focus, but while the
pointer is over one of them, all key presses are sent to the
menu. Other fvwm key bindings are disabled as long as the
pointer is inside the tear off menu or one of its sub menus.
When the pointer leaves this area, all sub menus are closed
immediately. Note that the window containing a tear off menu is
never hilighted as if it had the focus.
A tear off menu is an independent copy of the menu it originated
from. As such, it is not affected by adding items to that menu
or changing its menu style.
To create a tear off menu without opening the normal menu first,
the option TearOffImmediately can be added to the Menu or Popup
command.
AddToMenu menu-name [menu-label action]
Begins or adds to a menu definition. Typically a menu defini-
tion looks like this:
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
The menu could be invoked via
Mouse 1 R A Menu Utilities Nop
or
Mouse 1 R A Popup Utilities
There is no end-of-menu symbol. Menus do not have to be defined
in a contiguous region of the config file. The quoted (or first
word) portion in the above examples is the menu label, which
appears in the menu when the user pops it up. The remaining
portion is an fvwm command which is executed if the user selects
that menu item. An empty menu-label ("") and the Nop function
are used to insert a separator into the menu.
The keywords 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 DestroyMenu and the
rebuild from scratch. When the menu has been destroyed (unless
you used the 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 the Silent
command.
Warning: Do not issue MenuStyle commands as dynamic menu
actions. Chances are good that this will crash fvwm.
There are several configurable scripts installed together with
fvwm for automatical menu generation. They have their own man
pages. Some of them, specifically fvwm-menu-directory and fvwm-
menu-desktop, may be used with DynamicPopupAction to create a
directory listing or GNOME/KDE application listing.
Example (File browser):
# 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'
Example (Picture menu):
# 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'
The keyword 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 an item (that is a submenu) defined with AddToFunc fol-
lows it, fvwm executes this command:
Function <function-name> <submenu-name>
I.e. the name is passed to the function as its first argument
and can be referred to with "$0".
The fvwm-menu-directory script mentioned above may be used with
MissingSubmenuFunction to create an up to date recursive direc-
tory listing.
Example:
# 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:
DestroyFunc MakeMissingDirectoryMenu
AddToFunc MakeMissingDirectoryMenu
+ I PipeRead fvwm_make_directory_menu.sh $0
DestroyMenu SomeMenu
AddToMenu SomeMenu
+ MissingSubmenuFunction MakeMissingDirectoryMenu
+ "Root directory" Popup /
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 top
behind the keyword Title, the title is added to the top of the
menu. If there was a title already, it is overwritten.
AddToMenu Utilities Tools Title top
All text up to the first Tab in the menu label is aligned to the
left side of the menu, all text right of the first Tab is
aligned to the left in a second column and all text thereafter
is placed right aligned in the third column. All other Tabs are
replaced by spaces. Note that you can change this format with
the ItemFormat option of the MenuStyle command.
If the menu-label contains an ampersand ('&'), the next charac-
ter 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 image file to insert in the menu. To get a literal
´*', insert "**". For example
+ Calculator*xcalc.xpm* Exec exec xcalc
inserts a menu item labeled "Calculator" with a picture of a
calculator above it. The following:
+ *xcalc.xpm* Exec exec xcalc
Omits the "Calculator" label, but leaves the picture.
If the menu-label contains a sub-string which is set off by per-
cent signs, then the text between the percent signs is expected
to be the name of image 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
+ Calculator%xcalc.xpm% Exec exec xcalc
inserts a menu item labeled "Calculator" with a picture of a
calculator to the left. The following:
+ %xcalc.xpm% Exec exec xcalc
Omits the "Calculator" label, but leaves the picture. The pic-
tures 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 SidePic option of the MenuStyle command instead. To get a
literal '@', insert "@@". For example
AddToMenu StartMenu@linux-menu.xpm@
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
SideColor option of the MenuStyle command. To get a literal
'^', insert "^^". Example:
AddToMenu StartMenu@linux-menu.xpm@^blue^
creates a menu with a picture in its bottom left corner and col-
ors 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 delim-
iters.
ChangeMenuStyle menustyle menu ...
Changes the menu style of menu to menustyle. You may specified
more than one menu in each call of ChangeMenuStyle.
ChangeMenuStyle pixmap1 \
ScreenSaverMenu ScreenLockMenu
CopyMenuStyle orig-menustyle dest-menustyle
Copy orig-menustyle to dest-menustyle, where orig-menustyle is
an existing menu style. If the menu style dest_menustyle does
not exist, then it is created.
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
AddToMenu. The optional parameter recreate tells fvwm not to
throw away the menu completely but to throw away all the menu
items (including the title).
DestroyMenu Utilities
DestroyMenuStyle menustyle
Deletes the menu style named menustyle and changes all menus
using this style to the default style, you cannot destroy the
default menu style.
DestroyMenuStyle pixamp1
Menu menu-name [position] [double-click-action]
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
double-click-action is invoked if the user double-clicks a but-
ton (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. How-
ever, 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).
The pointer is warped to where it was when the menu was invoked
if it was both invoked and closed with a keystroke.
The 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 con-
text-rectangle and an offset to this rectangle by which the
upper left corner of the menu is moved from the upper left cor-
ner of the rectangle. The position arguments consist of several
parts:
[context-rectangle] x y [special-options]
The context-rectangle can be one of:
Root
the root window of the current screen.
XineramaRoot
the root window of the whole Xinerama screen. Equiva-
lent to "root" when Xinerama is not used.
Mouse
a 1x1 rectangle at the mouse position.
Window
the frame of the context window.
Interior
the inside of the context window.
Title
the title of the context window or icon.
Button<n>
button #n of the context window.
Icon
the icon of the context window.
Menu
the current menu.
Item
the current menu item.
Context
the current window, menu or icon.
This
whatever widget the pointer is on (e.g. a corner of a
window or the root window).
Rectangle <geometry>
the rectangle defined by <geometry> in X geometry for-
mat. Width and height default to 1 if omitted.
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 x and 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 'm' the menu's width (height) is
used instead. Furthermore a trailing 'p' changes the interpre-
tation 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 x or y are prefixed with "o<number>" where <number> 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 <number>
percent of the rectangle's width/height is right over the pixel
at <number> 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<number>" is an abbreviation for "+<number>-<number>m".
A prefix of 'c' is equivalent to "o50". Examples:
# 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
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 special-options:
To create a tear off menu without opening the normal menu,
add the option TearOffImmediately. Normally the menu opens
in normal state for a split second before being torn off.
As tearing off places the menu like any other window, a
position should be specified explicitly:
# Forbid fvwm to place the menu window
Style <name of menu> UsePPosition
# Menu at top left corner of screen
Menu Root 0p 0p TearOffImmediately
The 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 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 cur-
sor, but if you want it where the position arguments say,
use the SelectInPlace option. If you want the pointer on
the title of the menu, use SelectWarp too. Note that these
options apply only if the 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 (fvwm menu style) or never warped to the title at all
(Mwm or Win menu styles). You can force (forbid) warping
whenever the sub menu is opened with the WarpTitle (NoWarp)
option.
Note that the special-options do work with a normal menu
that has no other position arguments.
MenuStyle stylename options
Sets a new menu style or changes a previously defined style.
The 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 WindowList command) that
had not be assigned a style using the ChangeMenuStyle. See also
DestroyMenuStyle. When using monochrome color options are
ignored.
options is a comma separated list containing some of the key-
words Fvwm / Mwm / Win, BorderWidth, Foreground, Background,
Greyed, HilightBack / HilightBackOff, ActiveFore / ActiveFore-
Off, MenuColorset, ActiveColorset, GreyedColorset,
Hilight3DThick / Hilight3DThin / Hilight3DOff, Hilight3DThick-
ness, Animation / AnimationOff, Font, MenuFace, PopupDelay, Pop-
upOffset, TitleWarp / TitleWarpOff, TitleUnderlines0 / TitleUn-
derlines1 / TitleUnderlines2, SeparatorsLong / SeparatorsShort,
TrianglesSolid / TrianglesRelief, PopupImmediately / PopupDe-
layed, PopdownImmediately / PopdownDelayed, PopupActiveArea,
DoubleClickTime, SidePic, SideColor, PopupAsRootMenu / PopupAs-
Submenu / PopupIgnore / PopupClose, RemoveSubmenus / HoldSub-
menus, SubmenusRight / SubmenusLeft, SelectOnRelease, ItemFor-
mat, VerticalItemSpacing, VerticalTitleSpacing, AutomaticHotkeys
/ AutomaticHotkeysOff, MouseWheel, ScrollOffPage / !ScrollOff-
Page, TrianglesUseFore / !TrianglesUseFore.
In the above list some options are listed as option pairs or
triples with a '/' in between. These options exclude each
other. All paired options can be negated to have the effect of
the counterpart option by prefixing ! to the option.
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
Fvwm style. These options override all others except Fore-
ground, Background, Greyed, HilightBack, ActiveFore and PopupDe-
lay, 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.
Mwm and Win style menus popup sub menus automatically. Win
menus indicate the current menu item by changing the background
to dark. Fvwm sub menus overlap the parent menu, Mwm and Win
style menus never overlap the parent menu.
Fvwm style is equivalent to HilightBackOff, Hilight3DThin,
ActiveForeOff, ActiveBackOff, AnimationOff, Font, MenuFace, Pop-
upOffset 0 67, TitleWarp, TitleUnderlines1, SeparatorsShort,
TrianglesRelief, PopupDelayed, PopdownDelayed, PopupDelay 150,
PopdownDelay 150, PopupAsSubmenu, HoldSubmenus, SubmenusRight,
BorderWidth 2, AutomaticHotkeysOff, PopupActiveArea 75.
Mwm style is equivalent to HilightBackOff, Hilight3DThick,
ActiveForeOff, ActiveBackOff, AnimationOff, Font, MenuFace, Pop-
upOffset -3 100, TitleWarpOff, TitleUnderlines2, SeparatorsLong,
TrianglesRelief, PopupImmediately, PopdownDelayed, PopdownDelay
150, PopupAsSubmenu, HoldSubmenus, SubmenusRight, BorderWidth 2,
AutomaticHotkeysOff, PopupActiveArea 75.
Win style is equivalent to HilightBack, Hilight3DOff,
ActiveFore, ActiveBack, AnimationOff, Font, MenuFace, PopupOff-
set -5 100, TitleWarpOff, TitleUnderlines1, SeparatorsShort,
TrianglesSolid, PopupImmediately, PopdownDelayed, PopdownDelay
150, PopupAsSubmenu, RemoveSubmenus, SubmenusRight, BorderWidth
2, AutomaticHotkeysOff, PopupActiveArea 75.
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.
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.
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 speci-
fied. If the color is omitted the color of greyed menu entries
is based on the background color of the menu.
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
HilightBack. If you use this option without an argument the
color is based on the menu's background color. The ActiveCol-
orset option overrides the specified color.
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
ActiveFore. Omitting the color turns hilighting on when an
ActiveColorset is used. ActiveForeOff turns off hilighting the
foreground completely. The ActiveColorset option overrides the
specified color.
MenuColorset controls if a colorset is used instead of the Fore-
ground, Background and MenuFace menu styles. If the MenuCol-
orset 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 reg-
ular 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 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
COLORSETS section for details about colorsets.
ActiveColorset works exactly like MenuColorset, but the fore-
ground from the colorset replaces the color given with the
ActiveFore menu style and the colorset's background color
replaces the color given with the HilightBack command (to turn
on background hilighting you have to use the 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. Hilighting the background or foreground
can be turned off individually with the ActiveForeOff or
HilightBackOff menu styles.
GreyedColorset works exactly like MenuColorset, but the fore-
ground from the colorset replaces the color given with the
Greyed menu style. No other parts of the colorset are used.
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.
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.
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.
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.
MenuFace enforces a fancy background upon the menus. You can
use the same options for MenuFace as for the ButtonStyle. See
description of ButtonStyle command and the COLOR GRADIENTS sec-
tions for more information. If you use MenuFace without argu-
ments the style is reverted back to normal.
Some examples of MenuFaces are:
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
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:
MenuStyle <style> Hilight3DOff, HilightBackOff
MenuStyle <style> ActiveFore <preferred color>
Make sure sub menus do not overlap the parent menu. This can
prevent menus being redrawn every time a sub menu pops up or
down.
MenuStyle <style> PopupOffset 1 100
Run your X server with backing storage. If your X Server is
started with the -bs option, turn it off. If not try the -wm
and +bs options:
startx -- -wm +bs
You may have to adapt this example to your system (e.g. if you
use xinit to start X).
PopupDelay requires one numeric argument. This value is the
delay in milliseconds before a sub menu is popped up when the
|