FVWM(1)
FVWM(1) π fvwm1 β the manual, bestie β¨
okay so this is the FVWM(1) manual page, and it's for fvwm1, aka the F(?) Virtual Window Manager for X11, version 1.x. Buckle up, it's giving retro window manager lore. π«Ά
β¨ NAME β¨
fvwm1 β F(?) Virtual Window Manager for X11, version 1.x
πΈ SYNOPSIS πΈ
fvwm1 [ options ]
π DESCRIPTION π
So fvwm1? It's a window manager for X11, periodt. It's a derivative of twm, but redesigned to minimize memory consumption, provide a 3-D look to window frames, and provide a simple virtual desktop. Memory consumption is estimated at about one-half to one-third the memory consumption of twm, due primarily to a redesign of twm's method of storing mouse bindings. In addition, many of the configurable options of twm have been removed. Gone. Not invited. π
The name "FVWM" used to stand for something, but the author forgot what. Feeble? Famous? Foobar? It doesn't really matter β this is an acronym based society anyway. π€·ββοΈ
π« STATUS OF THIS SOFTWARE π«
Bad news bestie: since the release of FVWM 2.2 in March 1999, this release is officially deprecated and no longer supported. Please do not report any bugs in this software β not the vibe. π
Also, for Debian users, the module manpages for this release of FVWM will be found as FvwmAudio1(1x) etc.
π₯οΈ SPECIAL NOTE FOR XFREE86 USERS π₯οΈ
XFree86 girlies, listen up: XFree86 provides a virtual screen whose operation can be confusing when used in conjunction with fvwm. With XFree86 all windows which appear on the virtual screen actually get drawn into video memory (whether or not they appear on the physical screen), so the virtual screen size is limited by available video memory. π
With fvwm's virtual desktop, windows which do not appear on the screen do not actually get drawn into video RAM. The size of the virtual desktop is limited to about 32,000 by 32,000 pixels, but it is probably impractical to use a virtual desktop more than about 5 times the visible screen in each direction. Note that memory usage is a function of the number of windows which exist β the size of the desktop makes no difference. β¨
When becoming familiar with fvwm it is recommended that you disable XFree86's virtual screen by setting the virtual screen size to the physical screen size. After you become familiar with fvwm you may want to re-enable XFree86's virtual screen. That's the character arc. π¦
Β©οΈ COPYRIGHTS Β©οΈ
Since fvwm is derived from twm code it shares twm'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, 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 πͺ
Fvwm puts a decorative border around most windows. This border consists of a bar on each side and a small "L" shaped section on each corner. There is an additional top bar called the title bar which is used to display the name of the window. In addition, there are up to 10 title-bar buttons. The top, side, and bottom bars are collectively known as the side-bars. The corner pieces are called the frame. It's giving architectural serve. π
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. Iconic.
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. iykyk.
π 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 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. Slay.
The size of the virtual desktops can be specified at start-up. 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 the current desktop can be displayed in a Pager, a miniature view of the current desktop. Windows which are not on the current desktop can be listed, along with their geometries, in a window list, accessible as a pop-up menu. Obsessed.
"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. Main character energy. π
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.
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, 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.
π INITIALIZATION π
During initialization, fvwm 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, fvwm will search for a file named .fvwmrc in the user's home directory. Failing that, it will look for /etc/X11/fvwm/system.fvwmrc for system-wide defaults. If that file is not found, fvwm will exit. No config, no vibes. π
Fvwm will set two environment variables which will be inherited by its children. 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 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. Periodt.
π¦ SHAPED WINDOWS π¦
If you typically use shaped windows such as xeyes or oclock, you have several options. You can make them all undecorated (NoBorder oclock and NoTitle oclock, for example) or you can use the default configuration and leave them decorated, in which case a decorative border and a solid-color backdrop are shown. Alternately, you can compile in the SHAPE extensions by changing a flag in the Makefile, in which case you get the shaped window with no backdrop, and a title bar floats above the window. The shaped window extensions increase the window manager's memory consumption by about 60 Kbytes when no shaped windows are present but have little effect when shaped windows are present. Spiffy but pricey, lowkey. πΈ
π ICONS π
The basic Fvwm 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 Makefile.noImake and the Imakefile. π¦
If both the SHAPE and XPM options are compiled in you will get shaped color icons, which are very spiffy. It's giving icon glow-up. β¨
π§© MODULES π§©
A module is a separate program which runs as a separate Unix process but transmits commands to fvwm to execute. Future releases are expected to provide a means for these modules to extract window information from fvwm. Users can write their own modules to do any weird or bizarre manipulations without affecting the integrity of fvwm itself. Write that weird module, bestie. π§
Modules MUST be spawned by fvwm so that it can set up two pipes for fvwm 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. No DIY spawning, the pipes gotta be fvwm-certified. π
Modules can be spawned during fvwm initialization via the Module option, or at any time during the X session by use of the Module built-in. 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 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. So don't spawn 300 modules and act surprised. π
Modules simply transmit text commands to the fvwm built-in command engine. Text commands are formatted just as in the case of a mouse binding in the .fvwmrc setup file. Certain auxiliary information is also transmitted, as in the sample module GoodStuff. The GoodStuff module is documented in its own man page. π
β¨ ICCCM COMPLIANCE β¨
ok so fvwm is trying its absolute best to be ICCCM 1.1 compliant π«Ά like it really wants that gold star. BUT β as of this (1.20l) release, colormap handling is not completely ICCCM compliant, so jot that down. π
and here's the other lil plot twist: ICCCM says it should be possible for applications to receive ANY keystroke. which is... literally not consistent with the keyboard shortcut approach that fvwm uses, and honestly that most other window managers use too. it's giving "we can't all have what we want" π
π§ M4 PREPROCESSING π§
ok if fvwm got compiled with the M4 option, then fvwm runs m4(1) to preprocess its setup files before it parses them. which means bestie... you can use m4 macros to do operations at runtime. β¨ and that makes it super duper easy to work with different displays that have different characteristics. iconic.
so like, depending on your mood, maybe you want different color schemes? π one way to do that is use -m4opt to specify your mood. sunny mood? use -m4opt -DSunny. dark mood? use -m4opt -DDark. then your .fvwmrc file might contain:
ifdef(`Sunny',`
StdForeColor Black
StdBackColor LightSkyBlue
HiForeColor yellow
HiBackColor PeachPuff1
PagerBackColor BlanchedAlmond ')
ifdef(`Dark',`
StdForeColor Black
StdBackColor #60a0c0
HiForeColor black
HiBackColor #c06077
PagerBackColor #5c54c0
PagerForeColor orchid
StickyForeColor Black
StickyBackColor #60c0a0 ')
the way that's such a mood-based setup, i'm obsessed. π
here are the m4 symbols that fvwm predefines for you:
BITS_PER_RGBβ the number of significant bits in an RGB color. (that's log base 2 of the number of distinct colors that can be created. and lowkey this is often different from the number of colors that can be displayed at once, so don't get it twisted. π)CLASSβ your visual class. it'll return one ofStaticGray,GrayScale,StaticColor,PseudoColor,TrueColor,DirectColor, or, if it can't figure out what you have,NonStandard.CLIENTHOSTβ the machine that is running the clients.COLORβ this one's either'Yes'or'No'. it's just a lil wrapper around theCLASSdefinition. returns'Yes'on*Colorand'No'onStaticGrayandGrayScale.FVWMDIRβ set to the path where the modules were configured to be installed.FVWM_VERSIONβ a string containing the version of fvwm.HEIGHTβ the height of your display in pixels.HOMEβ the user's home directory. obtained from the environment.HOSTNAMEβ the canonical hostname running the clients (ie. a fully-qualified version ofCLIENTHOST).OPTIONSβ a string of compile time options used. each option is separated from the other by a space.PLANESβ the number of bit planes your display supports in the default root window.RELEASEβ the release number of your X server. for MIT X11R5 this is5.REVISIONβ the X minor protocol revision. as seen byProtocolRevision(3).SERVERHOSTβ set to the name of the machine that is running the X server.TWM_TYPEβ tells which twm offshoot is running. it will always be set to the string"fvwm"in this program. this is useful for protecting parts of your.twmrcfile that fvwm proper won't understand (likeWorkSpaces) so that it is still usable with other twm programs. πUSERβ the name of the user running the program. obtained from the environment.VENDORβ the vendor of your X server. for example:MIT X Consortium.VERSIONβ the X major protocol version. as seen byProtocolVersion(3).WIDTHβ the width of your display in pixels.X_RESOLUTIONβ the X resolution of your display in pixels per meter.Y_RESOLUTIONβ the Y resolution of your display in pixels per meter.
ngl you might well find that if you research the m4(1) manual well and actually understand the power of m4, this is gonna be a very useful and powerful tool. π₯ BUT β and this is a big but β if you use any of the symbols which are predefined by m4, you are in SEVERE DANGER! π for example, Sun's m4 predefines include, so if you use that name in your .fvwmrc, you are simply out of luck. the correct solution to this problem is to put a set of quotes around the troublesome word: `include'.
to help alleviate this problem, these options may be useful. to change the quoting characters used by m4, use the options -m4-squote and -m4-equote. be sure to specify both options otherwise m4 will be confused, fr fr. when these are given, a changequote macro is given before the users fvwmrc file is processed.
β οΈ NOTE: Some versions of m4 are broken with respect to changing quoting characters and included files. When the quoting strings are longer than one character, the macro"include(<<file>>)", where"<<"and">>"are the quoting characters, contains extra characters around the contents of the included file. This will confuse fvwm. SunOS 4.1.3 is known to have this problem. π
if you're using GNU m4, an additional option is available. by specifying -m4-prefix when starting fvwm, m4 is instructed to prefix all builtin macros with m4_. thus, include becomes m4_include. slay. β¨
the availability of the m4 preprocessing is subject to the compilation define M4.
π OPTIONS π
these are the command line options that are recognized by fvwm:
-fconfig_file β makes fvwm use config_file in the user's home directory instead of.fvwmrcas the window manager configuration file.-debugβ puts X transactions in synchronous mode, which dramatically slows things down, but guarantees that fvwm's internal error messages are correct. it's giving "slow but honest." π-ddisplayname β manage the display called "displayname" instead of the name obtained from the environment variable$DISPLAY.-sβ on a multi-screen display, run fvwm only on the screen named in the$DISPLAYenvironment variable or provided through the-doption. normally, fvwm will attempt to start up on all screens of a multi-screen display.-versionβ print the version of fvwm to stderr.
the following options are available only if fvwm is compiled with the M4 option. π§
-no-m4β do not use m4 to preprocess the.fvwmrc. the default is to preprocess the startup file usingm4(1).-m4-prefixβ if GNU m4 is available, cause m4 to prefix all builtin commands withm4_.-m4optoption β pass this option to m4. the option can be any string of characters without spaces. this option can occur multiple times. if GNU m4 is available, DO NOT pass the-Poption here. use-m4-prefixinstead. π-m4-squotestring β use this given string as the starting quote characters. you must also specify-m4-equote.-m4-equotestring β use this given string as the ending quote characters. you must also specify-m4-squote.-m4progpath β use path as the location of the desired m4 processor. by default,m4progis set to"m4"which must exist somewhere on the user's path. this option allows the user to explicitly choose the version of m4 to use.
πΈ CONFIGURATION FILES πΈ
the configuration file is used to describe mouse and button bindings, colors, the virtual display size, and related items. this section describes the configuration options. π
lines beginning with '#' will be ignored by fvwm. lines starting with '*' are expected to contain module configuration commands (rather than configuration commands for fvwm itself).
AppsBackingStoreβ causes application windows to request backing store. this option compromises the ICCCM compliance of the window manager. while this option can speed things up in an X-terminal, where redraws of windows are expensive, it may not help much on regular workstations.AutoRaisedelay β enables auto-raising of windows and specifies the time delay (in milliseconds) between when a window acquires the input focus and when it is automatically raised. this option works in focus-follows-mouse mode, and in click-to-focus mode if the focus is changed by clicking in the application window instead of a decoration window. in click-to-focus mode, you can suppress the raise-on-focus behavior by specifying a negative delay value. β¨BackingStoreβ causes fvwm decorations to request backing store. see the discussion onAppsBackingStore.BoundaryWidthWidth β changes the boundary width on decorated windows to the specified value. the default is6pixels.
the Style command provides another (more general) method for specifying BoundaryWidth.
ButtonStylebutton# WidthxHeight β defines the rectangular decoration shape to be used in a title-bar button. button# is the title-bar button number, and is between0and9. a description of title-bar button numbers is given in theMousesection below. Width is the percentage of the full button width which is to be used. Height is the percentage of the full height to be used. negative numbers cause the shading to be inverted.
and that's not all! if you use a line like:
ButtonStyle : 2 4 50x30@1 70x70@0 30x70@0 50x30@1
then the button 2 decoration will use a 4-point pattern consisting of a line from (x=50,y=30) to (70,70) in the shadow color (@0), and then to (30,70) in the shadow color, and finally to (50,30) in the highlight color (@1). is that too confusing? π see the sample system.fvwmrc. π
CenterOnCirculateβ when circulating, the desktop page containing the window which the pointer is moving to is automatically selected. ifCenterOnCirculateis selected then fvwm will do its best to center the target window in the desktop viewport, rather than just lining up to the closest page. π¦
CirculateSkipwindowname β okay so this one makes windows with that name get skipped over whenever thecirculate-uporcirculate-downfunctions fire. And windowname can be a window's name or its class, either one works π¦. Also lowkey: theStylecommand gives you another, more general way to setCirculateSkipif you wanna go that route.CirculateSkipIconsβ makes circulate and warp operations skip over iconified windows. That's it, that's the whole vibe π .ClickTimedelay β sets the max delay (in milliseconds) between a button press and a button release for theFunctionbuilt-in to count the whole thing as a mouse click. Default is 150 milliseconds β±οΈ.ClickToFocusβ normally your keyboard input goes to whatever window the mouse pointer is chilling in. But if you set this, keyboard input stays with one window until you actually click the mouse with the pointer sitting in a new window. Focus loyalty, we love to see it π.Cursorcursor_num cursor_type β the manual itself calls this "a very awkward way of changing cursor styles" and honestly? Respect the honesty π. cursor_num tells which cursor you're changing, and it's a number between 0 and 12, like this:
0 POSITION - used when initially placing windows.
1 TITLE - used in a window title-bar.
2 DEFAULT - used in windows that don't set their cursor.
3 SYS - used in one of the title-bar buttons.
4 MOVE - used when moving or resizing windows.
5 WAIT - used during an EXEC builtin command.
6 MENU - used in menus.
7 SELECT - used for various builtin commands such as iconify.
8 DESTROY - used for DESTROY and DELETE built-ins.
9 TOP - used in the top side-bar of a window.
10 RIGHT - used in the right side-bar of a window.
11 BOTTOM - used in the bottom side-bar of a window.
12 LEFT - used in the left side-bar of a window.
13 TOP_LEFT - used in the top left corner of a window.
14 TOP_RIGHT - used in the top right corner of a window.
15 BOTTOM_LEFT - used in the bottom left corner of a window.
16 BOTTOM_RIGHT - used in the bottom right corner of a window.
(not me noticing it says "between 0 and 12" and then lists up to 16 π keeping it exactly as written, no cap)
The cursor_type argument is a number that tells fvwm which cursor shape to use. The available numbers live in /usr/include/X11/cursorfont.h and are currently even numbers between 0 and 152. At the current time, these cursor types are available:
0 X_cursor 2 arrow
4 based_arrow_down 6 based_arrow_up
8 boat 10 bogosity
12 bottom_left_corner 14 bottom_right_corner
16 bottom_side 18 bottom_tee
20 box_spiral 22 center_ptr
24 circle 26 clock
28 coffee_mug 30 cross
32 cross_reverse 34 crosshair
36 diamond_cross 38 dot
40 dotbox 42 double_arrow
44 draft_large 46 draft_small
48 draped_box 50 exchange
52 fleur 54 gobbler
56 gumby 58 hand1
60 hand2 62 heart
64 icon 66 iron_cross
68 left_ptr 70 left_side
72 left_tee 74 leftbutton
76 ll_angle 78 lr_angle
80 man 82 middlebutton
84 mouse 86 pencil
88 pirate 90 plus
92 question_arrow 94 right_ptr
96 right_side 98 right_tee
100 rightbutton 102 rtl_logo
104 sailboat 106 sb_down_arrow
108 sb_h_double_arrow 110 sb_left_arrow
112 sb_right_arrow 114 sb_up_arrow
116 sb_v_double_arrow 118 shuttle
120 sizing 122 spider
124 spraycan 126 star
128 target 130 tcross
132 top_left_arrow 134 top_left_corner
136 top_right_corner 138 top_side
140 top_tee 142 trek
144 ul_angle 146 umbrella
148 ur_angle 150 watch
152 xterm
coffee_mug, gumby, pirate, umbrella β the 90s really said "we contain multitudes" βπ΄ββ οΈβ¨
DecorateTransientsβ transient windows are normally left undecorated, and this makes them get the usual fvwm decorations instead. Heads up tho: some pop-up windows, like thextermmenus, aren't managed by the window manager at all, so they still don't get decorations. Not fvwm's fault bestie π€·ββοΈ.DeskTopScaleScale β defines the virtual desktop scale with respect to the screen.DeskTopSizeHorizontalxVertical β defines the virtual desktop size, measured in units of the physical screen size.DontMoveOffβ stops windows from being moved off the desktop, or from being initially placed off it. Little warning tho: a few programs will not work correctly if you use this option π. And it only keeps windows from being completely lost off the edge β it insists on keeping 16 pixels on the desktop, but does not care even a little bit about keeping the whole window on the desk. If you hate windows hanging half off your screen, go peek atEdgeResistanceinstead.EdgeResistancescrolling moving β tells fvwm how hard it should be to change the desktop viewport by shoving the mouse over the edge of the screen, and how hard it should be to drag a window over the edge of the screen.
The first parameter tells how many milliseconds the pointer has to spend on the screen edge before fvwm will move the viewport. This is for the people running "EdgeScroll 100 100" who keep accidentally flipping pages when they truly did not mean to π€.
The second parameter tells how many pixels over the edge of the screen a window's edge has to move before it actually moves partially off the screen.
Note that with "EdgeScroll 0 0" it's still possible to move or resize windows across the edge of the current screen. If you make the first parameter to EdgeResistance 10000, that type of motion becomes impossible. With EdgeResistance less than 10000 but greater than 0, moving over pages becomes difficult but not impossible. Difficult-but-not-impossible is honestly such a mood.
EdgeScrollhorizontal vertical β specifies the percentage of a page to scroll when the cursor hits the edge of a page. Don't want any paging or scrolling when you hit the edge? Drop"EdgeScroll 0 0"in your.fvwmrcfile πΈ. Want whole pages?"EdgeScroll 100 100". Both horizontal and vertical should be positive numbers.
Oh and here's the fun part: if the horizontal and vertical percentages get multiplied by 1000, then scrolling will wrap around at the edge of the desktop. So if "EdgeScroll 100000 100000" is used, fvwm scrolls by whole pages and wraps around at the edge of the desktop. It's giving infinite corridor energy π.
Fontfontname β makes fvwm use font fontname instead of"fixed"for menus, the resize indicators, and icon labels (that last one only ifIconFontisn't specified).FunctionFunctionName β this starts the definition of a complex function, built out of fvwm's built-in functions, which you can later bind to a mouse button or a key. FunctionName must be enclosed in quotes β do not skip the quotes bestie, she means it π.
Function entries go on the lines following the Function keyword, and the definition ends with the keyword EndFunction. Each entry is specified like in the example below: the first word on each line is the built-in function to perform, followed by the type of event that should trigger the action (enclosed in quotes), followed by any additional arguments that built-in needs. Menus can be specified by using the Popup built-in, as long as the menu was defined earlier in the configuration file.
The trigger actions that get recognized are Immediate, Motion, Click, and DoubleClick. Immediate actions run as soon as the function is activated, even if no window has been selected. If there are any actions that aren't immediate, fvwm waits to see whether the user is clicking, double-clicking, or dragging the mouse. Once that decision is made, fvwm executes only the built-ins from the function definition whose trigger action matches what the user actually did. Selective queen β¨.
So if the example below were bound to button 1 in a window title-bar, then when button 1 is pressed, fvwm would wait 150 msec to see if the button gets released. Not released? fvwm starts a move operation, and when that move is complete a raise operation is performed. Button release detected? Then fvwm waits another 150 msec for a second click. Only one click detected β the window gets raised. Two clicks detected β the window gets alternately raised and lowered. And that 150 msec wait duration can be changed with the ClickTime option.
Function "Move-or-Raise"
Move "Motion"
Raise "Motion"
Raise "Click"
RaiseLower "DoubleClick"
EndFunction
One thing to clock: the clicking and double-clicking concepts do not carry through to using keyboard shortcuts π«β¨οΈ.
Two special functions exist: InitFunction and RestartFunction. The InitFunction gets called when fvwm is started for the first time in any X session, and it's great for starting modules, setting background patterns, and beginning programs. The restart function gets called when fvwm is restarted β it can be used to start modules and set background patterns, but it probably should not be used to start programs π.
HiBackColorcolorname β sets the background color of the selected window to colorname. On a monochrome screen this option gets ignored and white is used instead.HiForeColorcolorname β sets the color of the selected window's title to colorname. On a monochrome screen this option gets ignored and black is used instead.
β¨ BUILT-IN COMMANDS β¨
Icon windowname bitmap-fileβ okay bestie, this command is literally the glow-up for your icons. π It specifies the bitmap to be used for a window when it is iconified. Thewindownamecan be an application's window name or class name and must be enclosed in quotes. Thebitmap-fileis either the full path name to a standard X11 bitmap file or a file in theIconPathorPixmapPath. The specified bitmap/pixmap is used in preference to any icon supplied by the window itself. No cap, it's giving main character energy.
If fvwm is compiled with XPM support for color icons then bitmap can be an XPM pixmap file.
windowname should be enclosed in double quotes but bitmap-file should not. Environment variables should not be used in the bitmap-file specification.
If windowname is an empty string then the specified file is the default icon, and will be used if no other icon bitmap or pixmap can be found:
Icon "" my-favorite-icon
The Style command provides another (more general) method for specifying Icon.
IconBox left top right bottomβ this defines regions of the screen in which to place icons. Up to four icon boxes can be defined. If anIconBoxline is provided then icons will automatically be placed in them, if possible. Each time a window is iconified a new place is found for it. Icon boxes are searched for space going left to right, then top to bottom. Icons will not be auto-placed on top of other icons but they may be placed underneath application windows. Ifleftorrightis negative, then fvwm will add the screen width to it. Iftoporbottomis negative, then fvwm will add the screen height to it. NOTE:-0is not parsed as the right or bottom pixel on the screen. You have to use-1instead. iykyk, that's a little gotcha.
If no IconBox line is provided or all icon boxes are full, then fvwm will place icons near the current pointer location.
IconFont fontnameβ makes fvwm use fontfontnamefor icon labels. If omitted, the menu font (specified by theFontconfiguration parameter) will be used instead. Slay.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. Note: if the M4 patches are included when fvwm is built, then m4 will want to mangle the word "include" which will frequently show up in theIconPathorPixmapPathcommand. To fix this addundefine(`include')prior to theIconPathcommand. M4 being messy, fr fr.Key keyname Context Modifiers Functionβ binds a keyboard key to a specified fvwm built-in function. Definition is the same as for a mouse binding except that the mouse button number is replaced with a key name. Thekeynameis one of the entries from/usr/include/X11/keysymdef.h, with the leadingXK_omitted. TheContextandModifiersfields are defined as in the mouse binding.
Binding a key to a title-bar button will not cause that button to appear unless a mouse binding also exists. Periodt, don't forget that.
Lenienceβ so the ICCCM states that if an application sets the input field of thewm_hintsstructure toFalse, then it never wants the window manager to give it the input focus. The only application that I know of which needs this issxpm, 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.
If this parameter is set then fvwm will ignore this ICCCM convention. Lenience is the vibe.
MenuBackColor colornameβ sets the menu background color. When using monochrome this option is ignored. This option is only available if fvwm is compiled withMENUCOLORdefined. Iconic.MenuForeColor colornameβ sets the menu foreground color. When using monochrome this option is ignored. This option is only available if fvwm is compiled withMENUCOLORdefined.MenuStippleColor colornameβ sets the color for shaded out entries in menus (for functions which are not allowed on the currently selected window). When using monochrome this option is ignored and a stipple pattern is used. This option is only available if fvwm is compiled withMENUCOLORdefined. Shade out, but make it cute.Module ModuleNameβ specifies a module which should be spawned during initialization. At the current time the available modules areFvwmAudio,FvwmBacker,FvwmBanner,FvwmClean,FvwmDebug,FvwmIconBox,FvwmIdent,FvwmPager,FvwmSave,FvwmSaveDesk,FvwmScroll,FvwmWinList, andGoodStuff. These modules have their own man pages.Modulecan also be used as a built-in. Modules can be short lived transient programs or, likeGoodStuff, 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. Bestie, that's a whole squad.ModulePathβ specifies a colon separated list of paths for fvwm to search when looking for a module to load. Individual directories do not need trailing slashes. Simple and clean.Mouse Button Context Modifiers Functionβ defines a mouse binding.Buttonis the mouse button number. IfButtonis zero then any button will perform the specified function.Contextdescribes where the binding applies. Valid contexts areRfor the root window,Wfor an application window,Tfor a window title bar,Sfor a window side, top, or bottom bar,Ffor a window frame (the corners),Ifor an Icon window, or0through9for title-bar buttons, or any combination of these letters.Ais for any context except for title-bar buttons. For instance, a context ofFSTwill 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 fvwm'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. This is the moment, periodt.
MWMBordersβ substitutes MWM style 1 pixel wide relief lines instead of fvwm's 2 pixel borders. Pixel diet, slay.MWMButtonsβ disables button press feedback for all decorations except the title bar and title-bar buttons, as in MWM.MWMDecorHintsβ causes fvwm to read theMOTIF_WM_HINTSatom from application windows and to parse and attempt to replicate the Motif behavior with regard to window decorations. Note that mwm allows function hints to affect window decorations but these effects are not replicated by this option. Motif vibes, but make it fvwm.MWMFunctionHintsβ causes fvwm to read theMOTIF_WM_HINTSatom from application windows and to parse and attempt to replicate the Motif behavior with regard to allowed window functions. Unlike mwm, which simply removes prohibited functions from the window's menus, fvwm simply shades out the prohibited functions. Also, because fvwm implements some functions in user defined macros that mwm implements internally, the mapping of prohibited functions is partially based on the menu item label.MWMHintOverrideβ ifMWMFunctionHintsis used then maximization and iconfication are prohibited for transients. Also, windows can specify that the window manager should not destroy or delete them. Since these MWM rules are kind of stupid, especially with regard to the transient windows, I provide thisMWMHintOverrideoption. When it is used menu items will be shaded out if MWM would prohibit their use, but the user can go ahead and select that item and it will operate as expected.
The override should be used cautiously because some applications will break if you override their mwm hints. Warning bestie, this is not a drill.
MWMMenusβ substitutes MWM look and feel menus in place of the standard fvwm versions. This option also triggers a few other mwm-style options, such as centering the size/resize window on the screen, instead of leaving it in the upper left, and switches the resize-on-initial-placement trigger action to shift-button-1 instead of the twm style press-button-2 MWM ate that.NoBorder windownameβ keeps fvwm from putting decorative borders on windows namedwindowname. This command has no effect on the title-bar. This is handy for clocks and similar gadgets that you don't want to take up too much space.windownamecan be a window's name or its class.
If you specify both NoBorder windowname and NoTitle windowname for the same window in your .fvwmrc file the window will be completely undecorated.
Windowname can contain the wildcards "*" and "?" which match window names in the normal Unix filename matching manner. Actual "*", "?", and "\" characters in a window name can be entered by preceding the character with a "\".
The Style command provides another (more general) method for specifying NoBorder. Clean girl aesthetic.
NoBoundaryWidth Widthβ changes the width of the decorations for windows with no titles and no borders. The default is1. Any positive or zero value is acceptable. Decorations for these undecorated windows have the same context as the side-bars on normally decorated windows.
The Style command provides another (more general) method for specifying NoBoundaryWidth. Width vibe check passed.
NoPPositionβ tells fvwm to just ignore thePPositionfield when it's adding new windows, bestie. Some apps literally need that field respected, but if you're not running one of those, honestly it's giving headache. πNoTitlewindowname β stops fvwm from putting a title-bar in the decorations for windows named windowname. So handy for clocks and lil gadgets that you don't want hogging space. windowname can be a window's name or its class.
windowname can contain the wildcards * and ? which match window names in the normal Unix filename matching manner. Actual *, ?, and \ characters in a window name can be entered by preceding the character with a \.
The Style command provides another (more general) method for specifying NoTitle.
OpaqueMovepercentage β tells fvwm the max size window where opaque window movement should be used. The percentage is percent of the total screen area. WithOpaqueMove 0all windows get moved using the traditional rubber-band outline. WithOpaqueMove 100all windows get moved as solid windows. The default isOpaqueMove 5, which lets small windows move in an opaque manner but big windows get moved as rubber-bands. πOpaqueResizeβ causes resize operations to be done with the window itself instead of an outline. solid mode, no ghosting β¨PagerX_Location Y_Location β enables a paging style of moving across the desktop. A Pager window (not a pop-up, okay?) will appear at (X_Location, Y_Location). Miniature versions of all the non-sticky windows on the virtual desktop are shown in the pager. The color of the miniature version is the same as the color of the full-size window's border. π¦
In the Pager window, pressing mouse button 1 will move the desktop viewport to the selected page (in click-to-focus mode; it will also move the keyboard focus to the window whose miniature you click on). Pressing button 2 on a window in the pager will begin a window move, using the miniature to quickly move the window anywhere on the desktop. Pressing button 3 will move the top-left corner of the viewport to the location of the button press, even if it does not line up with a page. Dragging button 3 will cause the selected viewport to scroll as you move the pointer. The Pager is automatically sticky but does not automatically stay on top.
PagerForeColorcolorname β makes the pager foreground color be colorname instead of black. This is the color used to highlight the current viewport in the pager window. On a monochrome screen this option is ignored. If theNO_PAGERoption is set when building fvwm this option is unavailable. πPagerBackColorcolorname β makes the pager background color be colorname instead of white. On a monochrome screen this option is ignored. If theNO_PAGERoption is set when building fvwm this option is unavailable.PagerFontfontname β makes fvwm use font fontname for writing window icon names in the window's representation in the pager. If this option is omitted no names are written in the pager windows. π€PagingDefaultpagingdefaultvalue β tells fvwm if it should start up with paging enabled or disabled.PagingDefault 0will start fvwm with paging disabled;PagingDefault 1will start fvwm with paging enabled by default. βPixmapPathpath β 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. πPopupPopupName β starts the definition of a pop-up menu which will later be bound to a mouse button or key. PopupName must be enclosed in quotes. Menu entries are included on lines following thePopupkeyword. The menu definition ends with the key wordEndPopup. Menu entries are specified as shown in the following example. The first word on each line is the built-in function which will be performed, followed by the caption (enclosed in quotes) which will be shown in the menu, followed by any additional arguments needed by the built-in function. Sub-menus can be specified by using thePopupbuilt-in as long as the sub-menu was defined earlier in the configuration file.
Popup "Window Ops"
Title "Window Ops"
Move "Move"
Resize "Resize"
Raise "Raise"
Lower "Lower"
Iconify "(De)Iconify"
Nop " "
Destroy "Destroy"
Title "HARDCOPY"
Exec "Hardcopy" exec xdpr &
Exec "Hardcopy RV" exec xdpr -rv &
EndMenu
Okay bestie listen CLOSELY: if a tab character is embedded in the caption of a menu entry then the text following the tab will be entered into a second column in the menu and the entire menu will be left-adjusted. This is intended for shortcut labeling. The tab character must really be a tab. If it is expanded into spaces it will not work! π
For example:
Popup "Window Ops"
Title "Window Ops Alt-F1"
.
.
.
Is the start of a left adjusted menu. Alt-F1 will be placed toward the right side of the menu.
Shortcut keys may be specified in the menu definition by preceding the character with an ampersand. The ampersand will not be displayed but the character after it will be displayed underlined, and if the user presses the corresponding key then that item will be activated as if the user had clicked on it with the mouse. Only alphabetic and numeric characters may be used as shortcut keys. The shift state of the keyboard is ignored when testing shortcut characters. For example:
Popup "Window Ops"
Maximize "Ma&ximise" 100 100
EndMenu
When this menu is popped up the x will be underlined and pressing the x key will cause the current window to be maximized. Shortcut keys are not operative unless MENU_HOTKEYS was defined when building fvwm. If WINDOWLIST_HOTKEYS was also defined then hot keys are automatically added to the WindowList when it is displayed. π₯
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 bothRandomPlacementandSmartPlacement. β¨SaveUndersβ causes the fvwm decoration frames to request save-unders. This can significantly improve the performance during opaque moves but it causes a significant increase in memory usage. π«ΆSloppyFocusβ this focusing mode is like focus-follows-mouse (the default) except that the focus will not be removed from a window until your mouse enters a new window. Exiting a window to enter the root window will leave the focus unchanged. π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 bothRandomPlacementandSmartPlacement. π§StartsOnDeskwindowname desk-number β this command causes windows whose name or class is windowname to be initially placed on desktop number desk-number. windowname should be enclosed in double quotes. If the window requires interactive placement, an outline will be displayed on the current desk but the window will appear on the specified desk. π
windowname can contain the wildcards * and ? which match window names in the normal Unix filename matching manner. Actual *, ?, and \ characters in a window name can be entered by preceding the character with a \.
The Style command provides another (more general) method for specifying StartsOnDesk.
StaysOnTopwindowname β these windows always try to stay on top of the other windows. This might be handy for clocks or mailboxes that you would always like to be visible. If the window is explicitly lowered it will not try to force its way back to the top until it is explicitly raised. windowname can be a window's name or its class. π
windowname can contain the wildcards * and ? which match window names in the normal Unix filename matching manner. Actual *, ?, and \ characters in a window name can be entered by preceding the character with a \.
The Style command provides another (more general) method for specifying StaysOnTop.
StdBackColorcolorname β sets the background color for menus and non-selected windows to colorname. When using a monochrome screen this option is ignored and white is used.
The Style command provides another (more general) method for specifying StdBackColor.
StdForeColorcolorname β sets the foreground color for menus and non-selected window titles to colorname. When using a monochrome screen this option is ignored and black is used.
The Style command provides another (more general) method for specifying StdForeColor.
StickyBackColorcolorname β sets the background color for non-selected sticky windows to colorname. When using a monochrome screen this option is ignored and white is used. Only available if-DMORE_COLORSis used when compiling. π¨StickyForeColorcolorname β sets the foreground color for non-selected sticky window titles to colorname. When using a monochrome screen this option is ignored and black is used. Only available if-DMORE_COLORSis used when compiling. π¨Stickywindowname β Sticky windows "stick to the screen's glass." That is, they don't move the the viewport into the virtual desktop changes. windowname can be a window's name or its class. π¦
windowname is allowed to have wildcards in it, bestie β * and ? β and they do their normal Unix filename matching thing against window names. And if you genuinely need a literal *, ? or \ inside a window name? Just put a \ in front of the character. Escaping, we love her. π¦
The Style command is another, more general way to get Sticky going.
StickyIcons
Makes icons permanently stuck to the screen's glass πͺβ¨ β like, your icons follow you around the desktop, everywhere you go. The second a window gets de-iconified it gets un-stuck. Some people find this a genuinely useful way of moving windows around. It's giving "I bring my icons with me." π
StubbornIcons
This one tweaks de-iconification behavior a lil bit. Instead of windows always de-iconifying themselves onto the current page, they de-iconify back into their original position. Stubborn queen behavior, honestly. π
StubbornIconPlacement
When you use it with IconBoxes, it makes icons dodge each other β no icon will place itself underneath existing windows. Personal space respected. π
StubbornPlacement
When you're using SmartPlacement, this makes new windows avoid placing themselves over icons.
Style windowname options
okay so this command is the glow-up replacement for a whole pile of old ones: NoBorder, NoTitle, StartsOnDesk, Sticky, StaysOnTop, Icon, WindowListSkip, CirculateSkip, SuppressIcons, BoundaryWidth, NoBoundaryWidth, StdForeColor, and StdBackColor. One single flexible, comprehensive command instead of all of those. Slay. π₯
You use it 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 get matched in the usual Unix filename manner.
options is a comma separated list containing some or all of the keywords BorderWidth, HandleWidth, NoIcon/Icon, NoTitle/Title, NoHandles/Handles, WindowListSkip/WindowListHit, CirculateSkip/CirculateHit, StaysOnTop/StaysPut, Sticky/Slippery, StartIconic/StartNormal, Color, ForeColor, BackColor, StartsOnDesk/StartsAnyWhere, IconTitle/NoIconTitle, and NoButton/Button.
Some of those are listed as style-option/opposite-style-option pairs. The opposite-style-option β for the ones that have one β describes the fvwm default behavior, and you can use it if you wanna change the fvwm default behavior. iykyk π
Iconβ takes an (optional) unquoted string argument, which is the icon bitmap or pixmap to use.StartsOnDeskβ takes a numeric argument, which is the desktop number the window should be initially placed on.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.ButtonandNoButtonβ take a numeric argument, which is the number of the title-bar button to include/omit.Colorβ takes two arguments. First one is the window-label text color, second one is the window decoration's normal background color. The two colors are separated with a slash. If using a slash causes problems, you can use the separateForeColorandBackColoroptions instead.
An example:
# Change default fvwm 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 "GoodStuff" NoHandles,Sticky,WindowListSkip
Style "sxpm" NoHandles
Style "makerkit"
# Put title-bars back on xterms only!
Style "xterm" Title, Color black/grey
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 "GoodStuff" Icon toolbox.xpm
Style "Maker" StartsOnDesk 1
Style "signal" StartsOnDesk 3
Important vibe check: all the properties for a window get OR'ed together. In the example above,"FvwmPager"picks up the propertyStaysOnTopfrom an exact window name match, but it also picks upNoHandles,Sticky, andWindowListSkipby matching"Fvwm*". And it getsNoTitleby virtue of matching"*". So yeah β if conflicting styles get specified for a window, the last style specified is the one that wins. Last one standing, periodt. π
If the NoIcon attribute is set, then the specified window will simply disappear when it's iconified. (You can still recover it through the window-list, don't panic π«Ά). If Icon is set without an argument, then the NoIcon attribute is cleared but no icon is specified. Here's an example that lets only the FvwmPager module icon exist:
Style "*" NoIcon
Style "Fvwm Pager" Icon
SuppressIcons
Stops icon windows from ever being created or drawn. When you use it together with the window-list, you basically get a sort of icon manager. β¨
The Style command is another, more general way to get SuppressIcons.
WindowFont fontname
Makes fvwm use the font fontname instead of "fixed" for the window title bar.
WindowListSkip windowname
Makes windows with the indicated name get left out of the window list. Bye bestie π
Windowname can contain the wildcards * and ?, which match window names in the normal Unix filename matching manner. Actual *, ?, and \ characters in a window name can be entered by preceding the character with a \.
The Style command is another, more general way to get WindowListSkip.
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. Fr fr, just poke at it until it feels right. π
π BUILT IN FUNCTIONS π
Fvwm supports a whole set of built-in functions, and you can bind them to keyboard or mouse buttons. Let's go through them one by one, bestie. π
Beep
Makes the computer beep. That's it. That's the function. π
CirculateDown [ name window_name ]
Causes the pointer to move to the next window in the list of windows that don't have CirculateSkip specified.
If the optional arguments are supplied, then the focus moves to the first window whose name (or icon name or class) matches window_name. The optional argument name is required if window_name is supplied and is enclosed in quotes. This argument is the name which appears in menus if the function is called from a menu, but it serves no purpose if the function isn't called from a menu.
CirculateUp [ name window_name ]
Causes the pointer to move to the previous window in the list of windows that don't have CirculateSkip specified.
If the optional arguments are supplied, then the focus moves to the first window whose name (or icon name or class) matches window_name. The optional argument name is required if window_name is supplied and is enclosed in quotes. This argument is the name which appears in menus if the function is called from a menu, but it serves no purpose if the function isn't called from a menu
Here's an example that moves the focus to an xterm window when Alt-F1 is pressed:
Key F1 A M CirculateUp "whatever" xterm
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 doesn't understand the delete window protocol, then the window is destroyed. No thoughts, just gone. π
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 the 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.
Heads up! The CursorMove function should not be called from pop-up menus.
Delete
Sends a message to a window asking that it remove itself β which frequently causes the application to exit. Politely asking it to leave the group chat. πͺ
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?).
Destroy
Destroys a window. Guaranteed to get rid of the window, but it's a fairly violent way to terminate an application. Like, it works, but at what cost π
Exec name command
Executes command. command is not quoted but name is. name is the name that appears in a menu, if that's where the function is called from. name is required even if the function is not called from a menu.
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" exec rxvt -fg yellow -bg blue -e /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. This function is primarily for use with a module such as FvwmWinList. π―
Function
Used to bind a previously defined function to a key or mouse button. Reusing your faves, we stan. π«Ά
okay bestie, we're still in the built-in functions zone, so buckle up because there's a lot more where that came from π
Real quick, here's a little binding glow-up: this next example hooks mouse button 1 up to a function called "Move-or-Raise", and its definition was literally handed to you earlier in this man page as an example. Once you do this binding, fvwm runs the move-or-raise function every single time button 1 gets pressed in a window title-bar. no cap.
Mouse 1 T A Function "Move-or-Raise"
GotoPage x yβ moves the desktop viewport to page (x,y). Upper left page is (0,0), upper right is (N,0) whereNis one less than however many horizontal pages you currently have set in theDeskTopSizecommand. Lower left page is (0,M), lower right page is (N,M), andMis the desktop's vertical size as specified inDeskTopSize. Big warning bestie: theGotoPagefunction should not be used in a pop-up menu.Iconify [ value ]β iconifies a window if it's not already iconified, or de-iconifies it if it is already iconified. If you pass the optional argumentvalueand it's positive, only iconification is allowed. If it's negative, only de-iconification is allowed. it's giving "pick a lane" πLowerβ lets the user lower a window.Maximize [ horizontal vertical ]β with no optional args,Maximizemakes the window flip back and forth between full-screen size and its normal size. Iconic behavior, honestly.
With the optional arguments horizontal and vertical, which are percentages of a full screen, you get to control the new size of the window. If horizontal is greater than 0, the horizontal dimension of the window gets set to horizontal*screen_width/100. Vertical resizing works the same way. For example, this adds a title-bar button that switches a window to the full vertical size of the screen:
Mouse 0 4 A Maximize 0 100
And this one stretches windows to the full width:
Mouse 0 4 A Maximize 100 0
And this one makes a window that's half the screen size in each direction:
Mouse 0 4 A Maximize 50 50
Values larger than 100 can be used with caution. (read: proceed at your own risk, babe.)
If you append the letter "p" to each coordinate (horizontal and/or vertical), then the scroll amount gets measured in pixels instead.
Module name ModuleNameβ specifies a module that should be spawned. Modules can be short-lived transient programs, or they can stick around for the whole duration of the X session. fvwm terminates modules before restarts and quits, if possible.nameis a double-quoted string that has absolutely no significance whatsoever, but it must exist. (yes, really. it's just there. main character with no lines π)Move [ x y ]β lets the user move a window. If it's called from somewhere inside a window or its border, then that window gets moved. If it's called from the root window, then the user gets to select the target window.
If you hand it the optional arguments x and y, the window gets moved so its upper left corner sits at location (x,y). Units are percent-of-screen, unless you append the letter "p" to each coordinate, in which case the location is in pixels.
Examples, bestie:
Mouse 1 T A Move
Mouse 2 T A Move 10 10
Mouse 3 T A Move 10p 10p
In the first example, it's an interactive move. In the second, the window whose title-bar is selected gets moved so its upper left hand corner is 10 percent of the screen width in from the left, and 10 percent down from the top. And the final example moves the window to coordinate (10,10) pixels. slay. β¨
Nopβ does nothing. This is for inserting a blank line or a separator in a menu. If the menu item specification isNop " ", then a blank line gets inserted. If it looks likeNop "", then a separator line gets inserted. tiny differences, big drama.Popupβ this built-in has two purposes: binding a menu to a key or mouse button, and binding 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:
This example binds mouse buttons 2 and 3 to a pop-up called "Window Ops", whose definition was provided as an example earlier in this man page. The menu pops up if 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 modifier. And pop-ups can be operated without the mouse by binding them to keys and then using the up arrow, down arrow, and enter keys. keyboard girlies stay winning π
To bind a previously defined pop-up menu to another menu, for use as a sub-menu:
This example defines a sub menu, "Quit-Verify", and binds it into a main menu called "Utilities":
Popup "Quit-Verify"
Title "Really Quit Fvwm?"
Quit "Yes, Really Quit"
Restart "Restart Fvwm" fvwm
Nop ""
Nop "No, Don't Quit"
EndPopup
Popup "Utilities"
Title "Utilities"
Exec "Xterm" exec xterm &
Exec "Rxvt" exec rxvt &
Exec "Top" exec rxvt -T Top -n Top -e top &
Exec "Calculator" exec xcalc &
Exec "Xman" exec xman &
Exec "Xmag" exec xmag &
Nop ""
Popup "Exit Fvwm" Quit-Verify
EndPopup
Important: sub-menus must be defined prior to the main menu in which they are bound. And sub-menu nesting can be arbitrarily deep β go as feral as you want. π¦
Quitβ exits fvwm, which generally causes X to exit too. bye bestie πRaiseβ lets the user raise a window.RaiseLowerβ alternately raises and lowers a window. indecisive king behavior πRefreshβ causes all windows on the screen to redraw themselves.Resize [ x y ]β lets the user resize a window.
If you pass the optional arguments x and y, the window gets moved so its upper left corner sits at location (x,y). The units of x and y are percent-of-screen, unless you append the letter "p" to each coordinate, in which case the location is in pixels.
Restart name WindowManagerNameβ causes fvwm to restart itself ifWindowManagerNameis"fvwm", or to switch to an alternate window manager ifWindowManagerNameis anything other than"fvwm". If the window manager isn't in your default search path, then you should use the full path name forWindowManagerName.
WindowManagerName is not quoted but name is. name is the name that shows up in a menu, if that's where the function gets called from. And name is required even if the function isn't called from a menu. yes, even then. it's non-negotiable π
This command should not have a trailing ampersand, or any command line arguments, and it should not make use of any environmental variables. Of the following examples, the first three 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 " " twm -f .mystartupfile
Key F1 R N Restart " " /home/nation/bin/fvwm
(yes, the original says "the first three are sure losers, but the third is OK" β I'm just the messenger, bestie. copying it exactly, no cap.)
Stickβ makes a window sticky if it's not already sticky, or non-sticky if it's already sticky. commitment issues, but make it functional π«ΆScroll horizonal verticalβ scrolls the virtual desktop's viewport byhorizontalpages in the x-direction andverticalpages in the y-direction. Either or both entries may be negative. Bothhorizontalandverticalvalues are expressed in percent of pages, so"Scroll 100 100"means scroll down and left by one full page."Scroll 50 25"means scroll left half a page and down a quarter of a page. Do not call the scroll function from pop-up menus. Normally, scrolling stops at the edge of the desktop.
If the horizontal and vertical percentages get multiplied by 1000, then scrolling wraps around at the edge of the desktop instead. If "Scroll 100000 0" is executed over and over, fvwm moves to the next desktop page on each execution and wraps around at the edge of the desktop, so every page gets hit in turn. iconic rotation behavior β
If you append the letter "p" to each coordinate (horizontal and/or vertical), then the scroll amount gets measured in pixels.
Titleβ does nothing. This is for inserting a title line in a popup or menu. (a decorative queen. no job, just vibes πΈ)TogglePageβ temporarily disables edge scrolling. Edge scrolling can be re-enabled by calling this again.Wait nameβ this built-in is meant to be used in fvwm functions only. It causes execution of a function to pause until a new window namednameappears. fvwm stays fully functional during a wait. This is especially useful in theInitFunctionif you're trying to start windows on specific desktops:
Function "InitFunction"
Exec "I" exec xterm -geometry 80x64+0+0
Wait "I" xterm
Desk "I" 0 2
Exec "I" exec xmh -font fixed -geometry 507x750+0+0 &
Wait "I" xmh
Desk "I" 0 0
EndFunction
That function above 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. choreography, honestly π§
Warp [ name window_name ]β same asCirculateDownbut it de-iconifies any iconified windows as it focuses on them.WindowsDesk new_deskβ moves the selected window to the desktop specified asnew_desk.WindowList arg1 arg2β generates a pop-up menu (and pops it up) in which the title and geometry of each of the windows currently on the desktop 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's 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's iconified, and will raise the window. a whole little to-do list in one menu, obsessed π- if arg1 is an even number, the windows get listed by their window name (the one that literally shows up in the title-bar, bestie π ). if it's odd, then it uses the window's icon name instead.
- if arg1 is less than 2, then every single window on every single desktop gets shown β except the ones you listed in
WindowListSkipdirectives, obvi π. - if arg1 is 2 or 3, only windows on the current desktop show up.
- if arg1 is 4 or 5, only windows on desktop number arg2 show up. periodt β¨
β¨οΈ KEYBOARD SHORTCUTS β¨οΈ
okay so basically every window manager operation can be done from the keyboard (I think, anyway π) so mouseless operation should genuinely be possible. slay.
On top of scrolling around the virtual desktop by binding the Scroll built-in to whatever keys you want, you can also bind pop-ups, move, resize, and most other built-ins to keys. main character energy: no mouse required π
Once a built-in function is started, the pointer moves with the up, down, left, and right arrows, and the action ends when you press return.
- Hold down shift β pointer movement goes in bigger steps.
- Hold down control β cursor movement goes in smaller steps.
And the classic emacs/vi cursor movement controls work too instead of the arrow keys: ^n, ^p, ^f, ^b, and ^j, ^k, ^h, ^l. iykyk π
π¦ SUPPLIED CONFIGURATION π¦
A sample configuration file, system.fvwmrc, ships with the fvwm distribution. it's well commented and you can totally use it as a source of examples for configuring fvwm. free inspo, bestie π
π₯οΈ USE ON MULTI-SCREEN DISPLAYS π₯οΈ
If you don't pass the -s command line argument, fvwm will automatically start up on every screen on the specified display. After fvwm starts, each screen is treated independently. That means restarts of fvwm need to be performed separately on each screen.
strongly recommended for multi-screen displays: use EdgeScroll 0 0. fr fr, do it.
You may need to quit on each screen to quit from the X session completely. no cap π
Multi-screen support is only available if fvwm is compiled with -DMULTIPLE_SCREENS. (compile-time tea β)
π BUGS π
okay so. 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.... π legacy behavior honestly π
Discouraged: binding a key to a window decoration but not to the window itself. Why? because when the key-press event finally gets to the window it will be marked as SYNTHETIC and will be ignored by many applications. so like. don't.
Bug reports can be sent to fvwm@wonderland.org. π¬
π AUTHOR π
Robert Nation with help from many people, based on twm code, which was written by Thomas LaStrange. π«Ά
and that's the whole page, bestie!! πβ¨ this iconic little manual is from the 3rd Berkeley Distribution, dated Jan 28, 1994, and it's the FVWM(1) page β go forth and manage your windows like the main character you are ππ¦πΈπ
π¦ where this page comes from
- debian bookworm: fvwm1 1.24r-57+b1
- ubuntu jammy: fvwm1 1.24r-57ubuntu1
- ubuntu noble: fvwm1 1.24r-57ubuntu1
- ubuntu questing: fvwm1 1.24r-57.2
- ubuntu resolute: fvwm1 1.24r-57.2build1
- ubuntu stonking: fvwm1 1.24r-57.2build1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms