cvsimport
[fvwm.git] / docs / FAQ
blob0923a6cf6a526730a0e4b63706c5e33917308273
1 ======================================================================
2                    Fvwm Frequently Asked Questions
3 ======================================================================
5 Last updated 20 Jan 2009 for unstable release 2.5.26 and stable
6 release 2.4.20.
8 Contents
10 0. *The* most frequently asked questions :)
12      0.1  A few minutes after fvwm is started my keyboard and
13           mouse bindings stop working.  What can I do?
14      0.2  I use XMMS, but it ignores some window styles.
15      0.3  I like transparency.  What can I do?
17 1. About Fvwm
19      1.1  What does fvwm stand for?
20      1.2  Where do I find the current versions of fvwm?
21      1.3  Any WWW Sites about fvwm?
22      1.4  Where do I ask questions about fvwm?
23      1.5  What are the differences between fvwm 1.xx and 2.xx?
24      1.6  What's the relative memory usage for the various window
25           managers out there?
26      1.7  Why the rename of the various files (fvwm2, .fvwm2rc,
27           fvwm2.man)?
28      1.8  When will fvwm release X.Y.Z be ready?
30 2. Installation
32      2.1  I want to use fvwm, but I don't have root access on my
33           machine.  Can I still install and run it?
34      2.2  I'm trying to use fvwm under CDE/COSE, but encountering
35           difficulties.  Any suggestions?
36      2.3  I'm trying to compile fvwm under SunOS using cc, but the
37           compiler is having lots of problems.  What gives?
38      2.4  I want colored icons, but they won't work.  Why not?
39           When I run configure, it reports "no" to "Have XPM
40           support?"  How can I get XPM support?
41      2.5  I'm a sysadmin, and if I wanted to force fvwm to read a
42           system rc file and then the user's rc file, how would I
43           do that?
44      2.6  I'm a sysadmin, and if I wanted fvwm to look for all of
45           its rc files in a hidden directory, say ~/.fvwm, much
46           like CDE does, how could I do that?
47      2.7  How can I use fvwm with GNOME version <= 1?
48      2.8  How can I use fvwm with GNOME version >= 2 or KDE
49           version >= 2?
51 3. Features, Configuration, Functions & Commands
53      3.1  I use fvwm on a RedHat Linux system and can't figure out
54           how to change my fvwm configuration.  I've read the fvwm
55           man page but when I edit my .fvwm2rc nothing seems to
56           happen.  What's going on?
57      3.2  Is it possible to raise a window when I click into the
58           window itself, not just the border?
59      3.3  How do I get Alt-Tab behavior like another GUI?
60      3.4  What's the difference between the Focus and FlipFocus
61           commands?
62      3.5  You can bind mouse movements to keystrokes, how about
63           mouse presses?
64      3.6  I'd like to bind a key to paste/use the current
65           selection, how can I do that?
66      3.7  Will fvwm ever support a separate colormap for each
67           desktop?
68      3.8  I really like the horizontal bars that appear on the
69           title bars of sticky windows.  Can I get those on other
70           windows as well?
71      3.9  How do I set the Sun keyboard key xxxx to an fvwm
72           command? Or more generally, I'm having problems defining
73           key bindings for fvwm - what can I do?
74     3.10  My .fvwmrc from version 1.xx no longer works.  What do I
75           do?
76     3.11  What happened to the fvwm 1.xx 'include' command?
77     3.12  How do I get window titles on sub windows of ...
78     3.13  I just upgraded to version >= 2.3.2, and my
79           configuration settings disappeared!  How do I get them
80           back?
81     3.14  Some applications (e.g. Eterm) don't use the icon I
82           defined for them. Why?
83     3.15  I don't like the gaps in my icon box when I de-iconify
84           an application.  Is there some kind of auto arrange
85           function?
86     3.16  How do I set up an fvwm menu item that shuts down my
87           Linux machine?
88     3.17  Although the Recapture command is obsolete, do I still
89           need it to apply certain style changes?
90     3.18  When my specific window (or all windows) pops up, I want
91           it to get focus/be moved/be resized/be closed/be
92           shaded...  How?
93     3.19  When my specific window (or all windows) is closed, I
94           want to switch desks/wrap to my app X/popup a menu/start
95           app X...  How?
96     3.20  I have a multi head setup (multiple screens used under
97           X).  How can I tell fvwm to use different configurations
98           for the screens?
99     3.21  How do I maximize a window but not cover up FvwmTaskBar?
100     3.22  Why my close button looks pressed in maximized windows?
101           Why don't buttons show on the titlebar of some windows?
102     3.23  How to define transparent menus?
103     3.24  How to define transparent modules?
104     3.25  How to define transparent decorations?
105     3.26  How about transparent applications too?
106     3.27  How can I define emacs type multi-keystroke fvwm bindings?
107     3.28  How do I remove all decorations from a window?
108     3.29  What's the best way to make on-the-fly config changes?
109     3.30  How can I toggle a window's layer?
111 4. Modules
113      4.1  I'm using FvwmButtons (or GoodStuff in 1.xx), and
114           sometimes the buttons stay depressed, and other times
115           they don't.  Why is that?
116      4.2  When having FvwmButtons swallow an app, is it possible
117           to have button presses assigned to actions as well?  For
118           instance, I'd like to swallow xload and have a button
119           press pop up an xterm, or swallow xbiff and have a
120           button press bring up the list of messages.
121      4.3  I'm seeing odd things when trying to preprocess files
122           with the FvwmM4/Cpp module...
123      4.4  I heard about this FvwmFileMgr module.  Where can I find
124           it?
125      4.5  I used to use GoodStuff in fvwm 1.xx, but it's not in
126           the 2.xx distribution.  What do I use now?
127      4.6  I want to have the sub panels in FvwmButtons not at
128           their default position near the button but somewhere
129           else on the screen.  Is this possible?
130      4.7  How can I open a sub panel or push buttons in
131           FvwmButtons with a keyboard shortcut?
133 5. Development, Known Problems & Bug Reports
135      5.1  I'd really like to see neat feature XYZ in
136           fvwm. Wouldn't that be cool?  I even have a patch.  When
137           can it be added?
138      5.2  How do I create/submit/apply patches?
139      5.3  How do I submit a bug report?
140      5.4  I have a window that is behaving unexpectedly under
141           fvwm, but just fine under (whatever other window
142           manager), or I have just some random bug.  What do I do?
143      5.5  Why do NumLock, CapsLock and ScrollLock interfere with
144           ClickToFocus and/or my mouse bindings?
145      5.6  Menus with gradient backgrounds flicker or are very
146           slow.
147      5.7  Why won't the StartIconic style work with {Netscape,
148           etc.}?
149      5.8  How do I capture the output (e.g. errors) of fvwm?
150      5.9  I try to run some program under fvwm, but it dies with
151           an X11 error like BadAccess.  The same program works
152           just fine under MWM or OLWM.  What's going on?
153     5.10  Every time I update my install, my currently running
154           fvwm session dies.  Why is that?
155     5.11  After I restart fvwm certain windows or icons raise
156           above all other windows and cannot be lowered by any
157           means.  One example are the shortcuts of KFM (the KDE
158           file manager).  What can I do about that?
159     5.12  The StartsOnPage style does not work for me.  Why?
160     5.13  Some modules can not be started when I restart fvwm.
161     5.14  I'm running Rational Rose and fvwm ignores its windows.
162     5.15  Although I use the WindowListSkip style for my modules
163           they still show up in FvwmIconMan, FvwmWinList etc.
164     5.16  When I Maximize an application, sometimes I get gaps
165           around the edges, and other times I don't.  What's going
166           on?
168 6. Miscellaneous
170      6.1  What exactly is the difference between a DESK, a PAGE,
171           and the SCREEN?
172      6.2  I'd really like {NeXT, Win95, etc} look and feel.  Are
173           you going to support that?
174      6.3  Where can I get more XPMs for icons?
175      6.4  Linux XF86 virtual screen size & fvwm interaction...
176      6.5  I know this question doesn't have to do with fvwm, but
177           what happened to to rxvt and rclock which Rob Nation
178           used to support?  Where can I find them now?
179      6.6  How do I set the background with fvwm?
180      6.7  When I use Fvwm, my XYZ isn't the right color.  What's
181           wrong?
182      6.8  I just got a mouse with 57 buttons.  How do I make Fvwm
183           use them?
184      6.9  Why does fvwm change my X Cursor theme?
186 7. Hints and Examples from the Developers
188      7.1  An easy way to test new configurations.
189      7.2  Using shell commands for configuration.
190      7.3  How to start applications on a page or desk other than
191           the current.
192      7.4  How to start applications on a page or desk other than
193           the current without moving the viewport to the new page
194           or desk.
195      7.5  A more efficient MWM menu style.
196      7.6  Placing menus on the screen.
197      7.7  Are you flipping pages by accident when moving the mouse
198           close to the border of the screen?
199      7.8  Lining up your windows and icons.
200      7.9  Moving the mouse/focus/page with the keyboard.
201     7.10  The cat safe desktop :-)
202     7.11  Lowering and moving windows.
203     7.12  Toggling windows on and off.
204     7.13  Starting applications by clicking on an icon (also known
205           as "docking" applications).
206     7.14  Positioning a window using arithmetic.
207     7.15  Hiding the mouse pointer.
208     7.16  Finding the mouse pointer.
209     7.17  Autohiding FvwmButtons or other windows.
210     7.18  Using application screenshots as icon or mini icon
211           thumbnails.
213 ======================================================================
214                 0 - The most frequently asked question
215 ======================================================================
217 0.1  A few minutes after fvwm is started my keyboard and mouse
218      bindings stop working.  What can I do?
220 A: Probably your NumLock, CapsLock or ScrollLock key is pressed.  See
221    Q 5.5 for more details.
223 Trivia: In all my years as an fvwm developer this has been by far the
224    most frequently asked question.  Whoever can solve this problem so
225    that this question is never asked again will be mentioned in big
226    letters on the fvwm home page :-)
228 ----------------------------------------------------------------------
230 0.2  I use XMMS, but it ignores some window styles.
232 A: XMMS wants to do everything by itself and overrides many
233    settings of the window manager.  Check the options menu in XMMS
234    and if that does not help, ask the XMMS people about it at
236         http://xmms.org/
238    *Please* do not ask XMMS questions on the fvwm mailing lists
239    and do not report XMMS related bugs before you tried the XMMS
240    mailing lists.  No offense meant, but we really have more
241    important things to do than providing user support for third
242    party software.
244 ----------------------------------------------------------------------
246 0.3  I like transparency.  What can I do?
248 A: See questions 3.23, 3.24, 3.25, 3.26 that deal with transparency.
250    Also see configurations supplied in fvwm-themes package, some
251    themes use transparent menus, modules and/or decorations.  E.g.:
253         http://fvwm-themes.sf.net/screenshots/full/transparent.png
254         http://fvwm-themes.sf.net/screenshots/full/transparent.jpg
257 ======================================================================
258                             1 - About Fvwm
259 ======================================================================
261 1.1  What does fvwm stand for?
263 A: "Fill_in_the_blank_with_whatever_f_word_you_like_at_the_time
264    Virtual Window Manager".  Rob Nation (the original Author of fvwm)
265    doesn't really remember what the F stood for originally, so we
266    have several potential answers:
268      Feeble, Fabulous, Famous, Fast, Foobar, Fantastic, Flexible,
269      F!@#$%, Flashy, fvwm (the GNU recursive approach), Free, Final,
270      Funky, Fred's (who the heck is Fred?), Freakin', Flawed,
271      Father-of-all, Feivel (the mouse from "An American Tail"),
272      Frungy (hey, where does that come from?), Floppy, Foxy,
273      Frenzied, Funny, Fumbling etc.
275    Just pick your Favorite (hey, there's another one!), which will of
276    course change depending on your mood and whether or not you've run
277    across any bugs recently.  I prefer Fabulous or Fantastic myself,
278    although I often use F!@#$% or Freakin' while debugging...
280    Recently 'Feline' is becoming popular.  Perhaps this has something
281    to do with the discovery that four of the six core developers have
282    cats (averaging 1.17 cats)?  Miaow.
284    Know what? I found another one while stroking my cats: FEEDING :-)
286    Check this link:
287        http://fvwm.org/fvwm-cats/
289 ----------------------------------------------------------------------
291 1.2  Where do I find the current versions of fvwm?
293 A: New main distribution site (official + beta code):
295                 ftp://ftp.fvwm.org/pub/fvwm/
297    Alternate sites:
299             USA:
300                 ftp://sunsite.unc.edu/pub/Linux/X11/window-managers/
301                 ftp://ftp.cs.columbia.edu/pub/cheah/
303             Europe:
304                 ftp://unix.hensa.ac.uk/pub/walnut.creek/FreeBSD/incoming/
305                 ftp://ftp.jussieu.fr/pub/X11/fvwm/
306                 ftp://ftp.loria.fr/pub/unix/fvwm/
308    By the way, 1.24r was the last released version of the 1.xx series
309    and the first official release of 2.xx is 2.2.  As of 2.2, an odd
310    second digit denotes development releases and even numbers denote
311    stable releases.
313 ----------------------------------------------------------------------
315 1.3  Any WWW Sites about fvwm?
317 A: Yup.  The official site is:
319         http://www.fvwm.org/
321    There are links on the official site to other related fvwm sites.
323 ----------------------------------------------------------------------
325 1.4  Where do I ask questions about fvwm?
327 A: If your local fvwm maintainer can't help you, then try the fvwm 
328    mailing list.  The fvwm discussion mailing list address is:
330                            fvwm@fvwm.org
332    And there is an announce mailing list as well:
334                        fvwm-announce@fvwm.org
336    They are maintained by Jason Tibbitts, and are Majordomo based
337    mailing lists.  To subscribe to the list, send "subscribe fvwm" in
338    the body of a message to <list>-request@fvwm.org.  For example, to
339    subscribe to the fvwm mailing list, send a request to
340    fvwm-request@fvwm.org.
342    To unsubscribe from a list, send "unsubscribe fvwm" in the body
343    of a message to <list>-request@fvwm.org.  To report problems, send
344    mail to fvwm-owner@fvwm.org.
346    Here's the list descriptions and instructions directly from Jason:
348    ------------------------------------------------------------------
349    (fvwm)
351    Description
352    -----------
354    This list is for discussion relating to the fvwm window manager,
355    which is intended to have a small memory footprint and a rich
356    feature set, be extremely customizable and extendible and have a
357    high degree of Motif MWM compatibility.  All relevant discussion
358    is encouraged.  Posting of binaries or irrelevant discussion is
359    strongly frowned upon.  Posting of short patches (less than 200
360    lines) is acceptable, but all patches should also be sent to the
361    fvwm-workers list (see Q5.2, below) for inspection and possible
362    inclusion in the distribution.
365    Instructions
366    ------------
368    To send a message to the list, mail to fvwm@fvwm.org.  For help on
369    dealing with the mailing list software (for getting the archives or
370    other files which may be made available) send the message "help" to
371    fvwm-request@fvwm.org.  If you have problems with the mailing list
372    itself and need to talk to a human, send mail to
373    fvwm-owner@fvwm.org. This address is for mailing list issues only;
374    reports on the fvwm software will be sent to /dev/null.
376    Archives of previous messages are available; to get them send the
377    above mentioned help message and investigate the "index" and "get"
378    commands or ftp them from
379    ftp://ftp.fvwm.org/pub/fvwm/list-archive/.
382    (fvwm-announce)
384    This list is for announcements relating to the fvwm window manager,
385    which is intended to have a small memory footprint and a rich
386    feature set, be extremely customizable and extendible and have a
387    high degree of Motif MWM compatibility.
389    Replies to messages from this list are set by default to go the
390    fvwm discussion list, fvwm@fvwm.org.
392    The current fvwm distribution is available for ftp at
393    ftp://ftp.fvwm.org/pub/fvwm/
394    ------------------------------------------------------------------
396 ----------------------------------------------------------------------
398 1.5  What are the differences between fvwm 1.xx and 2.xx?
400 A: A lot.  To name a few general ones:
401         - Bug fixes.  1.xx is not worked on at all any more.
402         - Better rc file format.  No longer order dependent.
403         - More flexible and powerful.  For example, many previously
404           global options now operate on a per window group level
405           instead.
406         - More and better modules.
407         - M4 preprocessing is no longer part of the fvwm exec, but
408           rather has been moved to a module.  There is also a module
409           to use cpp too.  See the FvwmM4 and FvwmCpp man pages.
411    Be sure to check the NEWS file for new or changed features too.
413 ----------------------------------------------------------------------
415 1.6  What's the relative memory usage for the various window managers
416      out there?
418 A: Here's a little table comparing some of them.  It was done on an
419    AIX based IBM RS6000 model 355 using the same number of windows (3)
420    and XSession to switch between the window managers, and I used
421    'top' to show the values:
423       SIZE   RES
424       545K  652K fvwm2 (fvwm 2.0.35)
425       457K  528K fvwm  (fvwm 1.24rb)
426       856K  960K ctwm  (ctwm 3.2p1)
427      1004K 1156K mwm   (mwm 1.2)
428       543K  632K twm   (???)
429       263K  328K aixwm (a simple ugly window manager included w/ aix)
431    Note: This information is terribly outdated.
433 ----------------------------------------------------------------------
435 1.7  Why the rename of the various files (fvwm2, .fvwm2rc, fvwm2.man)?
437 A: Some people find this annoying, but it was done for several reasons:
439         - so both 1.xx and 2.xx can be installed for use, in case some
440           people at the same site would rather stay at 1.xx
441         - the syntax of the rc files is pretty different and
442           completely incompatible
443         - when people ask questions, if they explicitly mention their
444           .fvwm2rc file I know that they are running one of the 2.xx
445           versions, since they rarely mention exactly what version
446           they are running.
448    Note, starting from 2.5.1, the executable fvwm2 became fvwm again.
449    Also, starting from 2.5.11, the default config file is either
450    personal ~/.fvwm/config or system wide $datadir/fvwm/config.
451    So, we completely returned to the "fvwm" name.
453 ----------------------------------------------------------------------
455 1.8  When will fvwm release X.Y.Z be ready?
457 A: This is always a difficult question to answer.  We work on fvwm on
458    a volunteer basis.  Things get done when we have the time.
460    Joining the fvwm-workers mailing list might prove instructive.
463 ======================================================================
464                            2 - Installation
465 ======================================================================
467 2.1  I want to use fvwm, but I don't have root access on my machine.
468      Can I still install and run it?
470 A: Very easily, using the '--prefix' flag at configure time.
472    Suppose your home directory is /home/sam.  After unpacking the
473    fvwm sources, do "./configure --prefix=/home/sam [other options as
474    needed]'.  Now, after building ("make") and installing ("make
475    install"), you will find the binaries in /home/sam/bin, the
476    man pages in /home/sam/man, etc.  The modules will be in
477    /home/sam/libexec, and fvwm binary will have this module path
478    built in.
480 ----------------------------------------------------------------------
482 2.2  I'm trying to use fvwm under CDE/COSE, but encountering
483      difficulties.  Any suggestions?
485 A: Sure - here's one from Graeme McCaffery:
487    -----
488      Finally I have found out how to run fvwm properly from CDE 8-))
489      (thanks to Lars Sodergren).
491      First set your home session in Dtwm.  That usually is an empty
492      session, though you could have the CDE session manager remember
493      what your desktop was like instead of FvwmSaveDesk etc..
495      Then you have to set two resources in .Xdefaults:
497        Dtsession*wmStartupCommand: /home/orion/spxgm/bin/Fvwm
498        Dtsession*waitWmTimeout: 1
500      In this case I run fvwm from a shell script so that library
501      variables etc are set properly for everyone.  The waitWmTimeout
502      tells the session manager how long to wait until it starts the
503      window manager.  I've set it to 1 second.  By default it's 60
504      seconds.
506      Finally you have to quit with
508        /usr/dt/bin/dtaction ExitSession (or whatever your path is for dtaction)
510      Now you can happily use CDE programs and fvwm.
511    -----
513      On the other hand, here is a link to a web page that describes
514      how to add multiple window managers to the CDE login menu:
516         http://twirl.mcc.ac.uk/~zzassgl/wm.html
518 ----------------------------------------------------------------------
520 2.3  I'm trying to compile fvwm under SunOS using cc, but the compiler
521      is having lots of problems.  What gives?
523 A: cc under SunOS is not an ANSI C compiler.  Try using acc or gcc
524    instead.
526 ----------------------------------------------------------------------
528 2.4  I want colored icons, but they won't work.  Why not?
529      When I run configure, it reports "no" to "Have XPM support?"  How
530      can I get XPM support?
532 A: Fvwm uses the XPM (X PixMap) library to provide support for colored
533    and shaped icons.  XPM doesn't ship with the basic X distribution
534    as provided by The Open Group or XFree86.  However, many vendors
535    will bundle it as a standard component anyway.  If not, you can get
536    a copy of the source from ftp://ftp.x.org/contrib/libraries/ and
537    build it yourself.
539    If you have XPM on your system, there are a number of ways
540    configure could still decide not to use it.
542    First, if you've installed XPM in a non-standard place (not in the
543    normal system or X11 directories--say in /opt/xpm or /usr/local or
544    similar) then you need to tell configure where to look.  Use the
545    --with-xpm-library and --with-xpm-includes options (see
546    INSTALL.fvwm).  Typically configure will say "Xpm library or header
547    not found" if this is the problem.
549    Second, your version of XPM may be too old.  Fvwm requires XPM 3.4g
550    or better.  Typically configure will say "Xpm library version is
551    too old!" if this is the problem.  In that case, you'll need to
552    install a newer version.
554    Third, XPM may be mis-installed on your system.  If configure says
555    " Xpm library version and header file version don't match!" then
556    this may be the problem.  Either use the --with-xpm-library and
557    --with-xpm-includes options to specify more precisely what you
558    want, or try re-installing XPM.
560    Last, there could be a linker error.  This is especially common on
561    systems where XPM may be built as a shared library and installed in
562    a non-standard directory (Solaris is a good example).  There are
563    some notes about building using shared libraries in the
564    INSTALL.fvwm file.
566    If you can't figure it out, contact the fvwm mailing list.  Please
567    be sure to provide the type of hardware and operating system you're
568    using, how you invoked configure, and extract the lines dealing
569    with XPM from the config.log file and include that.
571 ----------------------------------------------------------------------
573 2.5  I'm a sysadmin, and if I wanted to force fvwm to read a system rc
574      file and then the user's rc file, how would I do that?
576 A: Well, you could probably do something like this.  Have the first
577    line of everyone's ~/.fvwm/config or ~/.fvwm/.fvwm2rc files be
578    'Read global.config' and have global.config reside in
579    "$datadir"/fvwm (the value of $datadir is set on ./configure step).
581 ----------------------------------------------------------------------
583 2.6  I'm a sysadmin, and if I wanted fvwm to look for all of its rc
584      files in a hidden directory, say ~/.fvwm, much like CDE does, how
585      could I do that?
587 A: Fvwm now supports ~/.fvwm search directory by default.
589    This could be probably done similarly to Q2.5 above.  The system rc
590    "$datadir"/fvwm/config (or system.fvwm2rc) could do something like:
592         Read Init      quiet
593         Read Decors    quiet
594         Read Styles    quiet
595         Read Functions quiet
596         Read Menus     quiet
597         Read Keys      quiet
598         Read Modules   quiet
600    or whatever breakdown you deemed appropriate, and you would have
601    default versions of these in "$datadir"/fvwm/ that it could find
602    in case the user was missing one of them and you wanted to supply
603    defaults.
605 ----------------------------------------------------------------------
607 2.7  How can I use fvwm with GNOME (version <= 1)?
609 A: Since the latest fvwm versions are mostly GNOME compliant, you may
610    simply run GNOME applications, like panel, gmc, gnome-terminal and
611    all others with fvwm.
613    The included fvwm-menu-desktop script (with a massive man page)
614    will help you build fvwm menus for gnome applications.
616    To ensure you run fvwm and not gnome-session, create .Xclients file
617    in your home directory and put a call to fvwm in it. The file
618    ~/.xinitrc can be used for the same purpose if you want to bypass
619    any system-wide logic installed by your distributor or sysadmin.
621    An alternative solution is to run fvwm inside of
622    /usr/bin/gnome-session. After you start gnome-session (don't start
623    fvwm yourself), go to the foot menu in the GNOME panel, then choose
626      System menus / Settings / Desktop / Window Manager
628    and create an entry for fvwm.  Fvwm supports session management.
630    If you run gnome-session, SessionInitFunction and
631    SessionRestartFunction are called instead of InitFunction and
632    RestartFunction, see the fvwm man page.
634    StartFunction, for running modules, is called as usual.
637    Here are examples of the GNOME Window Manager hints support in
638    fvwm:
640    o If you run gnome panel inside fvwm without GNOME support, you
641      can't fully use GNOME pager applets (if at all); with GNOME
642      support you can correctly see pages/desks and move windows
643      between them inside applets. You can also use the GNOME Tasklist
644      applet and manage your windows using it.
646    o If you run gmc and bind GnomeButton (see the man page), you can
647      pass root clicks to a gnome application (i.e. to gmc in this
648      case).
650 ----------------------------------------------------------------------
652 2.8 How can I use fvwm with GNOME version >= 2 or KDE version >= 2?
654 A: Most standard applications work as any other application with
655    fvwm. However, some features and special applications such as
656    panels, pagers, taskbars and desktops need a special
657    support. Interaction between the window manager, the desktop
658    environment and applications is standardized in the Extended Window
659    Manager Hints specification. fvwm supports this specification since
660    the 2.5.x series (GNOME, GTK, KDE and QT since their version
661    2). See the "Extended Window Manager Hints" section of the fvwm
662    manual page and the commands and styles which start with "EWMH" for
663    more details.
665    You can use fvwm as the GNOME window manager. For this, start GNOME
666    (gnome-session). The game is to replace the running window manager
667    (sawfish or metacity by default) by fvwm. You may try to type "fvwm
668    --replace&" in a terminal. If this does not work kill fvwm and open
669    the session properties dialog (run "gnome-session-properties&" in a
670    terminal) and change, in the second tab, the metacity (or sawfish)
671    Style value from "Restart" to "Normal" (do not forget to "Apply"
672    this change), so that gnome-session won't restart it when you kill
673    it. Then, run "killall metacity; sleep 1; fvwm &" in a
674    terminal. After you have succeeded starting fvwm you just have to
675    save your session (say via GNOME session logout). The next time you
676    start gnome-session, fvwm will be used (and you do not need to save
677    the session again at logout). Note that if you use gnome-smproxy,
678    and run an FvwmButtons which swallows some applications which use
679    the old session protocol these applications are restarted by
680    gnome-session and FvwmButtons at session restart which can cause
681    trouble.
683    You can also use fvwm as the KDE window manager.  KDE is started by
684    a shell script called "startkde". This script starts ksmserver
685    which starts the window manager (kwin by default). To start fvwm
686    you should add the option "-w fvwm" to the ksmserver command line
687    (close to the end of the script). You may copy startkde to
688    startkde_fvwm somewhere in your path, edit startkde_fvwm and
689    finally replace startkde by startkde_fvwm in your X startup script
690    (e.g., ~/.xinitrc, ~/.Xclients or ~/.xsession). Note that ksmserver
691    does not support the fvwm Restart command. You should use "Restart
692    fvwm" for restarting fvwm. But if you do that it is a bad idea to
693    save the session later.
695 ======================================================================
696           3 - Features, Configuration, Functions & Commands
697 ======================================================================
699 3.1  I use fvwm on a RedHat Linux system and can't figure out how to
700      change my fvwm configuration.  I've read the fvwm man page but
701      when I edit my .fvwm2rc nothing seems to happen.  What's going
702      on?
704 A: RedHat Linux installs the X server accompanied (by default) by a
705    configuration management system.  In earlier releases it was called
706    TheNextLevel and in more recent releases it's called
707    AnotherLevel. For further information about TheNextLevel, consult
708    RedHat's documentation in /usr/doc/TheNextLevel/.  For information
709    about AnotherLevel, do a 'man AnotherLevel'.
711 ----------------------------------------------------------------------
713 3.2  Is it possible to raise a window when I click into the window
714      itself, not just the border?
716 A: Any version later than 2.0.46 (i.e. 2.1.0 or later) has this
717    feature.  In the 2.2.x series, use:
719      GlobalOpts MouseFocusClickRaises
721 With the later 2.3.x betas and after use:
723      Style * MouseFocusClickRaises
725 ----------------------------------------------------------------------
727 3.3  How do I get Alt-Tab behavior like another GUI?
729 A: The built in command WindowList provides a very close approximation
730    to the Alt-Tab feature found in another GUI.  It doesn't look the
731    same but the following fvwm/config sample will provide a similar
732    interface:
734       Key Tab A M WindowList Root c c NoDeskSort
736    Starting with release 2.3.2, the above key binding is built-in.
738    Starting with release 2.3.15 you can hold the alt key down and keep
739    hitting tab.  A single alt-tab selects the previous window. The
740    remainder of this FAQ entry describes releases prior to 2.3.2.
742    Hitting Alt-Tab will pop up the WindowList menu.  Unlike another
743    GUI you should not keep the Alt key held down, the menu will stay
744    up until you hit Return/Enter/Space or Escape.  You can change
745    focus to a window on the menu by using the up and down arrow keys
746    to move the menu selection and then hitting Return or
747    Enter. Hitting Escape will close the menu without doing anything.
748    The WindowList menu has hot keys assigned for the first 26 windows
749    and you can use the hot key to go directly to the window.
751    The menu invoked with the above line will show all windows in most
752    recently focused order unless you have used the Focus command (see
753    Q3.4).  It shows each windows name and geometry with some extra
754    flags to indicate Sticky, OnTop and iconified windows.
756    A simpler style can be used with the following:
758       Key Tab A M WindowList Root c c CurrentDesk, NoGeometry
760    This will just list the windows on the current desk (titles only).
762    The other GUI has the feature of selecting the previous window if
763    Alt-TAB is hit and released quickly.  This behavior can be exactly
764    duplicated with 2.5.1 or later but not with earlier fvwm versions.
766      Key Tab A M WindowList Root c c \
767        CurrentDesk, NoGeometry, CurrentAtEnd, IconifiedAtEnd
769    Similar functionality can be assigned to hitting Alt-TAB twice in
770    quick succession (like a double click for keys):
772      DestroyFunc my_dbltab2
773      AddToFunc   my_dbltab2
774      + I WindowListFunc
776      DestroyFunc my_dbltab
777      AddToFunc   my_dbltab
778      + I Prev (CurrentDesk) my_dbltab2
780      Key Tab A M WindowList Root c c \
781        CurrentDesk, NoGeometry my_dbltab
783    There are a lot of options to the WindowList command to control
784    which windows are listed in which order and it may not be possible
785    to set conditions for the Prev command to reliably select the
786    second item when double keying.  The WindowList command has no
787    parallel for CurrentPage, Transient, Visible, Maximized, Raised,
788    and pattern matching.  The Prev conditions have no parallel for
789    OnTop, Alphabetic and desk sorting.  The WindowList menu respects
790    the WindowListSkip style attribute whereas Prev respects the
791    CirculateSkip and CirculateSkipIcon style attributes.
793 ----------------------------------------------------------------------
795 3.4  What's the difference between the Focus and FlipFocus commands?
797 A: Both of these commands change the keyboard focus to the target
798    window.  They differ only in the way they affect the internally
799    held list of windows.  This list is used by the Next, Prev and
800    WindowList commands.  The list is normally sorted in most recently
801    focused order with new windows being added to the end.  The
802    FlipFocus command plucks the target window from the list and
803    inserts it at the beginning, The Focus command rotates the list
804    around until the target window is at the beginning.  The behavior
805    of FlipFocus is also used when changing focus with the mouse and
806    the automatic focus changing when using ClickToFocus style.
808    If you never use the Focus command the list will remain in most
809    recently focused order.  If you do use the Focus command the list
810    will gradually get back to most recently focused order as you use
811    FlipFocus.
813    The Focus command is very useful in conjunction with the Next and
814    Prev commands.  e.g.
816       Key KP_Add A M Next (AcceptsFocus, CurrentDesk, !Iconic) Focus
817       Key KP_Subtract A M Prev (AcceptsFocus, CurrentDesk, !Iconic) Focus
819    Or for fvwm versions earlier than 2.4.1:
821       Key KP_Add A M Next [CurrentDesk !Iconic] Focus
822       Key KP_Subtract A M Prev [CurrentDesk !Iconic] Focus
824    These bindings allow you to circulate the focus around the windows
825    on the current desk in both directions.  If Prev FlipFocus were
826    used the focus would toggle between the top two windows on the
827    window list.
829    If you have several windows on a desk and you want to set the
830    circulation order for the Next and Prev commands you should focus
831    on the windows using the mouse or FlipFocus in the order you want.
832    Fvwm will learn the order and use it for the Next and Prev
833    commands.  If you subsequently use the mouse to focus or FlipFocus
834    the order will be lost.
836 ----------------------------------------------------------------------
838 3.5  You can bind mouse movements to keystrokes, how about mouse
839      presses?
841 A: Although fvwm has commands for binding movements to keystrokes,
842    controlling the pointer with the keyboard should really be handled
843    by the X server.  The following is an excerpt of the X FAQ on this
844    topic:
846      If you have the X Keyboard (XKB) Extension, you can enable mouse
847      keys, which makes it possible to generate mouse motion and button
848      events using the keyboard.  Events generated by MouseKeys are
849      completely transparent -- they will work with any application
850      that connects to a server that has the X Keyboard Extension,
851      regardless of whether the application itself uses XKB.
853      XKB is enabled by default in X11R6.1.
855      First, set up the Num Lock key so that Shift+Num_Lock
856      toggles mouse keys:
858        $ xmodmap -e "keysym Num_Lock = Num_Lock Pointer_EnableKeys"
860      (XFree86 3.1.2E is based on R6.1 and has the X Keyboard
861      Extension; it also has a binding to Pointer_EnableKeys in
862      its default keymap. You use Alt+Shift+Num_Lock to toggle
863      MouseKeys on and off.  If you are using an earlier release
864      of X or XFree86, you won't have XKB and the instructions
865      will not work.  See http://www.XFree86.org/FAQ for more
866      information.)
868      You might also have to turn off server num lock for this to
869      work.  Now press "Shift+Num_Lock" to enable MouseKeys.  When
870      MouseKeys are on:
872      o)   The keypad arrow keys move the pointer
873      o)   The keypad '5' key behaves like the 'default' pointer
874           button.
875      o)   The keypad '0' key locks the default pointer button
876           (for easy dragging).
877      o)   The keypad '.' key unlock the default pointer button
878           (to release a drag).
879      o)   The keypad '+' key double-clicks the default pointer
880           button.
881      o)   The keypad '/' key sets the 'default' button to Button1
882      o)   The keypad '*' key sets the default button to Button2
883      o)   The keypad '-' key sets the default button to Button3
885      This is the default configuration, but the mechanism allows
886      for nearly infinite configurability.
888      [thanks to Erik Fortune (erik@westworld.engr.sgi.com), 6/96]
890 ----------------------------------------------------------------------
892 3.6  I'd like to bind a key to paste/use the current selection, how can
893      I do that?
895 A: You can't directly with fvwm, but there may be a solution that is
896    more generally applicable - use the program 'xcb' available at
897    ftp://ftp.x.org/contrib/utilities/ or from your favorite mirror.
898    It could probably be used to get the desired effect or close to
899    it. This is most useful for running programs and passing the
900    selection to them (e.g. - invoke your favorite browser with the
901    current selection as the URL).  To get a semi-generic paste
902    facility to work, you'll probably need to use 'xse' (see Q3.5).  If
903    anyone comes up with a good example of this, please send it to the
904    fvwm mailing list for inclusion here.
906 ----------------------------------------------------------------------
908 3.7  Will fvwm ever support a separate colormap for each desktop?
910 A: Doubtful, although I'd like to see it too.  I believe that it'd be
911    possible to change the default colormap whenever you switch desks,
912    which would give programs started when that desk is active that
913    colormap, how would you deal with windows being moved across desks?
915    Plus fvwm itself needs certain colormap entries for all of its
916    drawing (borders, menus, etc), so these colors would have to be
917    pre-allocated in all of the colormaps, or something like that.
919    While this all *might* be technically possible, I don't feel that
920    it's really feasible right now (too much code bloat and
921    complexity), especially since most color hog programs
922    (i.e. Netscape) allow you to have them install private colormaps.
924    I may explore this a little at some point in the future though.
926 ----------------------------------------------------------------------
928 3.8  I really like the horizontal bars that appear on the title bars
929      of sticky windows.  Can I get those on other windows as well?
931 A: Yes.  For release 2.3.14 and after, put the line
933      Style * StippledTitle
935    in your fvwm/config (or .fvwm2rc).  For earlier releases use
937      GlobalOpts StipledTitles
939    (Yes, the spelling was inconsistent.)
941 ----------------------------------------------------------------------
943 3.9  How do I set the Sun keyboard key xxxx to an fvwm command?  Or
944      more generally, I'm having problems defining key bindings for
945      fvwm - what can I do?
947 A: From Jon Mountjoy, one of fvwm's users:
948      - Function keys on Sun Keyboard on Top Row are F1 - F8
949      - Keys on the function keypad on the Left of the Sun Keyboard
950        are F11 == Stop, F12 == Again, ..., F20 == Cut
952      His Example:
954      # Function keys on Sun Keyboard on Top Row
955      Key F1     A     N       Exec me(netscape) &
956      Key F2     A     N       Exec me(netscape -install) &
957      Key F5     A     N       Exec makex(Adder)
958      Key F6     A     N       Exec makex(Lambda)
959      Key F7     A     N       Exec makex(Castor)
960      Key F8     A     N       Exec xterm -T Local &
962      # Keys on the function keypad on the Left of the Sun Keyboard:
963      # F11 = Stop, F12 = Again, ..., F20 = Cut
964      Key F11    AWF   N       Next (!iconic, CurrentPage) Focus
965      Key F12    AWF   N       Prev (!iconic, CurrentPage) Focus
966      Key F13    WF    N       Maximize     100 100
967      Key F15    WF    N       RaiseLower ""
968      Key F17    WIF   N       Iconify ""
969      Key F18    WF    N       Stick ""
970      Key F20    WIF   N       Delete ""
971      Key Help   AWF   N       Iconify ""
973    A more general solution is to use xev (usually distributed w/ X11)
974    or xkeycaps (an X11 interface to xmodmap written by Jamie Zawinski,
975    available from ftp.x.org) to find out what the keysym for whatever
976    key you want REALLY is, and use that for binding fvwm commands.
978 ----------------------------------------------------------------------
980 3.10  My .fvwmrc from version 1.xx no longer works.  What do I do?
982 A: Start with a new one or convert your old one.  This can be done by
983    hand or with a little help from the 'fvwm-convert-2.2' in the
984    utils directory.
986    And here is a list of rc file command changes compiled by Makoto
987    'MAR_kun' MATSUSHITA <matusita@ics.es.osaka-u.ac.jp>.  It may or
988    may not be 100% accurate or complete, especially as changes evolve,
989    but it's a good start.
991    Note that there have been some changes in 2.1.x and up that are not
992    reflected in the conversion script yet.
994    ** Fvwm-1.xx commands **                   ** Fvwm-2.0.x equivalent **
996    AppsBackingStore                           (obsoleted)
997    AutoRaise delay                            (obsoleted, use FvwmAuto)
998    BackingStore                               (obsoleted)
999    BoundaryWidth Width                        Style (BorderWidth width)
1000    ButtonStyle button# WidthxHeight           <-
1001    CenterOnCirculate                          (obsoleted)
1002    CirculateSkip windowname                   Style (CirculateSkip)
1003    CirculateSkipIcons                         Style (CirculateSkipIcon)
1004    ClickTime delay                            <-
1005    ClickToFocus                               Style (ClickToFocus)
1006    Cursor  cursor_num cursor_type             CursorStyle context cursornum
1007    DecorateTransients                         Style (DecorateTransient)
1008    DeskTopScale Scale                         (obsoleted, use FvwmPager)
1009    DeskTopSize HorizontalxVertical            <-
1010    DontMoveOff                                (obsoleted)
1011    EdgeResistance scrolling moving            <-
1012    EdgeScroll horizontal vertical             <-
1013    Font fontname                              MenuStyle (arg4)
1014    Function FunctionName                      AddToFunc (not compatible)
1015    HiBackColor colorname                      Style (HilightFore color)
1016    HiForeColor colorname                      Style (HilightFore color)
1017    Icon windowname bitmap-file                Style (Icon iconname-file)
1018    IconBox left top right bottom              Style (IconBox l t r b)
1019    IconFont fontname                          Style (IconFont fontname)
1020    IconPath path                              ImagePath path
1021    Key keyname Context Modifiers Function     <-
1022    Lenience                                   Style (Lenience)
1023    MenuBackColor colorname                    MenuStyle (arg2)
1024    MenuForeColor colorname                    MenuStyle (arg1)
1025    MenuStippleColor colorname                 MenuStyle (arg3)
1026    Module ModuleName                          <-
1027    ModulePath path                            <-
1028    Mouse Button Context Modifiers Function    <-
1029    MWMBorders                                 Style (MWMBorder)
1030    MWMButtons                                 Style (MWMButtons)
1031    MWMDecorHints                              Style (MWMDecor)
1032    MWMFunctionHints                           Style (MWMFunctions)
1033    MWMHintOverride                            Style (HintOverride)
1034    MWMMenus                                   MenuStyle (arg5)
1035    NoBorder windowname                        Style (NoBorder)
1036    NoBoundaryWidth Width                      Style (HandleWidth width)
1037    NoPPosition                                Style (NoPPosition)
1038    NoTitle windowname                         Style (NoTitle)
1039    OpaqueMove percentage                      OpaqueMoveSize percentage
1040    OpaqueResize                               (obsoleted)
1041    Pager  X_Location Y_Location               (obsoleted, use FvwmPager)
1042    PagerForeColor colorname                   (obsoleted, use FvwmPager)
1043    PagerBackColor colorname                   (obsoleted, use FvwmPager)
1044    PagerFont fontname                         (obsoleted, use FvwmPager)
1045    PagingDefault pagingdefaultvalue           (obsoleted)
1046    PixmapPath                                 ImagePath path
1047    Popup PopupName                            AddToMenu (not compatible)
1048    RandomPlacement                            Style (RandomPlacement)
1049    SaveUnders                                 (obsoleted)
1050    SloppyFocus                                Style (SloppyFocus)
1051    SmartPlacement                             Style (SmartPlacement)
1052    StartsOnDesk windowname desk-number        Style (StartsOnDesk desk-number)
1053    StaysOnTop windowname                      Style (StaysOnTop)
1054    StdBackColor colorname                     Style (BackColor color)
1055    StdForeColor colorname                     Style (ForeColor color)
1056    StickyBackColor colorname                  (obsoleted)
1057    StickyForeColor colorname                  (obsoleted)
1058    Sticky windowname                          Style (Sticky)
1059    StickyIcons                                Style (StickyIcon)
1060    StubbornIcons                              (obsoleted)
1061    StubbornIconPlacement                      (obsoleted)
1062    StubbornPlacement                          (obsoleted)
1063    Style windowname options                   <-
1064    SuppressIcons                              Style (NoIcon)
1065    WindowFont fontname                        Style (Font fontname)
1066    WindowListSkip windowname                  Style (WindowListSkip)
1067    XORvalue number                            <-
1069    ** fvwm-1 built-in functions ***
1071    Beep                                       <-
1072    CirculateDown [ name window_name ]         Next (not compatible)
1073    CirculateUp [ name window_name ]           Prev (not compatible)
1074    Close                                      <-
1075    CursorMove horizontal vertical             <-
1076    Delete                                     <-
1077    Desk arg1 arg2                             <-
1078    Destroy                                    <-
1079    Exec name command                          <-
1080    Focus                                      <-
1081    Function                                   <-
1082    GotoPage  x y                              <-
1083    Iconify [ value ]                          <-
1084    Lower                                      <-
1085    Maximize [  horizontal vertical ]          <-
1086    Module name ModuleName                     Module ModuleName
1087    Move [ x y ]                               <-
1088    Nop                                        <-
1089    Popup                                      <-
1090    Quit                                       <-
1091    Raise                                      <-
1092    RaiseLower                                 <-
1093    Refresh                                    <-
1094    Resize [ x y ]                             <-
1095    Restart  name WindowManagerName            <-
1096    Stick                                      <-
1097    Scroll horizonal vertical                  <-
1098    Title                                      <-
1099    TogglePage                                 (obsoleted)
1100    Wait name                                  <-
1101    Warp [ name window_name ]                  Next or Prev (not compatible)
1102    WindowsDesk new_desk                       (obsoleted, use MoveToDesk)
1103    WindowList arg1 arg2                       <-
1105    *** New in fvwm-2 **
1107    All
1108    AnimatedMove
1109    BugOpts
1110    BusyCursor
1111    DefaultColors
1112    DefaultColorset
1113    DefaultFont
1114    DefaultIcon
1115    DefaultLayers
1116    Destroy
1117    DestroyMenu
1118    EdgeThickness
1119    Emulate
1120    EscapeFunc
1121    ExecUseShell
1122    HideGeometryWindow
1123    KillModule
1124    Layer
1125    Menu menu-name double-click-action
1126    MoveToDesk
1127    MoveToPage
1128    Next (conditions) command
1129    None (arguments) command
1130    Pick
1131    PointerKey
1132    Prev (conditions) command
1133    QuitSession
1134    Read filename
1135    Recapture
1136    RecaptureWindow
1137    SaveQuitSession
1138    SaveSession
1139    Silent
1140    SnapAttraction
1141    SnapGrid
1142    StrokeFunc
1143    XORPixmap
1144    +
1145    (more functions are being added from time to time, so please check
1146     the man page and the NEWS file too).
1148 ----------------------------------------------------------------------
1150 3.11  What happened to the fvwm 1.xx 'include' command?
1152 A: It was actually part of the M4 preprocessing.  You can use the
1153    'Read' builtin to get the same effect, or use the FvwmM4 module.
1155 ----------------------------------------------------------------------
1157 3.12  How do I get window titles on sub windows of ... (e.g.
1158       Netscape)?
1160 A: These windows are known as 'transient' windows because of their
1161    short lived nature.  To get the window decorations for transient
1162    windows you can use the Style command:
1164      Style * DecorateTransient
1166    or to switch it off:
1168      Style * NakedTransient
1170 ----------------------------------------------------------------------
1172 3.13  I just upgraded to version >= 2.3.2, and my configuration
1173       settings disappeared!  How do I get them back?
1175 A: The directory for system-wide configuration files changed from
1176    ${sysconfdir} (/usr/local/etc, unless set otherwise at configure
1177    time) to a subdirectory, ${sysconfdir}/fvwm.  Move your config
1178    files by hand and restart fvwm.
1180    This change was made because fvwm now installs several files into
1181    this directory.
1183 ----------------------------------------------------------------------
1185 3.14  Some applications (e.g. Eterm) don't use the icon I defined for
1186       them. Why?
1188 A: Eterm provides its own icon and fvwm does not know if it is a plain
1189    icon or if Eterm wants to draw into it (like xbiff does when you
1190    get new mail).  You can explicitly override the application
1191    provided icon with a style command:
1193      Style <application-name> IconOverride
1195 ----------------------------------------------------------------------
1197 3.15  I don't like the gaps in my icon box when I de-iconify an
1198       application.  Is there some kind of auto arrange function?
1200 A: Assuming you are using the IconBox option of the Style command
1201    this can be done with a tricky fvwm function.  Put the
1202    DeiconifyAndRearrange function below in your configuration file:
1204      DestroyFunc DeiconifyAndRearrange
1205      AddToFunc DeiconifyAndRearrange
1206       + C Iconify off
1207       + C All (CurrentPage, Iconic) PlaceAgain Icon
1209    This works with fvwm-2.5.3 and later.  Older fvwm releases can
1210    achieve the same effect with:
1212      DestroyFunc DeiconifyAndRearrange
1213      AddToFunc DeiconifyAndRearrange
1214       + C Iconify off
1215       + C All (CurrentPage, Iconic) RecaptureWindow
1217    However, as the Recapture and RecaptureWindow commands may be
1218    removed in the future, please use PlaceAgain instead of
1219    Recapture if possible.
1221    Also, replace all places where you call the Iconify builtin
1222    function to de-iconify an icon with a call to the new function.
1223    For example, replace
1225      DestroyFunc IconFunc
1226      AddToFunc IconFunc
1227       + C Iconify off
1228       + M Raise
1229       + M Move
1230       + D Iconify off
1232    with:
1233      
1234      DestroyFunc IconFunc
1235      AddToFunc IconFunc
1236       + C DeiconifyAndRearrange
1237       + M Raise
1238       + M Move
1239       + D DeiconifyAndRearrange
1241    and:
1243      Mouse 1 I A Iconify off
1245    with:
1247      Mouse 1 I A DeiconifyAndRearrange
1249 ----------------------------------------------------------------------
1251 3.16  How do I set up an fvwm menu item that shuts down my Linux
1252       machine?
1254 A: Write a little shell script to run the shutdown command.
1256    Install sudo on your system (see the man page, etc.)
1258    Set up the sudoers config file to allow you, your wife, etc. to run
1259    that script with root permissions.
1261    Add a menu item to your fvwm root menu (or wherever) that invokes
1262    "sudo /my/script/name".
1264 ----------------------------------------------------------------------
1266 3.17  Although the Recapture command is obsolete, do I still need it
1267         to apply certain style changes?
1269 A: Excerpt from the man page:
1271    There are many commands that affect look and feel of specific,
1272    some or all windows, like Style, Mouse, the FvwmTheme module (for
1273    fvwm 2.4.x), Colorsets and many others.  For performance reasons
1274    such changes are not applied immediately but only when fvwm is idle,
1275    i.e. no user interaction or module input is pending.  Specifically,
1276    new Style options that are set in a function are not applied until
1277    after the function has completed.  This can sometimes lead to
1278    unwanted effects.  To force that all pending changes are applied
1279    immediately, use the UpdateStyles, Refresh or RefreshWindow commands.
1281 ----------------------------------------------------------------------
1283 3.18  When my specific window (or all windows) pops up, I want it to
1284       get focus/be moved/be resized/be closed/be shaded...  How?
1286 A: The following discusses a general solution, you should substitute
1287    the application names used in the examples as well as fvwm commands
1288    (Move, Iconify, Close) with the ones you need.  To get resource
1289    names of an application you want to catch, use FvwmIdent module.
1291    The first possible approach to achieve what you want is to have a
1292    separate function to start your application, like:
1294      DestroyFunc StartKedit
1295      AddToFunc   StartKedit
1296      + I Exec exec kedit
1297      + I Wait kedit
1298      + I Next (kedit) Resize 100p 200p
1300    This approach has 3 problems:
1301      1) You need to use StartKedit function to start your application,
1302         this will not work if you start it from the command line.
1303      2) If for some reason the application is not started, fvwm waits
1304         for it in Wait, you will need to press Ctrl-Alt-Esc.
1305      3) If you have more than one kedit window, it is not guaranteed
1306         that the right one is resized.
1308    But this approach has one plus - it also enables any fvwm commands
1309    that you may want to issue before executing your command.  For
1310    example, to start kedit window iconic, but not affect its
1311    subwindows, you can use:
1313      DestroyFunc StartAppIconic
1314      AddToFunc   StartAppIconic
1315      + I Style $0 StartIconic
1316      + I Exec exec $0 $1
1317      + I Wait $0
1318      + I Style $0 StartNormal
1319      + I UpdateStyles
1321      StartAppIconic kedit /tmp/my.txt
1324    The second approach is to use FvwmEvent, this solves the first two
1325    problems (in fvwm 2.2) or all three problems (in fvwm 2.3 and
1326    later).
1328    The sample to use with fvwm 2.2.3+ versions (this resizes the newly
1329    created window "My Window", supposing you have only one such
1330    window):
1332      DestroyModuleConfig FvwmEvent*
1333      *FvwmEvent add_window SetGeometryForMyWindow
1335      DestroyFunc SetGeometryForMyWindow
1336      AddToFunc   SetGeometryForMyWindow
1337      + I Next ("My Window") Move +10p +10p
1338      + I Next ("My Window") Resize 100p 200p
1340      AddToFunc StartFunction I Module FvwmEvent
1342    The sample to use with fvwm 2.3.21 to 2.4.15 versions (consider to
1343    upgrade and use the version below).  This moves a newly created
1344    window named "My Window", and warps a pointer to all new windows
1345    regardless of their name:
1347      *FvwmEvent-NewWindow: Cmd
1348      *FvwmEvent-NewWindow: PassId
1349      *FvwmEvent-NewWindow: StartDelay 4
1350      *FvwmEvent-NewWindow: add_window FuncFocusWindow
1352      DestroyFunc FuncFocusWindow
1353      AddToFunc   FuncFocusWindow
1354      + I WindowId $0 ("My Window") Move 200p 100p
1355      + I WindowId $0 Focus
1356      + I WindowId $0 WarpToWindow
1358      AddToFunc StartFunction I FvwmEvent FvwmEvent-NewWindow
1360    And finally the suggested configuration for 2.5.7+ and
1361    2.4.16+. This moves a newly created window named "My Window", and
1362    wraps a pointer to all new windows regardless of their name:
1364      *FvwmEvent-NewWindow: StartDelay 4
1365      *FvwmEvent-NewWindow: add_window FuncFocusWindow
1367      DestroyFunc FuncFocusWindow
1368      AddToFunc   FuncFocusWindow
1369      + I ThisWindow ("My Window") Move 200p 100p
1370      + I Focus
1371      + I WarpToWindow
1373      AddToFunc StartFunction I FvwmEvent FvwmEvent-NewWindow
1375 ----------------------------------------------------------------------
1377 3.19  When my specific window (or all windows) is closed, I want to
1378       switch desks/wrap to my app X/popup a menu/start app X...  How?
1380 A: Please read the answer to the previous question to understand
1381    better.
1383    Again, there are two approaches.  The first is good in one kind of
1384    situations, bad in others:
1386      DestroyFunc StartKedit
1387      AddToFunc   StartKedit
1388      + I Exec kedit; xmessage -name DummyWindow -g +10000+10000 "dummy"
1389      + I Wait DummyWindow
1390      + I Exec xmessage -timeout 10 "Sorry, you can't close kedit"
1391      + I StartKedit
1393    The second approach is to use FvwmEvent:
1395      *FvwmEvent-OldWindow: Cmd
1396      *FvwmEvent-OldWindow: PassId
1397      *FvwmEvent-OldWindow: destroy_window FuncPopupMyMenu
1399      DestroyFunc FuncPopupMyMenu
1400      AddToFunc   FuncPopupMyMenu
1401      # go to the desk 0 when any window is closed
1402      + I GotoDesk 0
1403      # popup my menu when "panel" is closed
1404      + I WindowId $0 ("panel") Popup MenuFvwmRoot
1406      AddToFunc StartFunction I FvwmEvent FvwmEvent-OldWindow
1408 ----------------------------------------------------------------------
1410 3.20  I have a multi head setup (multiple screens used under X).  How
1411       can I tell fvwm to use different configurations for the screens?
1413 A: Fvwm spawns itself into all found screens unless -s command line
1414    parameter is specified, as explained in the man page.  All spawned
1415    fvwm processes by default use the same configuration on each
1416    screen. There are several ways to change the default behavior.
1418    Write your configuration file as you would if you had only one
1419    screen.  Then move the screen specific lines into separate
1420    configuration files and call them, for example, config.<screen>
1421    where <screen> is the screen number.  Usually this will be 0 for
1422    the main screen and 1 for the secondary screen.  Place the screen
1423    specific files in the $HOME/.fvwm directory or whatever you set
1424    $FVWM_USERDIR to.  Now add this line to your config file:
1426      Read config.$[screen]
1428    The $[screen] will be replaced with the number of the screen each
1429    instance of fvwm is started on.
1432    Another method, which should work for older fvwm versions as well,
1433    is to specify a separate file for each screen explicitly.  For
1434    this, start a separate fvwm for each screen in your .xinitrc (or
1435    .Xclients):
1437      fvwm -s -d :0.0 -f config-0 &
1438      fvwm -s -d :0.1 -f config-1 &
1439      fvwm -s -d :0.2 -f config-2
1441    Note that only the last command is without a trailing ampersand.
1442    If you wish, config-* files may all include "Read config-common".
1444 ----------------------------------------------------------------------
1446 3.21  How do I maximize a window but not cover up FvwmTaskBar?
1448 A: Instead of Maximize use "Maximize 100 -30p" where 30 is the width
1449    of your FvwmTaskBar.
1451    Or use EwmhBaseStruts in Fvwm 2.5.x or later.
1453 ----------------------------------------------------------------------
1455 3.22  Why my close button looks pressed in maximized windows?
1456       Why don't buttons show on the titlebar of some windows?
1458 A: Fvwm has some builtin idea of what the buttons do, and some
1459    applications can request that certain buttons not be shown.
1460    For example, it's normal for Fvwm to suppress the iconify button
1461    (builtin button 4, the second button from the right) on a
1462    transient (dialog) window.
1464    The command:
1466      Style * DecorateTransient
1468    tells fvwm you want titles and buttons on transient windows.
1470      Style * MwmFunctions
1472    tells fvwm to accept application hints to hide certain buttons.
1474      ButtonStyle 2 - Clear MWMDecorMin
1476    says button 2 performs the minimize (iconify) function.
1478      Mouse 0 2 A Iconify
1480    makes any mouse button on button 2 iconify the window.
1481    Buttons won't show until some action is assigned to them using
1482    Mouse or Key commands.
1484    Things to look for in the man page are:
1486      DecorateTransient, MwmDecorXXX, MwmFunctions
1488    So, if you use Windows-like buttons, then redefine button hints:
1490      ButtonStyle 1 - Clear MWMDecorMenu
1491      ButtonStyle 2 - Clear
1492      ButtonStyle 4 - Clear MWMDecorMax
1493      ButtonStyle 6 - Clear MWMDecorMin
1495    Finally, this command makes button relief to follow the state:
1497      Style * MWMButtons
1499 ----------------------------------------------------------------------
1501 3.23  How to define transparent menus?
1503 A: First, it may help to read about colorsets in fvwm and FvwmTheme
1504    man pages.
1506    We speak about transparency, not translucency here.  This means
1507    the background of the parent window (for example the root window)
1508    will be used for our "transparent" areas, this is not always the
1509    window under our "transparent" window.  However, it is possible
1510    to get a real transparency (i.e. translucency) by applying one
1511    patch and using new Colorset Translucent option the patch adds.
1512    We do not discuss this here, however you may get this patch with
1513    README.patch included from:
1515      http://fvwm-themes.sf.net/patch/
1518    To define a transparent colorset, use something like:
1520      Colorset 23 Transparent, fg rgb:ff/ff/c4, bg darkgray
1522    (you may use any other number greater than 0 instead of 23)
1524    There is another way to define transparent colorset, by using
1525    RootTransparent instead of Transparent, but please remember,
1526    you should use a good utility to set the root background image,
1527    like "fvwm-root -r" or "Esetroot" or "wmsetbg", otherwise
1528    RootTransparent will not work:
1530      Colorset 23 RootTransparent, fg rgb:ff/ff/c4, bg darkcyan
1532    The good thing about RootTransparent is that it is possible to
1533    automatically calculate the average background color (used for
1534    highlighting/shading) and efficiently tint the visible part of the
1535    root image using something like:
1537      Colorset 23 RootTransparent, fg rgb:ff/ff/c4, bg average, \
1538        Tint black 20, bgTint black 20
1540    If you have enough memory, you may use "RootTransparent buffer"
1541    to speed up transparent menus, modules or decorations.
1543    If you are not sure whether you use "fvwm-root -r" or similar
1544    utility to set the root background, do not use RootTransparent
1545    option, use Transparent option without tinting, and set the bg
1546    color explicitly.
1548    Once a transparent colorset is defined, use it in menus:
1550      MenuStyle * MenuColorset 23
1552    See the man pages for a more complete explanation of colorsets.
1554 ----------------------------------------------------------------------
1556 3.24  How to define transparent modules?
1558 A: See question 3.23 to learn how to define a transparent colorset
1559    (you may reuse the same transparent colorset or define separate
1560    colorsets for different modules).
1562    Then read the man page for your specific module that you want to
1563    make transparent and specify this transparent colorset(s), like:
1565      *FvwmPager: Colorset * 23
1566      *FvwmButtons: Colorset 23
1567      *FvwmIconMan: Colorset 23
1569      Style FvwmPager ParentalRelativity
1570      Style FvwmButtons ParentalRelativity
1571      Style FvwmIconMan ParentalRelativity
1573    A side note: the ParentalRelativity option is not always needed.
1574    It is not needed if you use RootTransparent or you never intend to
1575    move a module inside its parent, or you swallow a module, since
1576    FvwmButtons adds ParentalRelativity automatically for swallowed
1577    fvwm modules.  Otherwise you need Style ParentalRelativity for
1578    transparent windows, but doing this for all windows is overhead.
1580    Note, that previously "Pixmap none" option was used to define
1581    transparency; Pixmap option is obsolete, use colorsets instead.
1583    If you swallow FvwmPager (or FvwmIconMan) into FvwmButtons, then
1584    you may configure both FvwmPager and FvwmButtons to be transparent
1585    or just one of them to be transparent, depending on what you want
1586    to achieve.
1588 ----------------------------------------------------------------------
1590 3.25  How to define transparent decorations?
1592 A: See question 3.23 to learn how to define a transparent colorset.
1593    Only RootTransparent method works for transparent decorations!
1594    This basically means that you should use external utilities like
1595    "wmsetbg" or "Esetroot" to set background in JPG/GIF/TIFF format
1596    and our utility "fvwm-root -r" for XPM/PNG images.
1598    To get transparent decorations, use a configuration like this:
1600      AddToFunc StartFunction
1601      + I Exec fvwm-root -r $HOME/wallpapers/sea.png
1603      Colorset 41 RootTransparent buffer, fg white, bg average, \
1604        Tint cyan 15, bgTint cyan 15  # tint is optional
1605      Colorset 42 RootTransparent buffer, fg white, bg average, \
1606        Tint red  15, bgTint red  15  # tint is optional
1608      Style * Colorset 41, HilightColorset 42  # to use fg and bg
1609      BorderStyle Inactive Colorset 42 -- flat
1610      BorderStyle Active   Colorset 41 -- flat
1611      TitleStyle AllInactive Colorset 42 -- flat
1612      TitleStyle AllActive   Colorset 41 -- flat
1613      ButtonStyle All -- UseTitleStyle flat
1615    It is possible to define partially transparent decorations too.
1616    You may achieve this by adding "AddTitleStyle Colorset NN PP",
1617    or even "TitleStyle Colorset NN PP".  Please read the man page.
1618    Also search in fvwm-themes to see whether some theme provides
1619    the window decoration look similar to what you want to achieve.
1621 ----------------------------------------------------------------------
1623 3.26  How about transparent applications too?
1625 A: This is not really an fvwm related question, you should find X
1626    applications supporting transparency and read their documentation.
1628    Depending on the application you should set the root image in one
1629    or another way.  Usually utilities like fvwm-root (with possible
1630    "-r" parameter), Esetroot or wmsetbg should be used.
1632    There is a wide range of terminal emulators that may be configured
1633    to be transparent, like Eterm, aterm, gnome-terminal and others.
1634    Here is an example command line:
1636      aterm -ls -sh 70 -bg black -fg white -tr +sb -fn 7x14 -fb 7x14bold
1638    Some applications have transparent theme, e.g. gkrellm and xmms.
1640    Some applications may show text on the root image, e.g. root-tail.
1642    There are a lot of other applications supporting transparency not
1643    listed here, search in FreshMeat, http://freshmeat.net/.
1645 ----------------------------------------------------------------------
1647 3.27  How can I define emacs type multi-keystroke fvwm bindings?
1649 A: In emacs, keys can be set up as prefix keys, so that once
1650    you type the prefix key, a subsequent key has a special meaning.
1651    For example, Control-a would normally go to the beginning of a line
1652    but Control-c Control-a might do something completely different.
1653    There are at least 2 ways to do the same thing with fvwm.
1655    The simplest technique is to use the prefix key to invoke a menu
1656    and then use the menu hot keys as the second key in the binding.
1657    Since menu hot keys don't include modifiers, you can only use plain
1658    keys for the second key in the sequence.
1660    This second technique lets you use any key for the second key but
1661    only works with 2.5.x or later.
1662    This approach invokes a function on the first key that defines the
1663    action of the second key for a short time and then removes it:
1665    DestroyFunc Ctrl-Alt-F-Action
1666    AddToFunc   Ctrl-Alt-F-Action
1667    + I Key X A A Exec xterm
1668    + I Key C A A Exec xcalc
1669    # optionally popup a prompt window here
1670    + I Schedule 5000 Key X A A -
1671    + I Schedule 5000 Key C A A -
1673    # Press Ctrl-Alt-F and then "x" or "c"
1674    Key F A CM Ctrl-Alt-F-Action
1676    With this, you press the second key in 5 seconds otherwise the
1677    binding for the second key is removed.
1680    With fvwm-2.5.24 or later (using SendToModule) a much better
1681    solution is:
1683       SendToModule buttons-alias PressButton A 1
1684    
1685    This would send the FvwmButtons instance "button-alias" a command
1686    to invoke the action that button "A" has as though the button were
1687    clicked with mouse button 1.  For instance:
1689       *button-alias: (Id A, Title "My Button", Action (Mouse 1) \
1690          `Exec exec xcalc`)
1692 ----------------------------------------------------------------------
1694 3.28  How do I remove all decorations from a window?
1697 A:  I see this a lot on IRC.  Most people try and do this:
1699     Style * !Title, BorderWidth 0
1701     This doesn't always work because many forget about a window having
1702     having handles -- which sit on the border.  If a window has defined
1703     handles, then these effectively override any of border settings --
1704     especially the "BorderWidth" option.  But there are Handle
1705     equivalents, hence the correct way to remove decorations from a window
1706     would be:
1708     Style * !Title, !Borders, !Handles
1710     To set the BorderWidth of a window which has handles:
1712     Style * HandleWidth 5
1713    
1714 ----------------------------------------------------------------------
1716 3.29  What's the best way to make on-the-fly config changes?
1718 A:  Often is the case, one might want to make config changes to fvwm.
1719     Adding them to the .fvwm2rc file (or in more recent releases
1720     .fvwm/.fvwm2rc or ~/.fvwm/config) and then restarting fvwm is one
1721     way -- but this has problems with memory, especially with Colorset
1722     definitions being redeclared, etc.
1724     The better approach to making changes is instead to use FvwmConsole
1725     which is a way of making live changes to fvwm configs.  When you're
1726     satisfied that they're correct, then you can add them to your fvwm
1727     config file so that they're there the next time fvwm loads, thus
1728     reducing the need to restart fvwm.
1730 ----------------------------------------------------------------------
1732 3.30  How can I toggle a window's layer?
1734 A:  Usually what people want from this, is a means of making a window
1735     stay on top for a time, and then putting it back in the layer it
1736     was in originally.
1738     This is best achieved with a function, as in:
1740     DestroyFunc ToggleLayer
1741     AddToFunc   ToggleLayer
1742     + I ThisWindow (Layer 6) Layer
1743     + I TestRc (NoMatch) Layer 0 6
1745     This function first of all checks to see if the window that's going
1746     to be toggled is in layer 6 (which in this context is assumed to be
1747     the layer which is used for the style StaysOnTop -- see the
1748     DefaultLayers command for more information), and if it is, to put it
1749     in the layer it was previously in.
1751     Otherwise, if we didn't do it (because the window in question was in
1752     any other layer), the window is put in layer 6.
1754     This function can be bound in the usual way, either via the Pick
1755     command to some key/mouse binding, or bound to a button on the
1756     titlebar, etc.
1758 ======================================================================
1759                              4 - Modules
1760 ======================================================================
1762 4.1  I'm using FvwmButtons (or GoodStuff in 1.xx), and sometimes the
1763      buttons stay depressed, and other times they don't.  Why is that?
1765 A: From the FvwmButtons man page:
1767        If command is an fvwm Exec command, then the button
1768        will remain pushed in until a window whose name or
1769        class matches the quoted portion of the command is
1770        encountered.  This is intended to provide visual
1771        feedback to the user that the action he has requested
1772        will be performed.  If the quoted portion contains no
1773        characters, then the button will pop out immediately.
1774        Note that users can continue pressing the button, and
1775        re-executing the command, even when it looks "pressed
1776        in."
1778 ----------------------------------------------------------------------
1780 4.2  When having FvwmButtons swallow an app, is it possible to have
1781      button presses assigned to actions as well?  For instance, I'd
1782      like to swallow xload and have a button press pop up an xterm, or
1783      swallow xbiff and have a button press bring up the list of
1784      messages.
1786 A: Yes, with the alpha release 2.5.0 or any later release.  For older
1787    releases, read on.
1789    The button presses normally get passed through to the swallowed
1790    application, but if you put a title on the button, you can
1791    assign actions to that. Here's an example that someone sent to
1792    the mailing list once:
1794    *FvwmButtons(1x4,       \
1795      Title           'System Info', \
1796      Swallow         "xload" 'Exec xload', \
1797      Action(Mouse 1) 'Exec xosview -cua0 -net 200 -ul -l -geometry 325x325', \
1798      Action(Mouse 2) 'Exec xcpustate -interval 1 -bg "#a4978e" -fg black', \
1799      Action(Mouse 3) 'Exec rxvt -fg "khaki" -bg "dark olive green" \
1800                            -fat -n top -T Top -7 -e top' )
1802    And you could come up with something similar for xbiff (untested):
1804    *FvwmButtons(1x2, \
1805      Title 'Check Mail' Swallow "xbiff" 'Exec xbiff', \
1806      Action(Mouse 1) 'Exec from | xmessage -file -' )
1808    plus you could bind another button (say Mouse 3) to run your
1809    mail program.
1811    Sometime in the future I'll probably try and fix it so that you can
1812    actually assign a button press over the application itself...
1814 ----------------------------------------------------------------------
1816 4.3  I'm seeing odd things when trying to preprocess files with the
1817      FvwmM4/Cpp module...
1819 A: Yup, I imagine that you might be.  Things like the InitFunction not
1820    being called or windows that were running before fvwm started not
1821    getting their Borders & Style options set, etc.
1823    The reason for all this is because of the fact that FvwmM4 is a
1824    module.  Fvwm won't be looking at the commands coming back from
1825    the module until after it hits the main loop of the code, AFTER the
1826    startup is all done and it has already tried to execute the
1827    InitFunction.
1829    To force synchronous execution of FvwmM4/Cpp use:
1831      ModuleSynchronous FvwmM4/Cpp -lock filename
1833    See the man page for more details.
1835 ----------------------------------------------------------------------
1837 4.4  I heard about this FvwmFileMgr module.  Where can I find it?
1839 A: The FvwmFileMgr module disappeared because a file manager doesn't
1840    need to be integrated with a window manager and something like xfm
1841    does a much better job.  I recommend you pick that up instead (from
1842    ftp.x.org or your favorite mirror).
1844 ----------------------------------------------------------------------
1846 4.5  I used to use GoodStuff in fvwm 1.xx, but it's not in the 2.xx
1847      distribution.  What do I use now?
1849 A: GoodStuff was renamed to FvwmButtons.  Same module, new name (that
1850    fits in with the other modules naming convention).
1852 ----------------------------------------------------------------------
1854 4.6  I want to have the sub panels in FvwmButtons not at their default
1855      position near the button but somewhere else on the screen.  Is
1856      this possible?
1858 A: Yes, but not with the current implementation of the panels.  Please
1859    read question 7.12 for instructions.
1861 ----------------------------------------------------------------------
1863 4.7  How can I open a sub panel or push buttons in FvwmButtons
1864      with a keyboard shortcut?
1866 A: FvwmButtons does not support keyboard shortcuts itself.  Since
1867    fvwm version 2.3.24 the FakeClick command can be used to
1868    simulate a click in the FvwmButtons window:
1870    fvwm-2.3.24 or later:
1872      DestroyFunc press_fvwmbuttons
1873      AddToFunc press_fvwmbuttons
1874      + I Next (FvwmButtons, CirculateHit) WarpToWindow $1 $2
1875      + I FakeClick depth 2 press $0 release $0
1877    fvwm-2.5.1 or later (moves the pointer back to the original
1878    position):
1880      DestroyFunc press_fvwmbuttons
1881      AddToFunc press_fvwmbuttons
1882      + I SetEnv pointer_x $[pointer.x]
1883      + I SetEnv pointer_y $[pointer.y]
1884      + I Next (FvwmButtons, CirculateHit) WarpToWindow $1 $2
1885      + I FakeClick depth 2 press $0 release $0
1886      + I WindowId root WarpToWindow $[pointer_x]p $[pointer_y]p
1888    With this function, you can warp the pointer to the desired
1889    button to press and simulate a click.  Call it with
1891      press_fvwmbuttons btn xoff yoff
1892                          ^    ^    ^
1893                          |    |    |___ y offset of the button
1894                          |    |________ x offset of the button
1895                          |_____________ button to press
1897    For example, if the button of a panel is at 30% of FvwmButtons'
1898    width and 10% of its height and you want to simulate mouse
1899    button 1, issue
1901     press_fvwmbuttons 1 30 10
1903    You can bind this to a key.  For example:
1905      Key f1 a n press_fvwmbuttons 1 30 10
1907    Note that this solution does not work well if the mouse is moved at
1908    the same time.
1910    With fvwm-2.5.24 or later (using SendToModule) a much better
1911    solution is:
1913       SendToModule buttons-alias PressButton A 1
1914    
1915    This would send the FvwmButtons instance "button-alias" a command
1916    to invoke the action that button "A" has as though the button were
1917    clicked with mouse button 1.  For instance:
1919       *button-alias: (Id A, Title "My Button", Action (Mouse 1) \
1920          `Exec exec xcalc`)
1922    
1923 ======================================================================
1924             5 - Development, Known Problems & Bug Reports
1925 ======================================================================
1927 5.1  I'd really like to see neat feature XYZ in fvwm.  Wouldn't
1928      that be cool?  I even have a patch.  When can it be added?
1930 A: If you plan to write a patch, *please*, first of all fetch the
1931    latest development release from our web site or better yet use CVS
1932    as described in http://fvwm.org/documentation/dev_cvs.php.  It is
1933    also a good idea to contact the fvwm-workers list.  At times,
1934    patches for older releases may prove completely worthless, e.g.
1935    because the fix has already been integrated, a feature already
1936    added or removed or simply because the code is very different to
1937    the code you patches.  You will do yourself and us a great favor.
1938    Otherwise all your hard work may be wasted.
1940    People are always requesting or suggesting new features (many of
1941    which are great ideas and where a lot of the current features came
1942    from).  One of the more common ones for example is Windows 95 look
1943    and feel (although since this was first written, that particular
1944    feature has actually been indirectly implemented via several
1945    appearance-affecting features).
1947    I'd like to make a statement about this.  fvwm is supposed to be
1948    small, fast, powerful, and flexible, and sometimes tradeoffs have
1949    to be made here.  The module interface helps here, as a lot of
1950    features that not everyone wants or needs don't have to be in the
1951    main module consuming resources for those people that don't want or
1952    need them.
1954    So if you have a suggestion (or a patch), please think of a way to
1955    make it as small and generic as possible if you feel it belongs in
1956    the main module.  Please have a look at the enhancements that are
1957    listed in our bug tracking system (see Q5.3).
1959    If you plan to make a patch, please contact the fvwm-workers
1960    mailing list first.  From time to time we are changing the code in
1961    a very disruptive way and if you create a patch to a version before
1962    such changes were made we will all have a hard time to integrate
1963    the patch.  Most of the time we will ask you to update the patch
1964    for the current code anyway.
1966    Bear in mind that we make no guarantees that we'll add any
1967    requested feature or apply any submitted patches to the official
1968    version, but please don't let this dissuade you from submitting
1969    them.  We like to get new ideas and we're always curious to see how
1970    someone would implement a given feature, even if we never plan to
1971    put it in fvwm. Also, we may choose to re-implement any patches
1972    submitted, which may change the syntax, functionality, etc.  Please
1973    don't take offense from that, as we mean no offense and we
1974    generally have a good reason (at least by our way of thinking) for
1975    our actions...
1977 ----------------------------------------------------------------------
1979 5.2  How do I create/submit/apply patches?
1981 A: First of all, please read the first section of the answer to Q5.1!
1983    Please add proper entries to the ChangeLog file(s) and possibly to
1984    NEWS and AUTHORS files whenever you submit a patch.  The ChangeLog
1985    lists *all* changed files and functions along with a useful
1986    explanation of the change details.  The NEWS file mentions all
1987    user-visible changes, including bug fixes.  Also, do not forget to
1988    write a section for the man page if the patch includes new
1989    features.
1991    You can find more detailed instructions for working with the
1992    fvwm sources in the files doc/DEVELOPERS and doc/CONVENTIONS in
1993    CVS or the tarballs.
1995    Creating a patch against CVS sources (preferable) -
1997         1) Execute "cvs update -AdP" to ensure there are no conflicts
1998            with the most recent sources.
1999         2) Don't forget to update the ChangeLog file (see below) and
2000            all manual pages if needed.
2001         3) In the base cvs directory run: cvs diff -u >myfeature.patch
2003    Creating a patch against released sources -
2005         1) Copy the original file(s) to the same name with the
2006            additional extension of .orig (or something like that).
2007         2) Update the ChangeLog file.  If you use (x)emacs, move the
2008            cursor into the function you changed and hit <ctrl>-x 4 a.
2009            This will generate an empty ChangeLog entry in the right
2010            file (there are several ChangeLogs).  Add a description of
2011            what you did.  Do this each time you change a function or
2012            file (for changes outside of functions).  You should update
2013            the AUTHORS and NEWS files too if appropriate.
2014            Please take the time to add the ChangeLog entries, it makes
2015            our work a lot easier.
2016         3) Run diff with either the -c (context) or -u (unified)
2017            switch on the sets of files, with the .orig file FIRST.  I
2018            prefer unified diff's because they are smaller, but
2019            sometimes they aren't as readable (and some diff versions
2020            don't support unified diffs), so either context or unified
2021            diffs are fine (but please, no "plain" diffs).
2023         ex: cp fvwm.c fvwm.c.orig ; <edit> ; diff -u fvwm.c.orig fvwm.c
2025    Submitting a patch -
2027         Mail it to the fvwm-workers mailing list
2028         <fvwm-workers@fvwm.org>.
2030         If your patch is large you should compress it (preferably with
2031         gzip).  Should it still be larger than 25k you might want to
2032         to place it on a web page and email the URL to the mailing
2033         list or ask on the fvwm-workers list first.
2035         Be sure to read the answer to Q5.1.
2037         Don't forget the ChangeLog and the documentation.
2039    Applying a patch -
2041         Get a copy of the program 'patch' from your favorite source,
2042         such as ftp://ftp.gnu.org/gnu/patch/, compile it, and then
2043         follow its directions (generally just cd into the appropriate
2044         directory and run 'patch < patchfile').
2046 ----------------------------------------------------------------------
2048 5.3  How do I submit a bug report?
2050 A: Please do not report any 'bugs' related to XMMS in the fvwm bug
2051    tracking system or the fvwm mailing lists but send them to the XMMS
2052    developers instead.
2054    Please enter a DETAILED description of your problem in our
2055    web-based bug-tracking system.  You can find a link on our web page
2056    (see Q1.3). By detailed we mean more than just "my window isn't
2057    behaving right" or "I found a bug":
2059         - First of all: use our bug tracking system! You will find
2060           a link to it on our main web page (see Q1.3).  If for some
2061           reason the bug tracking system doesn't work for you, please
2062           use the fvwm-bug shell script that comes with fvwm.
2063         - Describe the problem as best you can, preferably with
2064           suggestions on how to reproduce it easily
2065         - If applicable, include information from:
2066                 xwininfo (preferably w/ the -all option)
2067                 xprop
2068                 FvwmIdent
2069                 xdpyinfo (maybe)
2070         - What exact version of fvwm you are running.
2071         - What OS & version you are running under
2072         - What version of X11 are you running under, and is it an MIT
2073           server or a vendor specific server (e.g. the OpenWindow X
2074           server under SunOS)
2075         - How was fvwm compiled (compiler & version, options, etc)
2076         - What settings do you have in your config file that may be
2077           pertinent.
2079 ----------------------------------------------------------------------
2081 5.4  I have a window that is behaving unexpectedly under fvwm, but
2082      just fine under (whatever other window manager), or I have just
2083      some random bug.  What do I do?
2085 A: First, check your rc file and your .Xdefaults to make sure that
2086    something blatantly obvious in there isn't causing the problem.
2087    Second, *PLEASE PLEASE PLEASE* check the FAQ, BUGS, TODO, and man
2088    pages.  Finally, check the official WWW page and the mailing list
2089    archives (which have a search facility) stored there.
2091    If you still can't figure it out, report your problem to our bug
2092    tracking system (see Q5.3).
2094 ----------------------------------------------------------------------
2096 5.5  Why do NumLock, CapsLock and ScrollLock interfere with
2097      ClickToFocus and/or my mouse bindings?
2099 A: Because they are treated as modifiers.  You can use the
2100    IgnoreModifiers command to turn individual modifiers off for
2101    bindings.  With XFree86 and fvwm version 2.4.0 or above, the
2102    right command is
2104      IgnoreModifiers L25
2106    If you changed your modifiers manually or are using a different
2107    X server use the 'xmodmap' command to find out which modifiers
2108    correspond to the keys you want to switch off.
2110    This command creates a lot of extra network traffic, depending
2111    on your CPU, network connection, the number of Key, Mouse or
2112    PointerKey commands in your configuration file and the number
2113    of modifiers you want to ignore.  If you do not have a
2114    lightning fast machine or very few bindings you should not
2115    ignore more than two modifiers.  So do not ignore scroll-lock
2116    if you have no problem with it.
2118    A better way to solve this problem is to modify the keyboard
2119    mapping of your X server.  The commands
2121      xmodmap -e "clear Lock"
2122      xmodmap -e "clear Mod2"
2123      xmodmap -e "clear Mod5"
2125    remove the CapsLock, NumLock and ScrollLock from the keyboard
2126    map.  Pressing these keys has no effect then.  To re-add them
2127    try this:
2129      xmodmap -e "add Lock = Caps_Lock"
2130      xmodmap -e "add Mod2 = Num_Lock"
2131      xmodmap -e "add Mod5 = Scroll_Lock"
2133    Fvwm has to be restarted to use the changes made by
2134    xmodmap.  Please refer to the man page of the xmodmap command
2135    for further details.  If you disable the CapsLock key in your
2136    keyboard map in this way, you can speed up fvwm a bit by
2137    removing the Lock modifier from the list of ignored modifiers:
2139      IgnoreModifiers
2142    Since we all occasionally press NumLock or ScrollLock, it makes
2143    sense to redefine some main bindings to work with any modifiers.
2144    I.e. consider to replace something like this in your configuration:
2146      Mouse 1 R N Menu MenuFvwmRoot
2148    with this:
2150      Mouse 1 R A Menu MenuFvwmRoot
2152 ----------------------------------------------------------------------
2154 5.6  Menus with gradient backgrounds flicker or are very slow.
2156 A: The flickering is caused by fvwm constantly redrawing the menus
2157    when a sub menu pops up or down.  One way to help this is to use
2158    a X server with backing storage (XFree86 has backing storage
2159    support, I don't know about other servers but I guess that any
2160    decent X server has it).  If your Xserver is started with the
2161    -bs option, remove it.  If not try the -wm option, for example:
2163      startx -- -wm
2165    You may have to adapt this example to your system (e.g. if you
2166    use xinit to start X).
2168    If that doesn't help, either because your X server does not have
2169    backing storage or because system resources are limited, make
2170    sure sub menus do not overlap the parent menu:
2172      MenuStyle <stylename> PopupOffset 1 100
2174    Unfortunately this does not work properly with the fvwm
2175    menu style.
2177    For the speed problem both suggestions above might help too.
2178    Another thing to try is to turn hilighting of the active menu
2179    item other than by foreground color off.  Put these lines in your
2180    fvwm/config after the menu styles have been defined:
2182      MenuStyle <stylename> Hilight3DOff, HilightBackOff
2183      MenuStyle <Stylename> ActiveFore <preferred color>
2185 ----------------------------------------------------------------------
2187 5.7  Why won't the StartIconic style work with {Netscape, etc.}?
2189 A: The application won't allow it.  This has only been observed with
2190    Netscape.  When Netscape starts up, fvwm starts the main window in
2191    the iconic state.  Netscape immediately issues another MapRequest,
2192    to which the window manager must respond by de-iconifying the
2193    window, according to the ICCCM rules.  (Netscape can be persuaded
2194    to start iconic, however, by invoking it with the -iconic command
2195    line flag.)
2197 ----------------------------------------------------------------------
2199 5.8  How do I capture the output (e.g. errors) of fvwm?
2201 A: Errors are reported to the standard error file.  You can redirect
2202    standard error to a file when fvwm is started: "fvwm 2>
2203    fvwm-errors". X sessions started by xdm often redirect errors to a
2204    file named ".xsession-errors".
2206    Alternatively, FvwmConsole or "FvwmForm FvwmForm-Talk" modules
2207    will display error messages.
2209 ----------------------------------------------------------------------
2211 5.9  I try to run some program under fvwm, but it dies with an X11
2212      error like BadAccess.  The same program works just fine under MWM
2213      or OLWM.  What's going on?
2215 A: The error message usually looks something like this:
2217         X Error of failed request:  BadAccess (attempt to access private
2218         resource denied)
2219          Major opcode of failed request:  28 (X_GrabButton)
2220          Serial number of failed request:  1595
2221          Current serial number in output stream:  1596
2223    Well, this is telling you that there is a conflict in key/button
2224    assignments.  In your config you have bound some key/button that
2225    this program really wants to bind to an action, but it can't since
2226    fvwm has already done so (but you weren't doing it in the rc file
2227    for your previous window manager).  Figure out what the offending
2228    key binding is and remove it from your fvwm/config, or temporarily
2229    via "FvwmForm FvwmForm-Talk" by removing the fvwm binding (see the
2230    man page for the Key & Mouse commands).
2232 ----------------------------------------------------------------------
2234 5.10  Every time I update my install, my currently running fvwm
2235       session dies.  Why is that?
2237 A: Many OSes swap the program from memory via the image on the disk,
2238    and if you overwrite it, and then the current one tries to swap
2239    something back into memory before you restart, it'll core dump.  To
2240    avoid this, rename your old executables or move them to some other
2241    directory.  The 'mv' command preserves the inode so it won't
2242    core dump, but then when you restart fvwm it'll pick up the new
2243    copy.
2245 ----------------------------------------------------------------------
2247 5.11  After I restart fvwm certain windows or icons raise above
2248       all other windows and cannot be lowered by any means.  One
2249       example are the shortcuts of KFM (the KDE file manager).
2250       What can I do about that?
2252 A: Some applications use so called 'override redirect' windows that
2253    are not (and cannot be) managed by the window manager.  By
2254    convention as defined in the ICCCM, such windows must only be
2255    displayed for a very short time.  KFM and possibly other
2256    applications ignore this convention and use permanent 'override
2257    redirect' windows, e.g. the KFM shortcuts.  Fvwm can not easily
2258    detect these windows when it restarts and places the windows
2259    managed by fvwm below them.
2261    However, since fvwm version 2.3.8 there is a command that will
2262    help you, although it might cause trouble with other applications
2263    using 'override redirect' windows.  We can't make any promises
2264    since KFM is violating the conventions and the applications may
2265    violate them in different ways.
2267    Now the command.  Put this anywhere in your config file:
2269      BugOpts RaiseOverUnmanaged on
2271 ----------------------------------------------------------------------
2273 5.12  The StartsOnPage style does not work for me.  Why?
2275 A: Many applications request a specific position where they want to
2276    appear (the so called 'program specified position').  Unless fvwm
2277    is told explicitly to ignore this, the program specified position
2278    overrides the StartsOnPage style.  Use this line in your
2279    configuration file:
2281      Style * NoPPosition
2283 ----------------------------------------------------------------------
2285 5.13  Some modules can not be started when I restart fvwm.
2287 A: You may see the following error message on the console:
2289      [fvwm][PositiveWrite]: <<ERROR>> Failed to read descriptor:
2290      - data available=N
2291      - terminate signal=N
2293    It means that fvwm has given up waiting for one of its modules to
2294    reply, and so has killed it.  The length of the timeout is a
2295    configuration parameter - try adding
2297      ModuleTimeout 10
2299    to your config file.  The units are in seconds and the default
2300    value is 5.
2302    This problem will only occur on slow machines or high system load
2303    (many open windows).
2306 ----------------------------------------------------------------------
2308 5.14  I'm running Rational Rose and fvwm ignores its windows.
2310 A: This problem might occur on other applications besides the one
2311    mentioned.
2313    The symptoms as reported by Raymond Toy are:
2315      I've been using fvwm for ages and it's always worked for me just
2316      fine.  However, I've started using Rational Rose for Solaris.  fvwm
2317      seems to get completely confused.
2319      o Fvwm doesn't draw any frames around the Rose window like it
2320        does for all other windows (except for those I explicit said
2321        not to).
2323      o The Rose window is always on top.  Nothing I do can bring
2324        another window above the Rose window.
2326      o Using fvwm's identify window module shows nothing.  No identify
2327        window pops up showing the window info.
2329      o Focus sometimes seems to be lost.  (I have focus follows
2330        mouse).  I have to move the mouse out of the window and back in
2331        to get focus. Sometimes I also have to click in the window to
2332        get focus.
2334      The annoying thing is that this all seems to work with CDE and
2335      dtwm. I don't want to have to switch to dtwm so any hints or
2336      pointers on where to look to get fvwm to understand this window
2337      would help me a lot.
2340    Heres what we found out:
2342    Rational Rose uses software from Mainsoft that lets MS Windows
2343    applications be recompiled to run on UNIX.
2345    There are 2 Mainsoft Knowledgebase pages that relate to UNIX
2346    window managers:
2348         http://www.mainsoft.com/kb_mainwin/kbmw0027.html
2349         http://dev.mainsoft.com/Default.aspx?tabid=58 [KBMW0034]
2351    These pages suggest that you export MWWM=allwm or MWWM=MWM before
2352    starting the application. The first page is missing, but can be
2353    found using http://web.archive.org.
2355    Raymond reports:
2357      This works just fine!   Setting MWWM=allwm, Rose  comes
2358      up like a normal X app where  the WM draws the borders.
2359      With MWWM=MWM, it works ok too except that for the main
2360      window,  no borders are drawn  by the WM and Rose draws
2361      its own  borders (I  have  fvwm respecting   MWM decor
2362      hints).  (This   is     correct  as mentioned by    the
2363      Knowledgebase pages above.)   I don't  recall what Rose
2364      looks like with dtwm, but I suspect it's quite close to
2365      all MWWM=MWM.
2367    Next we had Klaus Zeitler report that the Rational Rose official
2368    startup script is explicitly setting ALLWM to nothing.  This makes
2369    it more difficult for an individual user to set this variable.
2370    If you can, you can just modify the script, otherwise, your other
2371    alternative is to copy the script somewhere where you can modify it
2372    and run it from there.
2374 ----------------------------------------------------------------------
2376 5.15  Although I use the WindowListSkip style for my modules they
2377       still show up in FvwmIconMan, FvwmWinList etc.
2379 A: Make sure you have
2381      *FvwmIconMan: UseWinList true
2383    in your config file.  If that does not help, the modules you are
2384    using may not match the fvwm executable.  Recompile and reinstall
2385    everything and the problem should go away.
2387 ----------------------------------------------------------------------
2389 5.16  When I Maximize an application, sometimes I get gaps around
2390       the edges, and other times I don't.  What's going on?
2392 A: The ICCCM specification allows applications to specify certain
2393    properties the window manager should honor, such as aspect
2394    ratio (PAspect) or increments to be resized in (PResizeInc).  Of
2395    course, sometimes these properties won't perfectly match the
2396    size of your desktop (or ewmh struts), if that should happen,
2397    you will get gaps.
2399    In general, the application will have a good reason for doing
2400    this (for example, a terminal window may not want to have only
2401    part of a column visible), but you can make fvwm ignore the
2402    hints with
2404      Style * ResizeHintOverride
2406 ======================================================================
2407                           6 - Miscellaneous
2408 ======================================================================
2410 6.1  What exactly is the difference between a DESK, a PAGE, and the
2411      SCREEN?
2413 A: Our naming convention is sometimes a source of confusion, and when
2414    discussing problems and the like it's good to maintain a consistent
2415    meaning.  To illustrate how features of fvwm should be referred to
2416    - fvwm has multiple disjoint DESKTOPS, each of which is comprised
2417    of M by N PAGES, which are each the size of the physical SCREEN.
2418    The physical SCREEN acts as a viewport over one of the PAGES of the
2419    current DESK.  Here's a picture to clarify (also, take a look at
2420    the FvwmPager module):
2422              Desk 0                     Desk 1
2423      +----------+----------+    +----------+----------+
2424      |          |          |    |          |          |
2425      | Page 0 0 | Page 1 0 |    |          |          |
2426      |          |          |    |          |          |
2427      |          |          |    |          |          |
2428      +----------+----------+    +----------+----------+
2429      |+--------+|          |    |          |          |
2430      ||Page 0 1|| Page 1 1 |    |          |          |
2431      ||        ||          |    |          |          |
2432      |+--------+|          |    |          |          |
2433      +----------+----------+    +----------+----------+
2435    It shows two 2 x 2 DESKTOPS.  If the current DESK were number 0,
2436    and the current PAGE were 0 1, the SCREEN would show only the
2437    windows located there, plus any sticky ones.
2439    Desktops are numbered consecutively, beginning with 0.  The user is
2440    not responsible for creating new desktops, those details are
2441    handled inside fvwm.  To display the different desktops, the user
2442    can configure key bindings that determine which desktop is
2443    displayed.  For example, to have the combinations Meta-1 to Meta-4
2444    display desktop numbers 0 to 3, one would add this to her config:
2446      Key 1 A M GotoDesk 0
2447      Key 2 A M GotoDesk 1
2448      Key 3 A M GotoDesk 2
2449      Key 4 A M GotoDesk 3
2451    The same can be done for pages.  For example, if each desktop has
2452    a size of 2 by to pages you could bind Meta-F1 to Meta-F4 to
2453    flip pages:
2455      DeskTopSize 2x2
2456      Key F1 A M GotoPage 0 0
2457      Key F2 A M GotoPage 1 0
2458      Key F3 A M GotoPage 0 1
2459      Key F4 A M GotoPage 1 1
2461    It is also a good idea to create a pager that displays several
2462    desktops, side by side.  This command displays the first 4
2463    desktops:
2465      Module FvwmPager 0 3
2467    Or if you prefer to see only the current desktop in the pager:
2469      Module FvwmPager * *
2471 ----------------------------------------------------------------------
2473 6.2  I'd really like {OpenWindows, NeXT, Win95, Mac, etc} look and
2474      feel.  Are you going to support that?
2476 A: This is not our primary mission, but we think fvwm does a pretty
2477    good job of producing these appearances.
2479    You may want to take a look at the
2480         http://fvwm-themes.sourceforge.net/
2481    package.
2483 ----------------------------------------------------------------------
2485 6.3  Where can I get more XPMs for icons?
2487 A: If you want more color icons, grab the ones out of the ctwm
2488    distribution (also at ftp.x.org) which has a lot of nice ones.  You
2489    can also find more in other distributions at ftp.x.org, and at
2490    http://www.sct.gu.edu.au/~anthony/icons/ (which has a lot, I
2491    believe).
2493    Icons used to be distributed along with fvwm.  Now there is a basic
2494    set of icons available at the fvwm web site.  You might find some
2495    links at the fvwm web site to other sources of icons.
2497    You may want to take a look at the
2498         http://wm-icons.sourceforge.net/
2499    package.
2501 ----------------------------------------------------------------------
2503 6.4  Linux XF86 virtual screen size & fvwm interaction...
2505 A: Turn off the Linux Virtual Screen stuff in your XF86Config file if
2506    you don't like it.  The XFree86 virtual screen feature and hardware
2507    panning support in certain video cards is a pretty useless kludge
2508    when you're using a window manager that implements virtual
2509    desktops.
2511 ----------------------------------------------------------------------
2513 6.5  I know this question doesn't have to do with fvwm, but what
2514      happened to to rxvt and rclock which Rob Nation used to support?
2515      Where can I find them now?
2517 A: The official home for rxvt is:
2519      http://www.rxvt.org/
2521    and rclock can be found in that rxvt distribution as well.
2523 ----------------------------------------------------------------------
2525 6.6  How do I set the background with fvwm?
2527 A: Setting the background image is not really part of the window
2528    manager.  If you are using one of the Linux distributions, most
2529    likely, some part of the distribution is setting the background for
2530    you.
2532    There is a program shipped with fvwm (fvwm-root, previously known
2533    as xpmroot) that you can use to set the background to an XPM or PNG
2534    image.  Other programs like "xv", "xli", "xloadimage", "display",
2535    "feh" and "Esetroot", may be used too, they support some image
2536    formats that fvwm-root does not.
2538    If you just want a static image on your background, you might
2539    invoke one of these programs from your .xsession or .xinitrc file.
2540    You can also invoke one of these programs from the StartFunction in
2541    your config.
2543    The fvwm module FvwmBacker can be used to change the background
2544    depending on the desk you are currently on by calling an external
2545    program.  One big disadvantage of external programs is that
2546    changing the background on the fly can be pretty slow.  FvwmBacker
2547    can use the image defined in a colorset and cached by fvwm for fast
2548    background changing.  For example:
2550      Colorset 10 TiledPixmap foo.xpm
2551      Colorset 11 Pixmap bar.png
2552      FvwmBacker: Command (Desk *, Page * 0) Colorset 10
2553      FvwmBacker: Command (Desk *, Page * 1) Colorset 11
2555    However, fvwm can handle only xpm, xbm and png images.  Other
2556    formats must be converted before they can be used in fvwm.
2558    If you want to set a different background per screen (i.e., you're
2559    using Xinerama), then the program "Nitrogen" can be used to do
2560    that.  See:  http://projects.l3ib.org/nitrogen/
2562 ----------------------------------------------------------------------
2564 6.7  When I use Fvwm, my XYZ isn't the right color.  Whats wrong?
2566 A: Under this heading we've had questions about FvwmForm being all
2567    white, icons not displaying and messages about being unable to
2568    allocate colors.
2570    Older hardware uses something called 8 bit color.  You can also
2571    mis-configure newer hardware so that it's only using 8 bit color.
2572    When you use 8 bit color, your display can only have 256 colors on
2573    it at once.
2575    This is explained in excruciating detail in the
2576         http://www.sunhelp.org/faq/FrameBuffer.html
2578    If your display can support more than 256 colors, that's the way to
2579    go.  Look up the documentation for your X server.  You may want to
2580    start with "man X".
2582    If you are stuck with 8 bit color, fvwm can help.  In the 2.2.x
2583    releases, you can use the "ColorLimit" command to reduce the number
2584    of colors Fvwm uses in icons.  In the 2.3.x releases and later,
2585    ColorLimiting is automatic, but you still might want to use this
2586    command to further reduce color use.
2588    Other things you may want to do:
2590    - Always run Netscape with the "-install" argument.
2592    - If you use an image on your screen background, reduce the number
2593      of colors it uses.  For xv add the "-nc nn" argument.  For
2594      xli use the "-colors nn" argument.
2596    - Don't use color gradients.
2598    - Some applications are color hungry.  Beware of anything TK based,
2599      and FrameMaker in its default setting.
2601    If you still have problems after this, try the fvwm mailing list.
2603 ----------------------------------------------------------------------
2605 6.8  I just got a mouse with 57 buttons.  How do I make Fvwm use them?
2607 A: Okay, we know you don't have 57 buttons, but we've seen reports
2608    of up to 7 so far.  Starting with Fvwm 2.4.0 Fvwm supports all
2609    five mouse buttons that X officially supports, and since
2610    2.5.11, up to 9 buttons are supported by default.
2612    2.5.11 and later:
2614      To use more than 9 buttons (up to 31), modify the file
2615      libs/defaults.h.  Replace
2617        #define NUMBER_OF_EXTENDED_MOUSE_BUTTONS      9
2619      with
2621        #define NUMBER_OF_EXTENDED_MOUSE_BUTTONS      15
2623    2.4.10 to 2.5.10:
2625      To use more than 5 buttons, modify the file libs/defaults.h.
2626      Replace
2628        #define NUMBER_OF_MOUSE_BUTTONS               5
2630      with
2632        #define NUMBER_OF_MOUSE_BUTTONS               7
2634    Then recompile and reinstall fvwm.  However, the buttons with
2635    numbers higher than 5 do not work as well as 1 to 5.  This is
2636    because X does not provide the necessary interface to handle more
2637    than 5 buttons in some functions.  This means that some
2638    functionality is not available with buttons 6 and higher.
2640    The maximum possible number you can use is 31.  Any higher value
2641    will probably not work and possibly even crash fvwm or its modules.
2643 ----------------------------------------------------------------------
2645 6.9  Why does fvwm change my X Cursor theme?
2647 A: It doesn't.  There is a standard set of cursors that should
2648 always be available to applications, such as crosshair, left_ptr,
2649 arrow, pencil, and so on.  Your theme should provide each of these
2650 cursors, but some don't.  When something (for example, an
2651 application or fvwm) requests a cursor that your theme does not
2652 provide, X falls back to the default.  If you are seeing fvwm
2653 using cursors that do not match your theme, you should use
2654 CursorStyle to change to a cursor that is available, or find a
2655 more complete theme.  Note that fvwm does not control what cursors
2656 your applications request.
2658 ======================================================================
2659               7 - Hints and Examples from the Developers
2660 ======================================================================
2662 7.1  An easy way to test new configurations.
2664    Did you know that you do not need to restart X or fvwm to see what
2665    most configuration commands do? There are several modules
2666    that allow you to issue fvwm commands at any time.  Among
2667    these are FvwmCommand, "FvwmForm FvwmForm-Talk" and FvwmConsole.
2668    Personally I use FvwmCommand and FvwmConsole.
2670    When you run FvwmConsole you get a shell like window where you can
2671    type configuration commands that are sent to fvwm.  Just add an
2672    entry to some menu that starts it:
2674      AddToMenu main_menu
2675       + "FvwmConsole" Module FvwmConsole
2677    Using FvwmCommand is a bit more tricky.  To use it you need to
2678    start a server in your config by adding this line:
2680      Module FvwmCommandS
2682    Make sure FvwmCommand is in your search path.  Now you can enter
2683    commands on the command line of your favorite shell:
2685      FvwmCommand "MenuStyle * Font 6x9"
2687    Note that you have to quote the command.  The advantage of
2688    FvwmCommand over FvwmConsole is that you can use your shell with
2689    all its features to run commands (command completion and history
2690    for example).  The disadvantage is that it is a bit slow since a
2691    new FvwmCommand has to be started for each command.
2693    Other related modules and commands are FvwmScript and PipeRead.
2695 ----------------------------------------------------------------------
2697 7.2  Using shell commands for configuration.
2699    Sometimes you might want to use the output of a shell command or
2700    script in your config.  For example you might need a menu that
2701    has all filenames in a certain directory as its entries.  You can
2702    use the PipeRead command and the FvwmCommand module.  I recommend
2703    using PipeRead since creating twenty menu items takes a
2704    considerable amount of time with FvwmCommand.
2706    Example from my config:
2708      # make the background menu
2709       DestroyFunc MakeBackgroundMenu
2710       AddToFunc MakeBackgroundMenu
2711       + I DestroyMenu BackgroundMenu
2712       + I AddToMenu BackgroundMenu Backgrounds Title
2713       + I PipeRead 'for i in `/bin/ls $HOME/.fvwm/backgrounds/*.bg.*`; \
2714             do echo -e AddToMenu BackgroundMenu `basename $i | sed -e \
2715             "s/\.bg\..*$//"` Function SetDefaultBackground $i; done'
2717      # set the default background
2718      DestroyFunc SetDefaultBackground
2719      AddToFunc SetDefaultBackground
2720       + I Exec echo -e $0 > $HOME/.fvwm/background
2721       + I SetBackground
2723      # set a new background
2724      DestroyFunc SetBackground
2725      AddToFunc SetBackground
2726       + I Exec test -r $HOME/.fvwm/background && xv -root -quit -viewonly \
2727             `cat $HOME/.fvwm/background|tr -d "\n"`
2729      # activate setting from last session and build the menu
2730      AddToFunc StartFunction
2731       + I SetBackground
2732       + I MakeBackgroundMenu
2735    The MakeBackgroundMenu function builds a menu that contains an item
2736    for every file that matches the pattern "*.bg.*" in the directory
2737    $HOME/.fvwm/backgrounds.  The suffix .bg.* is removed.  When I
2738    select an item the file is displayed in the background using
2739    xv. Furthermore the path and filename are stored in
2740    $HOME/.fvwm/background.  When I start my next fvwm session the
2741    filename is fetched from there so I get the background from my last
2742    session.
2744    I have an even more complex setup for color palettes.
2746 ----------------------------------------------------------------------
2748 7.3  How to start applications on a page or desk other than the
2749      current.
2751    Use the 'StartsOnDesk' or 'StartsOnPage' style in your config:
2753      Style Netscape* StartsOnPage 0 1
2755    or
2757      Style Netscape* StartsOnDesk 1
2759    Any window with a title that begins with 'Netscape' will be placed
2760    on page 0 1 (desk 1).  You will probably want to use these options
2761    too:
2763      Style * RecaptureHonorsStartsOnPage, CaptureHonorsStartsOnPage
2765    If you want to start applications on a different page in the
2766    background without switching to this page, use the 'SkipMapping'
2767    style:
2769      Style Netscape* StartsOnPage 0 1, SkipMapping
2771 ----------------------------------------------------------------------
2773 7.4  How to start applications on a page or desk other than the
2774      current without moving the viewport to the new page or desk.
2776    Use the SkipMapping style:
2778      Style Netscape* StartsOnPage 0 1, SkipMapping
2780 ----------------------------------------------------------------------
2782 7.5  A more efficient MWM menu style.
2784    Perhaps you have noticed that with the MWM menu style your sub
2785    menus are shown as soon as the pointer enters their menu items,
2786    even if you just want to scroll down the list.  You can prevent
2787    this with the 'PopupDelay' and 'PopupDelayed' options of the
2788    MenuStyle command:
2790      MenuStyle mwm
2791      MenuStyle PopupDelayed, PopupDelay 80
2793    The sub menu will be shown 80 milliseconds after the pointer enters
2794    the menu item.  You will hardly notice the delay.  Note that 80 ms
2795    is just long enough to move through the menu with auto repeat on my
2796    cursor keys.  You may have to experiment with this number to get it
2797    right.
2799 ----------------------------------------------------------------------
2801 7.6  Placing menus on the screen.
2803    Do you have to close windows or move the pointer all over the
2804    screen to find some part of the background where you can bring up
2805    your main menu (or any other root menu)?
2807    Then you should use a keyboard shortcut.  For example
2809      Key  space A M   Menu root c c main_menu
2811    in your config gives you the menu 'main_menu' in the center of the
2812    screen when you press Alt-space.  Or you might want a shortcut to
2813    the window menu:
2815      Key  space A SM  Menu root c c WindowMenu
2817    You can place menus anywhere you like, not just where the mouse
2818    pointer is.  Please read the section for the 'Menu' command in the
2819    man page.
2821 ----------------------------------------------------------------------
2823 7.7  Are you flipping pages by accident when moving the mouse close to
2824      the border of the screen?
2826    You can disable page flipping with the EdgeScroll command:
2828      EdgeScroll 0 0
2830    in your config turns it off.
2832 ----------------------------------------------------------------------
2834 7.8  Lining up your windows and icons.
2836    The SnapAttraction and SnapGrid commands really help to keep your
2837    desktop tidy.  With SnapAttraction windows (or icons or both) are
2838    'attracted' to each other.  When you drag a window (icon) and it
2839    comes close to another window (icon) it clings to it without a gap
2840    between the borders.  Put this command in your config:
2842      SnapAttraction 8 SameType
2844    This means windows cling to other windows if they get closer than
2845    8 pixels and icons cling to icons.  Or if you just want it for
2846    windows/icons use
2848      SnapAttraction 8 Windows
2850    or
2852      SnapAttraction 8 Icons
2854    Or if you want icons to cling to windows and vice versa:
2856      SnapAttraction 8 All
2859    The SnapGrid command is a big help too:
2861      SnapGrid 8
2863    in your config tells fvwm to use a grid of 8 pixels to place
2864    windows and icons.  Try it and see if you like it.
2866    Hint: It might be a good idea to use a divisor of your desktop
2867    width and height for SnapGrid.
2869 ----------------------------------------------------------------------
2871 7.9  Moving the mouse/focus/page with the keyboard.
2873    Try these key bindings for mouse movement:
2875      # shift-<direction> to move a few pixels
2876      Key   Left   A   S   CursorMove -1 0
2877      Key   Right  A   S   CursorMove +1 +0
2878      Key   Up     A   S   CursorMove +0 -1
2879      Key   Down   A   S   CursorMove +0 +1
2881      # shift-meta-<direction> to move 1/4 page
2882      Key   Left   A   SM  Scroll -25 +0
2883      Key   Right  A   SM  Scroll +25 +0
2884      Key   Up     A   SM  Scroll +0  -25
2885      Key   Down   A   SM  Scroll +0  +25
2887    or these to flip pages
2889      # shift-control-<direction> to move a full page
2890      Key   Left   A   SC  CursorMove -10 +0
2891      Key   Right  A   SC  CursorMove +10 +0
2892      Key   Up     A   SC  CursorMove +0  -10
2893      Key   Down   A   SC  CursorMove +0  +10
2895      # Alt-Fn to go to a specific page (like on the Linux console)
2896      Key F1 A M GotoPage 0 0
2897      Key F2 A M GotoPage 1 0
2898      Key F3 A M GotoPage 0 1
2899      Key F4 A M GotoPage 1 1
2901    or to change the focus to a window in a specific direction:
2903      # number keys on keypad to move the focus
2904      Key KP_1 A C Direction SouthWest (AcceptsFocus) Focus
2905      Key KP_2 A C Direction South (AcceptsFocus) Focus
2906      Key KP_3 A C Direction SouthEast (AcceptsFocus) Focus
2907      Key KP_4 A C Direction West (AcceptsFocus) Focus
2908      Key KP_6 A C Direction East (AcceptsFocus) Focus
2909      Key KP_7 A C Direction NorthWest (AcceptsFocus) Focus
2910      Key KP_8 A C Direction North (AcceptsFocus) Focus
2911      Key KP_9 A C Direction NorthEast (AcceptsFocus) Focus
2913 ----------------------------------------------------------------------
2915 7.10  The cat safe desktop ^_^
2917    If your cats keep stepping on your keyboard while you are brewing
2918    another cup of coffee, one of these hints may help:
2920      Use 'Style * MouseFocus' and move the mouse pointer over the
2921      background when you go away.
2923      If you can't do without your 'SloppyFocus' you can move the
2924      mouse pointer into a window that takes no keyboard input and
2925      give it the focus (e.g. FvwmButtons or a console message
2926      window).  A true fanatic creates a separate window with a picture
2927      of his cat for this ^_^
2929 ----------------------------------------------------------------------
2931 7.11  Lowering and moving windows.
2933    In some configurations moving a window with the middle mouse
2934    button lowers the window after moving it.  Lowering it before
2935    moving gives you a nice visual effect:
2937      Mouse  2 T A  Function MoveOrLower
2939      DestroyFunc MoveOrLower
2940      AddToFunc MoveOrLower
2941       + C   Lower
2942       + M   Lower
2943       + M   Move
2944       + D   Lower
2946 ----------------------------------------------------------------------
2948 7.12  Toggling windows on and off.
2950    It is often desirable to have a menu item or perhaps a button in
2951    FvwmButtons or FvwmWharf that launches an application when used
2952    the first time and closes it if used a second time.  Although it
2953    is not obvious how to do this, it is possible.  Let's assume you
2954    need a menu item that toggles an FvwmConsole window on and off.
2956    Then put the following lines in your config (for fvwm-2.5.11 or
2957    later):
2959      DestroyFync ToggleFvwmConsole
2960      AddToFunc ToggleFvwmConsole
2961      + I ToggleWindow FvwmConsole "Module FvwmConsole"
2963      # Application toggling function
2964      # First argument is the window name, second argument is the
2965      # command to start the application.
2966      DestroyFunc ToggleWindow
2967      AddToFunc ToggleWindow
2968      + I None ($$0, CirculateHit) $$1
2969      + I TestRc (Match) Break
2970      + I Next (currentpage, visible, !iconic, $$0, CirculateHit) Close
2971      + I TestRc (Match) Break
2972      + I Next ($$0, CirculateHit) Function MakeVisible
2974      # Helper function
2975      DestroyFunc MakeVisible
2976      AddToFunc MakeVisible
2977      + I MoveToDesk
2978      + I MoveToPage
2979      + I MoveToScreen
2980      + I Raise
2981      + I Iconify off
2982      + I WindowShade off
2984    To invoke the function, you can add it to a menu
2986      AddToMenu <some menu>
2987      + "toggle FvwmConsole" Function ToggleFvwmConsole
2989    Or if you prefer a button in the button bar:
2991      *FvwmButtons: (Action ToggleFvwmConsole)
2993    The lines with MoveToDesk, MoveToPage and Raise will bring the
2994    window to the top of the current page if it is not visible
2995    instead of closing it.  The generic function ToggleWindow can be
2996    reused to toggle all kinds of windows.
2998    If you want to toggle one specific window, e.g. an xterm, but
2999    still want to have other xterms that are not toggled, you must
3000    give the window an unique name:
3002      DestroyFunc RunXMessages
3003      AddToFunc RunXMessages
3004      + I Exec exec xterm -T XMessages -n XMessages \
3005          -e tail -f /var/adm/?* ~/.X.err
3007      DestroyFunc ToggleXMessages
3008      AddToFunc ToggleXMessages
3009      + I ToggleWindow XMessages RunXMessages
3011    Keep in mind that these functions simply check if a window with
3012    the specified name exists.  They will happily close manually
3013    opened windows or launch an application multiple times if the
3014    application is slow to start (e.g. like netscape).
3016    For fvwm-2.5.10 or earlier, these functions should work too:
3018      DestroyFunc ToggleFvwmConsole
3019      AddToFunc ToggleFvwmConsole
3020      + I None (FvwmConsole, CirculateHit) FvwmConsole
3021      + I Next (FvwmConsole, CirculateHit, CurrentPage, Visible) Close
3022      + I Next (FvwmConsole, CirculateHit) MoveToDesk
3023      + I Next (FvwmConsole, CirculateHit) MoveToPage
3024      + I Next (FvwmConsole, CirculateHit) Raise
3026      DestroyFunc ToggleXMessages
3027      AddToFunc ToggleXMessages
3028      + I None (XMessages, CirculateHit) Exec exec \
3029        xterm -T XMessages -n XMessages -e tail -f /var/adm/?* ~/.X.err
3030      + I Next (XMessages, CirculateHit) Close
3032 ----------------------------------------------------------------------
3034 7.13  Starting applications by clicking on an icon (also known as
3035       "docking" applications).
3037    Normally an icon represents a minimized application.  If you
3038    want to turn that around, and launch applications by clicking
3039    on icons we can't stop you.  Heres a way to do that using
3040    FvwmButtons:
3042      # FvwmButtons icon launcher:
3043      DestroyFunc Launcher
3044      AddToFunc Launcher
3045      + I DestroyModuleConfig $0Launch: *
3046      + I *$0Launch: Geometry 64x68
3047      + I *$0Launch: Columns 1
3048      + I *$0Launch: Rows    4
3049      + I *$0Launch: Frame   0
3050      + I *$0Launch: (1x3+0+0, Icon $1, Action (Mouse 1) `Exec $2`)
3051      + I *$0Launch: Pixmap none
3052      + I *$0Launch: (1x1+0+3, Font 9x15, Fore White, Back DarkBlue, \
3053                     Title $0, Action (Mouse 1) `Exec $2`)
3054      + I Style $0Launch HandleWidth 0, NoTitle
3055      + I Module FvwmButtons $3 $0Launch
3056      # Examples:
3057      Launcher RXVT xterm.xpm "rxvt -bg black" "-g +0+0"
3058      Launcher XV   xv.xpm    "xv"   "-g +0+100"
3060    Also, GNOME and KDE have desktop icon applications gmc and kfm,
3061    which enable this functionality.  These applications may be run
3062    under fvwm. Nautilus (version >= 2) and kdesktop may be run under
3063    fvwm version 2.5.1 or better.
3065 ----------------------------------------------------------------------
3067 7.14  Positioning a window using arithmetic.
3069    This example shows how to center a window on the screen.  Note
3070    how is uses PipeRead and the shell construct $(()) in order to
3071    perform arithmetic.
3073      DestroyFunc CenterWindow
3074      AddToFunc   CenterWindow
3075      + I ThisWindow Piperead "echo Move \
3076        +$(( $[vp.width]/2-$[w.width]/2 ))p \
3077        +$(( $[vp.height]/2-$[w.height]/2 ))p"
3079    If you had a window named "MyWindow" you would center it using
3080    the command:
3082    Next (MyWindow) CenterWindow
3084    ThisWindow may be removed, it is only needed to avoid errors when
3085    CenterWindow is called without a window context.  (In which case
3086    see the Pick command.)
3088    With fvwm release 2.5.11, you can place windows in the center of
3089    the screen using "Style X CenterPlacement".
3091    But with fvwm release 2.5.22 and greater CenterPlacement is
3092    deprecated over the use of PositionPlacement style which allows for
3093    not only centering windows, but positioning windows anywhere on the
3094    screen using the same arguments as the Move command.  But in terms of
3095    centering windows:
3097       Style MyWindow PositionPlacement Center
3099 ----------------------------------------------------------------------
3101 7.15  Hiding the mouse pointer.
3103    Some users don't like the mouse pointer getting in the way of
3104    what they are looking at.  You might want to search for and
3105    install the "unclutter" program.  Unclutter hides the mouse
3106    pointer after you haven't moved the mouse for a while.
3108    If you find unclutter causes the pointer to flash on and off
3109    or move around on its own, run unclutter with the -noevents
3110    argument.
3112 ----------------------------------------------------------------------
3114 7.16  Finding the mouse pointer.
3116    Sometimes its hard to see the mouse pointer.  Here is a way to
3117    find it:
3119      Key Super_L A A Exec xmessage -name "SmallBlob" -bg red \
3120        -fg white -nearmouse -timeout 1 'I am here!'
3121      Style SmallBlob UsePPosition, NoTitle, NoHandles, BorderWidth 10
3123 ----------------------------------------------------------------------
3125 7.17  Autohiding FvwmButtons or other windows.
3127    Some applications have a feature usually called "autohiding"
3128    which allows to withdraw a window to a location where it does
3129    not use precious desktop space.  It is possible to write some
3130    small functions in fvwm that can hide any window you like:
3132    fvwm-2.5.11 or later:
3134      # The autohiding functions
3135      DestroyFunc autohide
3136      AddToFunc autohide
3137      + I ThisWindow ($0) Deschedule $[w.id]
3138      + I ThisWindow ($0) KeepRc ThisWindow (shaded) WindowShade off
3139      + I TestRc (!Match) All ($0, !shaded) autohide_hide $1 $2
3141      DestroyFunc autohide_hide
3142      AddToFunc autohide_hide
3143      + I Schedule $0 $[w.id] WindowShade $1
3144      + I Schedule $0 $[w.id] Deschedule $[w.id]
3146      # Start FvwmAuto
3147      AddToFunc StartFunction
3148      + I Module FvwmAuto 1 -menter enter_handler
3150      # Add the windows you want to autohide
3151      DestroyFunc enter_handler
3152      AddToFunc enter_handler
3153      + I autohide FvwmButtons 500 S
3154      #            ^           ^   ^
3155      #            |           |   |___  Shade direction (optional)
3156      #            |           |_______  Hide delay (milliseconds)
3157      #            |___________________  Unique window name/resource
3159    Simply add any windows you like to the enter_handler function
3160    as in the example above.  The autohide function is called with
3161    two or three parameters.  The first one is the window's name or
3162    class, which must be unique.  The second is the delay in
3163    milliseconds before the window is hidden after the pointer
3164    leaves it, and the last - optional - one indicates the
3165    direction in which it is hidden (N, S, E, W, NW, NE, SW or SE).
3167    You can find a slightly more complicated version below.  The
3168    difference is that showing the window does not happen
3169    immediately, but can be delayed too.
3171    fvwm-2.5.11 or later:
3173      DestroyFunc autohide
3174      AddToFunc autohide
3175      + I ThisWindow ($0) Deschedule $[w.id]
3176      + I TestRc (!Match) Deschedule -$[w.id]
3177      + I ThisWindow ($0) KeepRc ThisWindow (shaded) \
3178          autohide_show $1 $3
3179      + I TestRc (!Match) All ($0, !shaded) autohide_hide $2 $3
3181      DestroyFunc autohide_show
3182      AddToFunc autohide_show
3183      + I Schedule $0 -$[w.id] WindowShade $1 off
3184      + I Schedule $0 -$[w.id] Deschedule $[w.id]
3185      + I Schedule $0 -$[w.id] Deschedule -$[w.id]
3187      DestroyFunc autohide_hide
3188      AddToFunc autohide_hide
3189      + I Schedule $0 $[w.id] WindowShade $1 on
3190      + I Schedule $0 $[w.id] Deschedule $[w.id]
3191      + I Schedule $0 $[w.id] Deschedule -$[w.id]
3193      AddToFunc StartFunction
3194      + I Module FvwmAuto 1 -menter enter_handler
3196      DestroyFunc enter_handler
3197      AddToFunc enter_handler
3198      + I autohide FvwmButtons 250 500 S
3199      #            ^           ^   ^   ^
3200      #            |           |   |   |__  Shade direction (optional)
3201      #            |           |   |______  Hide delay
3202      #            |           |__________  Show delay
3203      #            |______________________  Unique window name/resource
3205    These functions work too in 2.5.8 to 2.5.10, but you may have
3206    to remove the KeepRc command from the autohide function in both
3207    versions.
3209 ----------------------------------------------------------------------
3211 7.18  Using application screenshots as icon or mini icon
3212       thumbnails.
3214    With a bit of scripting magic, fvwm can take a screenshot of an
3215    application window when it's iconified, resize it, and use it as
3216    the application's icon.  However, there are some applications that
3217    can do it on their own, which is the recommended method.
3219    With xterm, you can use the +ai (active icon) option on the command
3220    line:
3222      $ xterm +ai
3224    There is a live-icon elisp package for XEmacs.  Put this in your
3225    XEmacs configuration file:
3227      (load-library "live-icon")
3228      ; Control size, same as max icon size, uncomment if you want
3229      ; this feature.
3230      ;(setq live-icon-max-height 48)
3231      ;(setq live-icon-max-width 48)
3233    Make sure you are not using the style IconOverride for these
3234    applications.  It disables the use of active icons.  There may be
3235    other applications with similar features.
3238    Assuming you want application thumbnails as icons provided by fvwm,
3239    you need fvwm 2.5.8 or later, as this solution requires the
3240    WindowStyle command, and you should have the ImageMagick utilities
3241    available in your $PATH <URL:http://www.imagemagick.org/>.
3243    The function below provides a Replacement for the Iconify command
3244    called Thumbnail, which you can use in your bindings and raises
3245    each window, takes a screenshot and attempts to set the screenshot
3246    as the window's Icon.  Taking a screenshot may take a couple of
3247    seconds.  The window is iconified immediately, but the new
3248    thumbnail is activated when the screenshot is ready.
3250    Note that a screenshot can only be made reliably from the visible
3251    parts of a window.  So if the window is halfway off screen, on a
3252    different desk, or buried beneath other windows, the thumbnail may
3253    be smaller than expected or be empty in the hidden parts.  There is
3254    no way to prevent this.
3256    The same solution should work for mini icons.  Just replace the
3257    word "icon" with "miniicon" everywhere.
3259      DestroyFunc Thumbnail
3260      AddToFunc Thumbnail
3261      + I Raise
3262      + I ThisWindow (!Shaded, Iconifiable, !Iconic) PipeRead \
3263          "xwd -silent -id $[w.id] | convert -scale 64 -frame 1x1 \
3264          -mattecolor black -quality 0 xwd:- \
3265          png:$[FVWM_USERDIR]/icon.tmp.$[w.id].png \
3266          && echo WindowStyle IconOverride, \
3267          Icon $[FVWM_USERDIR]/icon.tmp.$[w.id].png \
3268          || echo Nop"
3269      + I Iconify
3271    You can use FvwmEvent to remove the Icons when each window is
3272    returned to its non Iconic state.
3274      DestroyFunc DeThumbnail
3275      AddToFunc DeThumbnail
3276      + I Exec rm -f $[FVWM_USERDIR]/icon.tmp.$[w.id].png
3277      + I DestroyWindowStyle
3279      *FvwmEvent: deiconify DeThumbnail
3281      AddToFunc StartFunction I Module FvwmEvent
3283    If you cannot use DestroyWindowStyle as you require it for some
3284    other purpose, you can save the window's current Icon, and restore
3285    it when required, this solution requires fvwm 2.5.9 or later.
3287    The Thumbnail function should look like this:
3289      DestroyFunc Thumbnail
3290      AddToFunc Thumbnail
3291      + I Raise
3292      + I SetEnv Icon-$[w.id] $[w.iconfile]
3293      + I ThisWindow (!Shaded, Iconifiable, !Iconic) PipeRead \
3294          "xwd -silent -id $[w.id] | convert -scale 64 -frame 1x1 \
3295          -mattecolor black -quality 0 xwd:- \
3296          png:$[FVWM_USERDIR]/icon.tmp.$[w.id].png \
3297          && echo WindowStyle IconOverride, \
3298          Icon $[FVWM_USERDIR]/icon.tmp.$[w.id].png \
3299          || echo Nop"
3300      + I Iconify
3302    And then the Icon is restored with this function:
3304      DestroyFunc DeThumbnail
3305      AddToFunc DeThumbnail
3306      + I PipeRead "echo WindowStyle Icon \\$\\[Icon-$[w.id]\\]"
3307      + I UnsetEnv Icon-$[w.id]
3308      + I Exec rm -f $[FVWM_USERDIR]/icon.tmp.$[w.id].png
3310    These Icons can also survive a Restart by adding this check to your
3311    StartFunction:
3313      AddToFunc StartFunction I Test (Restart) All (Iconic) \
3314        Test (f $[FVWM_USERDIR]/icon.tmp.$[w.id].png) WindowStyle \
3315        IconOverride, Icon $[FVWM_USERDIR]/icon.tmp.$[w.id].png
3317    You can also check for any remaining icons left behind and remove
3318    them in your ExitFunction:
3320      DestroyFunc ExitFunction
3321      AddToFunc ExitFunction I Test (!ToRestart) \
3322        Exec rm -f $[FVWM_USERDIR]/icon.tmp.*
3324    The same solution should work for mini icons.  Just replace the
3325    word "icon" with "miniicon" everywhere.
3327 ----------------------------------------------------------------------