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