fvwm95
NAME
fvwm95 - F(?) Virtual Window Manager for X11 with Win95 look
and feel
SYNOPSIS
fvwm95-2 [ options ]
DESCRIPTION
Fvwm95 is a window manager for X11. It is a derivative of
fvwm, which, in turn, is derivated from twm.
Like the standard Fvwm, Fvwm95 provides both a large virtual
desktop and 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 keyboard accelerators which allow you to
perform most window-manager functions, including moving and
resizing windows, and operating the window-manager's 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 SloppyFocus and
per-window focus methods. SloppyFocus is focus-follows-
mouse, but focus is not removed from windows when the mouse
leaves a window and enters the root window. When sloppy
focus is used as the default focus style, it is nice to make
windows in which you do not typically type into (xmag, xman,
xgraph, xclock, xbiff, etc) click-to-focus, so that your
terminal window doesn't loose focus unnecessarily.
COPYRIGHTS
Since fvwm95 is derived from fvwm code it shares fvwm's
copyrights.
fvwm is copyright 1988 by Evans and Sutherland Computer
Corporation, Salt Lake City, Utah, and 1989 by the
Massachusetts Institute of Technology, Cambridge,
Massachusetts, All rights reserved. It is also copyright
1993 and 1994 by Robert Nation.
Permission to use, copy, modify, and distribute this
software and its documentation for any purpose and without
fee is hereby granted, provided that the above copyright
notice appear in all copies and that both that copyright
notice and this permission notice appear in supporting
documentation, and that the names of Evans & Sutherland and
M.I.T. not be used in advertising in publicity pertaining to
distribution of the software without specific, written prior
permission.
ROBERT NATION, CHARLES HINES, EVANS & SUTHERLAND, AND M.I.T.
DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS, IN NO EVENT SHALL EVANS & SUTHERLAND OR M.I.T. BE
LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTUOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH
THE USE OR PERFORMANCE OF THIS SOFTWARE.
ANATOMY OF A WINDOW
Fvwm95 puts a decorative 3D 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.
Unless the standard defaults files are modified, pressing
mouse button 1 in the title or side-bars will begin a move
operation on the window. Pressing button 1 in the corner
frame pieces will begin 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 "Mouse" configuration
parameter below.
THE VIRTUAL DESKTOP
Fvwm95 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 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, windows which are larger than the screen or
large groups of related windows can easily be viewed.
The size of the virtual desktops can be changed any time, by
using the DeskTopSize built-in command. All virtual
desktops must be the same size. The total number of
distinct desktops need not be specified, but is limited to
approximately 4 billion total. All windows on a range of
desktops can be viewed in the Pager, 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).
"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
will always show up 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,
then invoking:
xterm -geometry +1000+1000
will place the 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.
There is currently no way to cause a window to map onto a
desktop other than the currently active desk, or is there...
A geometry specified as something like:
xterm -geometry -5-5
will generally place 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 that understand standard Xt command line
arguments and X resources, like xterm and xfontsel, allow
the user to specify the start-up desk on the command line:
xterm -xrm "*Desk:1"
will start an xterm on desk number 1. Not all applications
understand this option, however.
You could achieve the same result with the following line in
your
XTerm*Desk: 1
INITIALIZATION
During initialization, fvwm95 will search for a
configuration file which describes key and button bindings,
and a few other things. The format of these files will be
described later. First, fvwm95 will search for a file named
.fvwm2rc95 (or just .fvwmrc based on how it was compiled -
.fvwm2rc95 is the default) in the users home directory.
Failing that, it will look for /usr/lib/X11/fvwm/.fvwm2rc95
for system-wide defaults. If that file is not found, fvwm95
will be basically useless.
Fvwm95 will set two environment variables which will be
inherited by its children. These are $DISPLAY which
describes the display on which fvwm95 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 will
also be set and will use a network-ready description of the
display. $HOSTDISPLAY will always use the TCP/IP transport
protocol (even for a local connection) so $DISPLAY should be
used for local connections, as it may use Unix-domain
sockets, which are faster.
Fvwm95 has a two special functions for inititalization:
InitFunction and RestartFunction, which are executed during
Initialization and Restarts (respectively). These may be
customized in the user's rc file via the AddToFunc facilitly
(described later) to start up modules, xterms, or whatever
you'd like have started by fvwm95.
ICONS
The basic Fvwm95 configuration uses monochrome bitmap icons,
similar to twm. If XPM extensions are compiled in, then
color icons similar to ctwm, MS-Windows, or the Macintosh
icons can be used. In order to use these options you will
need the XPM package, as described in the Fvwm.tmpl Imake
configuration file.
If both the SHAPE and XPM options are compiled in you will
get shaped color icons, which are very spiffy.
MODULES
A module is a separate program which runs as a separate Unix
process but transmits commands to fvwm95 to execute. Users
can write their own modules to do any weird or bizarre
manipulations without bloating or affecting the integrity of
fvwm95 itself.
Modules MUST be spawned by fvwm95 so that it can set up two
pipes for fvwm95 and the module to communicate with. The
pipes will already be 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 fvwm95 at any time during the
X session by use of the 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
fvwm95 is told to quit, then fvwm95 will close the
communication pipes and wait 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
will exit 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 fvwm95 built-in
command engine. Text commands are formatted just as in the
case of a mouse binding in the .fvwm2rc95 setup file.
Certain auxiliary information is also transmitted, as in the
sample module FvwmButtons. The FvwmButtons module is
documented in its own man page.
ICCCM COMPLIANCE
Fvwm95 attempts to be ICCCM 1.1 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 fvwm95 and most other
window managers.
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 number of applications set this
property, and yet expect the window-manager to give them the
keyboard focus anyway, so fvwm95 provides a window-style,
"Lenience", which will allow fvwm95 to overlook this ICCCM
rule.
M4 PREPROCESSING
M4 pre-processing is handled by a module in fvwm95. To get
more details, try man FvwmM4. In short, if you want fvwm95
to parse your files with m4, then replace the word "Read"
with "FvwmM4" in your .fvwm2rc95 file (if it appears at
all), and start fvwm95 with the command
fvwm95 -f "FvwmM4 .fvwm2rc95"
CPP PREPROCESSING
Cpp is the C-language pre-processor. fvwm95 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.
OPTIONS
These are the command line options that are recognized by
fvwm95:
-f config_command
Causes fvwm95 to use config_command instead of "Read
.fvwm2rc95" as its initialization command.
-debug
Puts X transactions in synchronous mode, which
dramatically slows things down, but guarantees that
fvwm95's internal error messages are correct.
-d displayname
Manage the display called "displayname" instead of the
name obtained from the environment variable $DISPLAY.
-s On a multi-screen display, run fvwm95 only on the
screen named in the $DISPLAY environment variable or
provided through the -d option. Normally, fvwm95 will
attempt to start up on all screens of a multi-screen
display.
-version
Print the version of fvwm95 to stderr.
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 ".fvwm2rc95". By using the "Read" built-in, it is
easy to read in new configuration files as you go.
Lines beginning with '#' will be ignored by fvwm95. Lines
starting with '*' are expected to contain module
configuration commands (rather than configuration commands
for fvwm95 itself).
Fvwm95 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
fvwm95 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.
BUILT IN FUNCTIONS
Fvwm95 supports a set of built-in functions which can be
bound to keyboard or mouse buttons. If fvwm95 expects to
find a built-in function in a command, but fails, it will
check 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 .fvwm2rc95 file contains the line "HelpMe".
Fvwm95 will look for a built-in command called "HelpMe", and
will fail. Next it will look for a user-defined complex
function called "HelpMe". If no such user defined function
exists, Fvwm95 will try to execute a module called "HelpMe".
Quotes are required only when needed to make fvwm95 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".
AddToMenu
Begins or adds to a menu definition. Typically a menu
definition looks like this:
AddToMenu Utilities "Utilities" Title
+ "Xterm" Exec xterm -e tcsh
+ "Rxvt" Exec rxvt
+ "Remote Logins" Popup Remote-Logins
+ "Top" Exec rxvt -T Top -n Top -e top
+ "Calculator" Exec xcalc
+ "Xman" Exec xman
+ "Xmag" Exec xmag
+ "emacs" Exec xemacs
+ "Mail" MailFunction xmh "-font fixed"
+ "" Nop
+ "Modules" Popup Module-Popup
+ "" Nop
+ "Exit Fvwm95" 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 .fvwm2rc95
file. The quoted portion in the above examples is the
menu-label, which will appear 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 Nop
function can be used to insert a separator into the
menu.
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. For example
+ "Calculator*xcalc.xpm*" Exec xcalc
inserts a menu item labeled "calculator" with a picture
of a calculator above it. The following:
+ "*xcalc.xpm*" Exec xcalc
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 to insert to the left of the menu label.
For example
+ "Calculator%xcalc.xpm%" Exec xcalc
inserts a menu item labeled "calculator" with a picture
of a calculator to the left. The following:
+ "%xcalc.xpm%" Exec xcalc
Omits the "Calculator" label, but leaves the picture.
The pictures used with this feature should be small
(perhaps 16x16).
AddToFunc
Begins or add to a function definition. Here's an
example:
AddToFunc Move-or-Raise "I" Raise
+ "M" Move
+ "D" Lower
The function name is Move-or-Raise, and could be
invoked from a menu or a mouse binding or key binding:
Mouse 1 TS A Move-or-Raise
The quoted portion of the function tells what kind of
action will trigger the command which follows it. "I"
stands for Immediate, and is executed as soon as the
function is invoked. "M" stands for Motion, ie if the
user starts moving the mouse. "C" stands for Click,
ie, if the user presses and releases the mouse in a
short period of time (ClickTime milliseconds). "D"
stands for double-click. The action "I" will cause an
action to be performed on the button-press, if the
function is invoked with prior knowledge of which
window to act on.
The special symbols $w and $0 through $9 are available
in the ComplexFunctions or Macros, or whatever you want
to call them. Within a macro, $w is expanded to the
window-id (expressed in hex, ie 0x10023c) of the window
for which the macro was called. $0 though $9 are the
arguments to the macro, so if you call
Key F10 R A Function MailFunction xmh "-font fixed"
and MailFunction is
AddToFunc MailFunction "I" Next [$0] Iconify -1
+ "I" Next [$0] focus
+ "I" None [$0] Exec $0 $1
Then the last line of the function becomes
+ "I" None [xmh] Exec xmh -font fixed
The expansion is performed as the function is executed,
so you can use the same function with all sorts of
different arguments. I could use
Key F11 R A Function MailFunction zmail "-bg pink"
in the same .fvwm2rc95, if I wanted. An example of
using $w is:
AddToFunc PrintFunction "I" Raise
+ "I" Exec xdpr -id $w
Note that $$ is expanded to $.
Beep As might be expected, this makes the terminal beep.
ButtonStyle button# pixmap
Defines a pixmap to be displayed on a title-bar button.
button# is the title-bar button, and is between 0 and
9. Only one pixmap can be specified.
ButtonStyle 2 mini-close.xpm
The pixmap specification can be given as an absolute or
relative pathname (see PixmapPath). If any of the
pixmaps cannot be found, the entire button reverts to a
simple rectangle with no pixmaps.
ClickTime delay
Specifies the maximum delay (in milliseconds) between a
button press and a button release for the Function
built-in to consider the action a mouse click. The
default delay is 150 milliseconds.
Close
If the window accepts the delete window protocol a
message is sent to the window asking it to gracefully
remove itself. If the window does not understand the
delete window protocol then the window is destroyed.
ColormapFocus [FollowsMouse | FollowsFocus]
By default, fvwm95 installs the colormap of the window
that the cursor is in. If you use ColormapFocus
FollowsFocus, then the installed colormap will be the
one for the window that currently has the keyboard
focus.
CursorMove horizonal vertical
Moves the mouse pointer by horizontal pages in the X
direction and vertical pages in the Y direction.
Either or both entries may be negative. Both
horizontal and vertical values are expressed in percent
of pages, so "CursorMove 100 100" means to move down
and left by one full page. "CursorMove 50 25" means to
move left half a page and down a quarter of a page.
The CursorMove function should not be called from pop-
up menus.
DefaultColors winfore winback titlefore titleback
Sets the default color schemes. Here winback defines
the background (border) color of all windows, including
the menu windows; /fIwinfore/fP is used for the menu
text; titleback specifies the background color for
title bars of non selected windows; titlefore is the
color used in the title text of non selected windows.
Delete
Sends a message to a window asking that it remove
itself, frequently causing the application to exit.
Desk arg1 arg2
Changes to another desktop (workspace, room).
If arg1 is non zero then the next desktop number will
be the current desktop number plus arg1. Desktop
numbers can be negative.
If arg1 is zero then the new desktop number will be
arg2.
The number of active desktops is determined
dynamically. Only desktops which contain windows or
are currently being displayed are active. Desktop
numbers must be between 2147483647 and -2147483648 (is
that enough?).
DeskTopSize HorizontalxVertical
Defines the virtual desktop size in units of the
physical screen size.
Destroy
Destroys an application window, which usually causes
the application to crash and burn.
DestroyFunc
Deletes a function, so that subsequent references to it
are no longer valid. You can use this to change the
contents of a function during an fvwm95 session. The
function can be rebuilt using AddToFunc.
DestroyFunc "PrintFunction"
DestroyMenu
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 fvwm95 session. The menu
can be rebuilt using AddToMenu.
DestroyMenu "Utilities"
EdgeResistance scrolling moving
Tells how hard it should be to change the desktop
viewport by moving the mouse over the edge of the
screen and how hard it should be to move a window over
the edge of the screen.
The first parameter tells how milliseconds the pointer
must spend on the screen edge before fvwm95 will move
the viewport. This is intended for people who use
"EdgeScroll 100 100" but find themselves accidentally
flipping pages when they don't want to.
The second parameter tells how many pixels over the
edge of the screen a window's edge must move before it
actually moves partially off the screen.
Note that, with "EdgeScroll 0 0", it is still possible
to move or resize windows across the edge of the
current screen. By making the first parameter to
EdgeResistance 10000 this type of motion is impossible.
With EdgeResistance less than 10000 but greater than 0
moving over pages becomes difficult but not impossible.
EdgeScroll horizontal vertical
Specifies the percentage of a page to scroll when the
cursor hits the edge of a page. If you don't want any
paging or scrolling when you hit the edge of a page
include "EdgeScroll 0 0" in your .fvwm2rc95 file. If
you want whole pages, use "EdgeScroll 100 100". Both
horizontal and vertical should be positive numbers.
If the horizontal and vertical percentages are
multiplied by 1000 then scrolling will wrap around at
the edge of the desktop. If "EdgeScroll 100000 100000"
is used fvwm95 will scroll by whole pages, wrapping
around at the edge of the desktop.
Exec command
Executes command. Exec doesn't require an additional
'exec' or
The following example binds function key F1 in the root
window, with no modifiers, to the exec function. The
program rxvt will be started with an assortment of
options.
Key F1 R N Exec rxvt -fg yellow -bg blue -e /bin/tcsh
ExecUseShell [shell]
Makes the Exec command use the specified shell, or the
value of the $SHELL environment variable if no shell is
specified, instead of the default Bourne shell
(/bin/sh).
ExecUseShell
ExecUseShell /usr/local/bin/tcsh
Focus
Moves the viewport or window as needed to make the
selected window visible. Sets the keyboard focus to
the selected window. Raises the window if needed to
make it visible. Warps the pointer into the selected
window in focus-follows-mouse mode. Does not de-
iconify.
Function FunctionName
Used to bind a previously defined function to a key or
mouse button.
The following example binds mouse button 1 to a
function called "Move-or-Raise", whose definition was
provided as an example earlier in this man page. After
performing this binding fvwm95 will execute to move-
or-raise function whenever button 1 is pressed in a
window title-bar.
Mouse 1 T A Function Move-or-Raise
The keyword "Function" may be omitted if "FunctionName"
does not coincide with an fvwm95 built-in function name
GotoPage x y
Moves the desktop viewport to page (x,y). The upper
left page is (0,0), the upper right is (N,0), where N
is one less than the current number of horizontal pages
specified in the DeskTopSize command. The lower left
page is (0,M), and the lower right page is (N,M), where
M is the desktop's vertical size as specified in the
DeskTopSize command. The GotoPage function should not
be used in a pop-up menu.
HilightColors textcolor backgroundcolor
Specified the text and background colors for the title
bar on the window which currently has the keyboard
focus (selected window).
IconFont fontname
Makes fvwm95 use font fontname for icon labels. If
omitted, the menu font (specified by the MenuFont
configuration parameter) will be used instead.
Iconify [ value ]
Iconifies a window if it is not already iconified or
de-iconifies it if it is already iconified. If the
optional argument value is positive the only
iconification will be allowed. It the optional
argument is negative only de-iconification will be
allowed.
IconPath path
Specifies a colon separated list of full path names of
directories where bitmap (monochrome) icons can be
found. Each path should start with a slash.
Environment variables can be used here as well (i.e.
$HOME or ${HOME}).
Note: if the FvwmM4 is used to parse your rc files,
then m4 may want to mangle the word "include" which
will frequently show up in the IconPath or PixmapPath
command. To fix this add undefine(`include') prior to
the IconPath command, or better use the '-m4-prefix'
option to force all m4 directives to have a prefix of
"m4_" (see the FvwmM4 man page).
Key keyname Context Modifiers Function
Binds a keyboard key to a specified fvwm95 built-in
function. Definition is the same as for a mouse
binding except that the mouse button number is replaced
with a key name. The keyname is one of the entries
from /usr/include/X11/keysymdef.h, with the leading XK_
omitted. The Context and Modifiers fields are defined
as in the Mouse binding.
The following example binds the built in window list to
pop up when Alt-Ctrl-Shift-F11 is hit, no matter where
the mouse pointer is:
Key F11 A SCM WindowList
Binding a key to a title-bar button will not cause that
button to appear unless a mouse binding also exists.
KillModule name
Causes the module which was invoked with name name to
be killed. name may include wild-cards.
Lower
Allows the user to lower a window.
Maximize [ horizontal vertical ]
Without its optional arguments Maximize causes the
window to alternately switch from a full-screen size to
its normal size.
With the optional arguments horizontal and vertical,
which are expressed as percentage of a full screen, the
user can control the new size of the window. If
horizontal is greater than 0 then the horizontal
dimension of the window will be set to
horizontal*screen_width/100. The vertical resizing is
similar. For example, the following will add a title-
bar button to switch a window to the full vertical size
of the screen:
Mouse 0 4 A Maximize 0 100
The following causes windows to be stretched to the
full width:
Mouse 0 4 A Maximize 100 0
This makes a window that is half the screen size in
each direction:
Mouse 0 4 A Maximize 50 50
Values larger than 100 can be used with caution.
If the letter "p" is appended to each coordinate
(horizontal and/or vertical), then the scroll amount
will be measured in pixels.
Menu menu-name 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
will stay up. The command double-click-action will be
invoked if the user double-clicks when bringing the
menu up.
MenuFont fontname
Makes fvwm95 use font fontname for menu entries. If
omitted, the fixed font will be used instead.
Module ModuleName
Specifies a module which should be spawned during
initialization. At the current time the available
modules (included with fvwm95) are FvwmAudio (makes
sounds to go with window manager actions), FvwmAuto (an
auto raise module), FvwmBacker (to change the
background when you change desktops), FvwmBanner (to
display a spiffy XPM), FvwmButtons (brings up a
customizable tool bar), FvwmCpp (to preprocess your the
mwm IconBox), FvwmIdent (to get window info), FvwmM4
(to preprocess your .fvwm2rc95 with m4), FvwmPager (a
mini version of the desktop), FvwmSave (saves the
desktop state in .xinitrc style), FvwmSaveDesk (saves
the desktop state in fvwm95 commands), FvwmScroll (puts
scrollbars on any window), FvwmTalk (to interactively
run fvwm commands), FvwmTaskBar (a Win95-like taskbar),
and FvwmWinList (a window list). These modules have
their own man pages. There are other modules out on
there as well.
Modules can be short lived transient programs or, like
FvwmButtons, can remain for the duration of the X
session. Modules will be terminated by the window
manager prior to restarts and quits, if possible. See
the introductory section on modules. The keyword
"module" may be omitted if ModuleName is distinct from
all built-in and function names.
ModulePath
Specifies a colon separated list of paths for fvwm95 to
search when looking for a module to load. Individual
directories do not need trailing slashes. Environment
variables can be used here as well (i.e. $HOME or
${HOME}).
Mouse Button Context Modifiers Function
Defines a mouse binding. Button is the mouse button
number. If Button is zero then any button will perform
the specified function. Context describes where the
binding applies. Valid contexts are R for the root
window, W for an application window, T for a window
title bar, S for a window side, top, or bottom bar, F
for a window frame (the corners), I for an Icon window,
or 0 through 9 for title-bar buttons, or any
combination of these letters. A is for any context
except for title-bar buttons. For instance, a context
of FST will apply when the mouse is anywhere in a
window's border except the title-bar buttons.
Modifiers is any combination of N for no modifiers, C
for control, S for shift, M for Meta, or A for any
modifier. For example, a modifier of SM will apply
when both the Meta and Shift keys are down. X11
modifiers mod1 through mod5 are represented as the
digits 1 through 5.
Function is one of fvwm95's built-in functions.
The title bar buttons are numbered with odd numbered
buttons on the left side of the title bar and even
numbers on the right. Smaller-numbered buttons are
displayed toward the outside of the window while
larger-numbered buttons appear toward the middle of the
window (0 is short for 10). In summary, the buttons
are numbered:
1 3 5 7 9 0 8 6 4 2
The highest odd numbered button which has an action
bound to it determines the number of buttons drawn on
the left side of the title bar. The highest even
number determines the number or right side buttons
which are drawn. Actions can be bound to either mouse
buttons or keyboard keys.
Move [ x y ]
Allows the user to move a window. If called from
somewhere in a window or its border, then that window
will be moved. If called from the root window then the
user will be allowed to select the target window.
If the optional arguments x and y are provided, then
the window will be moved so that its upper left corner
is at location (x,y). The units of x and y are
percent-of-screen, unless a letter "p" is appended to
each coordinate, in which case the location is
specified in pixels.
Examples:
Mouse 1 T A Move
Mouse 2 T A Move 10 10
Mouse 3 T A Move 10p 10p
In the first example, an interactive move is indicated.
In the second, the window whose title-bar is selected
will be moved so that its upper left hand corner is 10
percent of the screen width in from the left of the
screen, and 10 percent down from the top. The final
example moves the window to coordinate (10,10) pixels.
Nop Does nothing. This is used to insert a blank line or
separator in a menu. If the menu item specification is
Nop " ", then a blank line is inserted. If it looks
like Nop "", then a separator line is inserted. Can
also be used as the double-click action for Menu.
Next [conditions] command
Performs command (typically Focus) on the next window
which satisfies all conditions. Conditions include
"iconic", "!iconic", "CurrentDesk", "Visible",
"!Visible", and "CurrentScreen". In addition, the
condition may include a window name to match to. The
window name may include the wildcards * and ?. The
window name, class, and resource will be considered
when attempting to find a match.
None [arguments] command
Performs command if no window which satisfies all
conditions exists. Conditions include "iconic",
"!iconic", "CurrentDesk", "Visible", "!Visible", and
"CurrentScreen". In addition, the condition may
include a window name to match to. The window name may
include the wildcards * and ?. The window name, class,
and resource will be considered when attempting to find
a match.
OpaqueMoveSize percentage
Tells fvwm95 the maximum size window with which opaque
window movement should be used. The percentage is
percent of the total screen area. With "OpaqueMove 0"
all windows will be moved using the traditional
rubber-band outline. With "OpaqueMove 100" all windows
will be move as solid windows. The default is
"OpaqueMove 5", which allows small windows to be moved
in an opaque manner but large windows are moved as
rubber-bands.
PixmapPath path
Specifies a colon separated list of full path names of
directories where pixmap (color) icons can be found.
Each path should start with a slash. Environment
variables can be used here as well (i.e. $HOME or
${HOME}).
Popup PopupName
This built-in has two purposes: to bind a menu to a key
or mouse button, and to bind a sub-menu into a menu.
The formats for the two purposes differ slightly.
To bind a previously defined pop-up menu to a key or
mouse button:
The following example binds mouse buttons 2 and 3 to
a pop-up called "Window Ops". The menu will pop up
if the buttons 2 or 3 are pressed in the window
frame, side-bar, or title-bar, with no modifiers
(none of shift, control, or meta).
Mouse 2 FST N Popup "Window Ops"
Mouse 3 FST N Popup "Window Ops"
Pop-ups can be bound to keys through the use of the
Key built in. Pop-ups can be operated without using
the mouse by binding to keys and operating via the up
arrow, down arrow, and enter keys.
To bind a previously defined pop-up menu to another
menu, for use as a sub-menu:
The following example defines a sub menu, "Quit-
Verify" and binds it into a main menu, called
"RootMenu":
AddToMenu Quit-Verify "Really Quit Fvwm?" Title
+ "Yes, Really Quit" Quit
+ "Restart Fvwm95" Restart fvwm95-2
+ "Restart Fvwm2" Restart fvwm2
+ "Restart Fvwm 1.xx" Restart fvwm
+ "" Nop
+ "No, Don't Quit" Nop
AddToMenu RootMenu "Root Menu" Title
+ "Open an XTerm Window" Popup NewWindowMenu
+ "Login as Root" Exec xterm -fg green -T Root -n Root -e su -
+ "Login as Anyone" Popup AnyoneMenu
+ "Remote Hosts" Popup HostMenu
+ "" Nop
+ "X utilities" Popup Xutils
+ "" Nop
+ "Fvwm Modules" Popup Module-Popup
+ "Fvwm Window Ops" Popup Window-Ops
+ "" Nop
+ "Previous Focus" Prev [*] Focus
+ "Next Focus" Next [*] Focus
+ "" Nop
+ "Refresh screen" Refresh
+ "Recapture screen" Recapture
+ "" Nop
+ "Reset X defaults" Exec xrdb -load $HOME/.Xdefaults
+ "" Nop
+ "" Nop
+ "Quit" Popup Quit-Verify
Popup differs from Menu in that pop-ups do not stay up if
the user simply clicks. These are Twm style popup-menus,
which are a little hard on the wrist. Menu provides
Motif or Microsoft-Windows style menus which will stay up
on a click action.
Prev Performs command (typically Focus) on the previous
window which satisfies all conditions. Conditions
include "iconic", "!iconic", "CurrentDesk", "Visible",
"!Visible", and "CurrentScreen". In addition, the
condition may include a window name to match to. The
window name may include the wildcards * and ?. The
window name, class, and resource will be considered
when attempting to find a match.
Quit Exits fvwm95, generally causing X to exit too.
Raise
Allows the user to raise a window.
RaiseLower
Alternately raises and lowers a window.
Read filename
Causes fvwm95 to read commands from the file named
filename.
Recapture
Causes fvwm95 to recapture all of its windows. This
ensures that the latest style parameters will be used.
The recapture operation is visually disturbing.
Refresh
Causes all windows on the screen to redraw themselves.
Resize [ x y ]
Allows the user to resize a window.
If the optional arguments x and y are provided, then
the window will be resized so that its dimensions are x
by y). The units of x and y are percent-of-screen,
unless a letter "p" is appended to each coordinate, in
which case the location is specified in pixels.
Restart WindowManagerName
Causes fvwm95 to restart itself if WindowManagerName is
"fvwm95-2", or to switch to an alternate window manager
if WindowManagerName is other than "fvwm95-2". If the
window manager is not in your default search path, then
you should use the full path name for
WindowManagerName.
This command should not have a trailing ampersand or
any command line arguments and should not make use of
any environmental variables. Of the following
examples, the first two are sure losers, but the third
is OK:
Key F1 R N Restart fvwm &
Key F1 R N Restart $(HOME)/bin/fvwm
Key F1 R N Restart /home/nation/bin/fvwm
Scroll horizonal vertical
Scrolls the virtual desktop's viewport by horizontal
pages in the x-direction and vertical pages in the y-
direction. Either or both entries may be negative.
Both horizontal and vertical values are expressed in
percent of pages, so "Scroll 100 100" means to scroll
down and left by one full page. "Scroll 50 25" means
to scroll left half a page and down a quarter of a
page. The scroll function should not be called from
pop-up menus. Normally, scrolling stops at the edge of
the desktop.
If the horizontal and vertical percentages are
multiplied by 1000 then scrolling will wrap around at
the edge of the desktop. If "Scroll 100000 0" is
executed over and over fvwm95 will move to the next
desktop page on each execution and will wrap around at
the edge of the desktop, so that every page is hit in
turn.
If the letter "p" is appended to each coordinate
(horizontal and/or vertical), then the scroll amount
will be measured in pixels.
Stick
Makes a window sticky if it is not already sticky, or
non-sticky if it is already sticky.
StickyColors textcolor backgroundcolor
Specified the text and background colors for the title
bar of sticky windows.
Style windowname options
This command is intended to replace the old fvwm 1.xx
global commands NoBorder, NoTitle, StartsOnDesk,
Sticky, StaysOnTop, Icon, WindowListSkip,
CirculateSkip, SuppressIcons, BoundaryWidth,
NoBoundaryWidth, StdForeColor, and StdBackColor with a
single flexible and comprehensive window(s) specific
command. This command is used to set attributes of a
window to values other than the default or to set the
window manager default styles.
windowname can be a window's name, class, or resource
string. It can contain the wildcards * and/or ?, which
are matched in the usual Unix filename manner. They
are searched in the reverse order stated, so that Style
commands based on the name override or augment those
based on the class, which override or augment those
based on the resource string.
Note - windows that have no name (WM_NAME) are given a
name of "Untitled", and windows that don't have a class
(WM_CLASS, res_class) are given Class = "NoClass" and
those that don't have a resource (WM_CLASS, res_name)
are given Resource = "NoResource".
options is a comma separated list containing some or
all of the keywords BorderWidth, HandleWidth,
NoIcon/Icon, TitleIcon, IconBox, NoTitle/Title,
NoHandles/Handles, WindowListSkip/WindowListHit,
CirculateSkip/CirculateHit, StaysOnTop/StaysPut,
Sticky/Slippery, StartIconic/StartNormal, ForeColor,
BackColor, StartsOnDesk/StartsAnyWhere,
IconTitle/NoIconTitle, MWMDecor/NoDecorHint,
MWMFunctions/NoFuncHint, HintOverride/NoOverride,
NoButton/Button, OLDecor/NoOLDecor,
StickyIcon/SlipperyIcon, SmartPlacement/DumbPlacement,
RandomPlacement/ActivePlacement,
DecorateTransient/NakedTransient,
SkipMapping/ShowMapping, UseStyle,
NoPPosition/UsePPosition, Lenience/NoLenience.
In the above list some options are listed as style-
option/opposite-style-option. The opposite-style-
option for entries that have them describes the fvwm95
default behavior and can be used if you want to change
the fvwm95 default behavior.
Icon takes an (optional) unquoted string argument which
is the icon bitmap or pixmap to use.
IconBox takes four numeric arguments:
IconBox l t r b
Where l is the left coordinate, t is the top, r is
right and b is bottom. Negative coordinates indicate
distance from the right or bottom of the screen. The
iconbox is a region of the screen will fvwm will
attempt to put icons for this window, as long as they
do not overlap other icons.
StartsOnDesk takes a numeric argument which is the
desktop number on which the window should be initially
placed.
BorderWidth takes a numeric argument which is the width
of the border to place the window if it does not have
resize-handles.
HandleWidth takes a numeric argument which is the width
of the border to place the window if it does have
resize-handles.
Button and NoButton take a numeric argument which is
the number of the title-bar button which is to be
included/omitted.
StickyIcon makes the window sticky when its iconified.
It will deiconify on top the active desktop.
MWMDecor makes fvwm95 attempt to recognize and respect
the mwm decoration hints that applications occasionally
use.
MWMFunctions makes fvwm95 attempt to recognize and
respect the mwm prohibited operations hints that
applications occasionally use. HintOverride makes fvwm
shade out operations that mwm would prohibit, but it
lets you perform the operation anyway.
OLDecor makes fvwm attempt to recognize and respect the
olwm and olvwm hints that many older XView and OLIT
applications use.
UseStyle takes one arg, which is the name of another
style. That way you can have unrelated window names
easily inherit similiar traits without retyping. For
example: 'Style "rxvt" UseStyle "XTerm"'.
SkipMapping tells fvwm95 not to switch to the desk the
window is on when it gets mapped initially (useful with
StartsOnDesk).
Lenience instructs fvwm95 to ignore the convention in
the ICCCM which states that if an application sets the
input field of the wm_hints structure to False, then it
never wants the window manager to give it the input
focus. The only application that I know of which needs
this is sxpm, and that is a silly bug with a trivial
fix and has no overall effect on the program anyway.
Rumor is that some older applications have problems
too.
NoPPosition instructs fvwm95 to ignore the PPosition
field when adding new windows. Adherence to the
PPosition field is required for some applications, but
if you don't have one of those its a real headache.
RandomPlacement causes windows which would normally
require user placement to be automatically placed in
ever-so-slightly random locations. For the best of all
possible worlds use both RandomPlacement and
SmartPlacement.
SmartPlacement causes windows which would normally
require user placement to be automatically placed in a
smart location - a location in which they do not
overlap any other windows on the screen. If no such
position can be found user placement or random
placement will be used as a fall-back method. For the
best of all possible worlds use both RandomPlacement
and SmartPlacement.
An example:
# Change default fvwm95 behavior to no title-bars on windows!
# Also define a default icon.
Style "*" NoTitle,Icon unknown1.xpm, BorderWidth 4,HandleWidth 5
# now, window specific changes:
Style "Fvwm*" NoHandles,Sticky,WindowListSkip,BorderWidth 0
Style "Fvwm Pager" StaysOnTop, BorderWidth 0
Style "*lock" NoHandles,Sticky,StaysOnTop,WindowListSkip
Style "xbiff" Sticky, WindowListSkip
Style "FvwmButtons" NoHandles,Sticky,WindowListSkip
Style "sxpm" NoHandles
Style "makerkit"
# Put title-bars back on xterms only!
Style "xterm" Title
Style "rxvt" Icon term.xpm
Style "xterm" Icon rterm.xpm
Style "xcalc" Icon xcalc.xpm
Style "xbiff" Icon mail1.xpm
Style "xmh" Icon mail1.xpm, StartsOnDesk 2
Style "xman" Icon xman.xpm
Style "matlab" Icon math4.xpm, StartsOnDesk 3
Style "xmag" Icon magnifying_glass2.xpm
Style "xgraph" Icon graphs.xpm
Style "FvwmButtons" Icon toolbox.xpm
Style "Maker" StartsOnDesk 1
Style "signal" StartsOnDesk 3
Note that all properties for a window will be OR'ed
together. In the above example "FvwmPager" gets the
property StaysOnTop via an exact window name match but
also gets NoHandles, Sticky, and WindowListSkip by a
match to "Fvwm*". It will get NoTitle by virtue of a
match to "*". If conflicting styles are specified for
a window, then the last style specified will be used.
If the NoIcon attribute is set then the specified
window will simply disappear when it is iconified. The
window can be recovered through the window-list. If
Icon is set without an argument then the NoIcon
attribute is cleared but no icon is specified. An
example which allows only the FvwmPager module icon to
exist:
Style "*" NoIcon
Style "Fvwm Pager" Icon
Title
Does nothing. This is used to insert a title line in a
popup or menu.
Wait name
This built-in is intended to be used in fvwm95
functions only. It causes execution of a function to
pause until a new window name name appears. Fvwm95
remains fully functional during a wait. This is
particularly useful in the InitFunction if you are
trying to start windows on specific desktops:
AddToFunc InitFunction "I" exec xterm -geometry 80x64+0+0
+ "I" Wait xterm
+ "I" Desk 0 2
+ "I" Exec xmh -font fixed -geometry 507x750+0+0
+ "I" Wait xmh
+ "I" Desk 0 0
The above function starts an xterm on the current desk,
waits for it to map itself, then switches to desk 2 and
starts an xmh. After the xmh window appears control
moves to desk 0.
WindowList options
Generates a pop-up menu (and pops it up) in which the
title and (optionally) the geometry of each of the
windows currently on the desk top are shown. The
geometry of iconified windows is shown in brackets.
Selecting an item from the window list pop-up menu will
cause that window to be moved onto the desktop if it is
currently not on it, will move the desktop viewport to
the page containing the upper left hand corner of the
window, will de-iconify the window if it is iconified,
and will raise the window. The WindowList command can
take an optional argument list of one or more of the
following options, separated by spaces:
ShowAllDesks - All windows on all desktops (except
those listed in WindowSkipList directives) will be
shown. This is the default.
ShowCurrentDesk - Only windows on the current desktop
will be shown.
ShowDesk n - Only windows on desktop number n will be
shown.
ShowGeometry - When specified, the geometry of each
window will be added to the list. This option is off by
default.
UseWindowNames - The windows are listed using the
window (titlebar) name. This is the default
UseIconNames - The window's icon names is used instead
of the title name.
WindowFont fontname
Makes fvwm95 use font fontname instead of "fixed" for
window title-bars.
WindowsDesk new_desk
Moves the selected window the the desktop specified as
new_desk.
XORvalue number
Changes the value with which bits are XOR'ed when doing
rubber-band window moving or resizing. Setting this
value is a trial-and-error process.
+ Used to continue adding to the last specified function
or menu. See the discussion for AddToFunc and
AddToMenu.
KEYBOARD SHORTCUTS
All (I think) window manager operations can be performed
from the keyboard so mouseless operation should be possible.
In addition to scrolling around the virtual desktop by
binding the Scroll built-in to appropriate keys, pop-ups,
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 shift
key will cause the pointer movement to go in larger steps
and holding down the control key will cause the cursor
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.
SUPPLIED CONFIGURATION
A sample configuration file, .fvwm2rc95, is supplied with
the fvwm95 distribution. It is well commented and can be
used as a source of examples for fvwm95 configuration.
USE ON MULTI-SCREEN DISPLAYS
If the -s command line argument is not given, fvwm95 will
automatically start up on every screen on the specified
display. After fvwm95 starts each screen is treated
independently. Restarts of fvwm95 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.
BUGS
As of fvwm 0.99 there were exactly 39.342 unidentified bugs.
Identified bugs have mostly been fixed, though. Since then
9.34 bugs have been fixed. Assuming that there are at least
10 unidentified bugs for every identified one, that leaves
us with 39.342 - 9.32 + 10 * 9.34 = 123.402 unidentified
bugs. If we follow this to its logical conclusion we will
have an infinite number of unidentified bugs before the
number of bugs can start to diminish, at which point the
program will be bug-free. Since this is a computer program
infinity = 3.4028e+38 if you don't insist on double-
precision. At the current rate of bug discovery we should
expect to achieve this point in 3.37e+27 years. I guess I
better plan on passing this thing on to my children....
Known bugs can be found in the BUGS file in the
distribution, and in the TO-DO list.
AUTHOR
Robert Nation with help from many people, based on twm code,
which was written by Tom LaStrange. Rob has since 'retired'
from working on fvwm though, so Charles Hines maintains it's
care and feeding currently.