fvwm-convert-2.6: Preserve comma-separated options in conditional commands.
[fvwm.git] / docs / FAQ
blob82ab6bb6240fcce64369826200b7cabb082196d3
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?
108 4. Modules
110      4.1  I'm using FvwmButtons (or GoodStuff in 1.xx), and
111           sometimes the buttons stay depressed, and other times
112           they don't.  Why is that?
113      4.2  When having FvwmButtons swallow an app, is it possible
114           to have button presses assigned to actions as well?  For
115           instance, I'd like to swallow xload and have a button
116           press pop up an xterm, or swallow xbiff and have a
117           button press bring up the list of messages.
118      4.3  I'm seeing odd things when trying to preprocess files
119           with the FvwmM4/Cpp module...
120      4.4  I heard about this FvwmFileMgr module.  Where can I find
121           it?
122      4.5  I used to use GoodStuff in fvwm 1.xx, but it's not in
123           the 2.xx distribution.  What do I use now?
124      4.6  I want to have the sub panels in FvwmButtons not at
125           their default position near the button but somewhere
126           else on the screen.  Is this possible?
127      4.7  How can I open a sub panel or push buttons in
128           FvwmButtons with a keyboard shortcut?
130 5. Development, Known Problems & Bug Reports
132      5.1  I'd really like to see neat feature XYZ in
133           fvwm. Wouldn't that be cool?  I even have a patch.  When
134           can it be added?
135      5.2  How do I create/submit/apply patches?
136      5.3  How do I submit a bug report?
137      5.4  I have a window that is behaving unexpectedly under
138           fvwm, but just fine under (whatever other window
139           manager), or I have just some random bug.  What do I do?
140      5.5  Why do NumLock, CapsLock and ScrollLock interfere with
141           ClickToFocus and/or my mouse bindings?
142      5.6  Menus with gradient backgrounds flicker or are very
143           slow.
144      5.7  Why won't the StartIconic style work with {Netscape,
145           etc.}?
146      5.8  How do I capture the output (e.g. errors) of fvwm?
147      5.9  I try to run some program under fvwm, but it dies with
148           an X11 error like BadAccess.  The same program works
149           just fine under MWM or OLWM.  What's going on?
150     5.10  Every time I update my install, my currently running
151           fvwm session dies.  Why is that?
152     5.11  After I restart fvwm certain windows or icons raise
153           above all other windows and cannot be lowered by any
154           means.  One example are the shortcuts of KFM (the KDE
155           file manager).  What can I do about that?
156     5.12  The StartsOnPage style does not work for me.  Why?
157     5.13  Some modules can not be started when I restart fvwm.
158     5.14  I'm running Rational Rose and fvwm ignores its windows.
159     5.15  Although I use the WindowListSkip style for my modules
160           they still show up in FvwmIconMan, FvwmWinList etc.
161     5.16  When I Maximize an application, sometimes I get gaps
162           around the edges, and other times I don't.  What's going
163           on?
165 6. Miscellaneous
167      6.1  What exactly is the difference between a DESK, a PAGE,
168           and the SCREEN?
169      6.2  I'd really like {NeXT, Win95, etc} look and feel.  Are
170           you going to support that?
171      6.3  Where can I get more XPMs for icons?
172      6.4  Linux XF86 virtual screen size & fvwm interaction...
173      6.5  I know this question doesn't have to do with fvwm, but
174           what happened to to rxvt and rclock which Rob Nation
175           used to support?  Where can I find them now?
176      6.6  How do I set the background with fvwm?
177      6.7  When I use Fvwm, my XYZ isn't the right color.  What's
178           wrong?
179      6.8  I just got a mouse with 57 buttons.  How do I make Fvwm
180           use them?
181      6.9  Why does fvwm change my X Cursor theme?
183 7. Hints and Examples from the Developers
185      7.1  An easy way to test new configurations.
186      7.2  Using shell commands for configuration.
187      7.3  How to start applications on a page or desk other than
188           the current.
189      7.4  How to start applications on a page or desk other than
190           the current without moving the viewport to the new page
191           or desk.
192      7.5  A more efficient MWM menu style.
193      7.6  Placing menus on the screen.
194      7.7  Are you flipping pages by accident when moving the mouse
195           close to the border of the screen?
196      7.8  Lining up your windows and icons.
197      7.9  Moving the mouse/focus/page with the keyboard.
198     7.10  The cat safe desktop :-)
199     7.11  Lowering and moving windows.
200     7.12  Toggling windows on and off.
201     7.13  Starting applications by clicking on an icon (also known
202           as "docking" applications).
203     7.14  Positioning a window using arithmetic.
204     7.15  Hiding the mouse pointer.
205     7.16  Finding the mouse pointer.
206     7.17  Autohiding FvwmButtons or other windows.
207     7.18  Using application screenshots as icon or mini icon
208           thumbnails.
210 ======================================================================
211                 0 - The most frequently asked question
212 ======================================================================
214 0.1  A few minutes after fvwm is started my keyboard and mouse
215      bindings stop working.  What can I do?
217 A: Probably your NumLock, CapsLock or ScrollLock key is pressed.  See
218    Q 5.5 for more details.
220 Trivia: In all my years as an fvwm developer this has been by far the
221    most frequently asked question.  Whoever can solve this problem so
222    that this question is never asked again will be mentioned in big
223    letters on the fvwm home page :-)
225 ----------------------------------------------------------------------
227 0.2  I use XMMS, but it ignores some window styles.
229 A: XMMS wants to do everything by itself and overrides many
230    settings of the window manager.  Check the options menu in XMMS
231    and if that does not help, ask the XMMS people about it at
233         http://xmms.org/
235    *Please* do not ask XMMS questions on the fvwm mailing lists
236    and do not report XMMS related bugs before you tried the XMMS
237    mailing lists.  No offense meant, but we really have more
238    important things to do than providing user support for third
239    party software.
241 ----------------------------------------------------------------------
243 0.3  I like transparency.  What can I do?
245 A: See questions 3.23, 3.24, 3.25, 3.26 that deal with transparency.
247    Also see configurations supplied in fvwm-themes package, some
248    themes use transparent menus, modules and/or decorations.  E.g.:
250         http://fvwm-themes.sf.net/screenshots/full/transparent.png
251         http://fvwm-themes.sf.net/screenshots/full/transparent.jpg
254 ======================================================================
255                             1 - About Fvwm
256 ======================================================================
258 1.1  What does fvwm stand for?
260 A: "Fill_in_the_blank_with_whatever_f_word_you_like_at_the_time
261    Virtual Window Manager".  Rob Nation (the original Author of fvwm)
262    doesn't really remember what the F stood for originally, so we
263    have several potential answers:
265      Feeble, Fabulous, Famous, Fast, Foobar, Fantastic, Flexible,
266      F!@#$%, Flashy, fvwm (the GNU recursive approach), Free, Final,
267      Funky, Fred's (who the heck is Fred?), Freakin', Flawed,
268      Father-of-all, Feivel (the mouse from "An American Tail"),
269      Frungy (hey, where does that come from?), Floppy, Foxy,
270      Frenzied, Funny, Fumbling etc.
272    Just pick your Favorite (hey, there's another one!), which will of
273    course change depending on your mood and whether or not you've run
274    across any bugs recently.  I prefer Fabulous or Fantastic myself,
275    although I often use F!@#$% or Freakin' while debugging...
277    Recently 'Feline' is becoming popular.  Perhaps this has something
278    to do with the discovery that four of the six core developers have
279    cats (averaging 1.17 cats)?  Miaow.
281    Know what? I found another one while stroking my cats: FEEDING :-)
283    Check this link:
284        http://fvwm.org/fvwm-cats/
286 ----------------------------------------------------------------------
288 1.2  Where do I find the current versions of fvwm?
290 A: New main distribution site (official + beta code):
292                 ftp://ftp.fvwm.org/pub/fvwm/
294    Alternate sites:
296             USA:
297                 ftp://sunsite.unc.edu/pub/Linux/X11/window-managers/
298                 ftp://ftp.cs.columbia.edu/pub/cheah/
300             Europe:
301                 ftp://unix.hensa.ac.uk/pub/walnut.creek/FreeBSD/incoming/
302                 ftp://ftp.jussieu.fr/pub/X11/fvwm/
303                 ftp://ftp.loria.fr/pub/unix/fvwm/
305    By the way, 1.24r was the last released version of the 1.xx series
306    and the first official release of 2.xx is 2.2.  As of 2.2, an odd
307    second digit denotes development releases and even numbers denote
308    stable releases.
310 ----------------------------------------------------------------------
312 1.3  Any WWW Sites about fvwm?
314 A: Yup.  The official site is:
316         http://www.fvwm.org/
318    There are links on the official site to other related fvwm sites.
320 ----------------------------------------------------------------------
322 1.4  Where do I ask questions about fvwm?
324 A: If your local fvwm maintainer can't help you, then try the fvwm 
325    mailing list.  The fvwm discussion mailing list address is:
327                            fvwm@fvwm.org
329    And there is an announce mailing list as well:
331                        fvwm-announce@fvwm.org
333    They are maintained by Jason Tibbitts, and are Majordomo based
334    mailing lists.  To subscribe to the list, send "subscribe fvwm" in
335    the body of a message to <list>-request@fvwm.org.  For example, to
336    subscribe to the fvwm mailing list, send a request to
337    fvwm-request@fvwm.org.
339    To unsubscribe from a list, send "unsubscribe fvwm" in the body
340    of a message to <list>-request@fvwm.org.  To report problems, send
341    mail to fvwm-owner@fvwm.org.
343    Here's the list descriptions and instructions directly from Jason:
345    ------------------------------------------------------------------
346    (fvwm)
348    Description
349    -----------
351    This list is for discussion relating to the fvwm window manager,
352    which is intended to have a small memory footprint and a rich
353    feature set, be extremely customizable and extendible and have a
354    high degree of Motif MWM compatibility.  All relevant discussion
355    is encouraged.  Posting of binaries or irrelevant discussion is
356    strongly frowned upon.  Posting of short patches (less than 200
357    lines) is acceptable, but all patches should also be sent to the
358    fvwm-workers list (see Q5.2, below) for inspection and possible
359    inclusion in the distribution.
362    Instructions
363    ------------
365    To send a message to the list, mail to fvwm@fvwm.org.  For help on
366    dealing with the mailing list software (for getting the archives or
367    other files which may be made available) send the message "help" to
368    fvwm-request@fvwm.org.  If you have problems with the mailing list
369    itself and need to talk to a human, send mail to
370    fvwm-owner@fvwm.org. This address is for mailing list issues only;
371    reports on the fvwm software will be sent to /dev/null.
373    Archives of previous messages are available; to get them send the
374    above mentioned help message and investigate the "index" and "get"
375    commands or ftp them from
376    ftp://ftp.fvwm.org/pub/fvwm/list-archive/.
379    (fvwm-announce)
381    This list is for announcements relating to the fvwm window manager,
382    which is intended to have a small memory footprint and a rich
383    feature set, be extremely customizable and extendible and have a
384    high degree of Motif MWM compatibility.
386    Replies to messages from this list are set by default to go the
387    fvwm discussion list, fvwm@fvwm.org.
389    The current fvwm distribution is available for ftp at
390    ftp://ftp.fvwm.org/pub/fvwm/
391    ------------------------------------------------------------------
393 ----------------------------------------------------------------------
395 1.5  What are the differences between fvwm 1.xx and 2.xx?
397 A: A lot.  To name a few general ones:
398         - Bug fixes.  1.xx is not worked on at all any more.
399         - Better rc file format.  No longer order dependent.
400         - More flexible and powerful.  For example, many previously
401           global options now operate on a per window group level
402           instead.
403         - More and better modules.
404         - M4 preprocessing is no longer part of the fvwm exec, but
405           rather has been moved to a module.  There is also a module
406           to use cpp too.  See the FvwmM4 and FvwmCpp man pages.
408    Be sure to check the NEWS file for new or changed features too.
410 ----------------------------------------------------------------------
412 1.6  What's the relative memory usage for the various window managers
413      out there?
415 A: Here's a little table comparing some of them.  It was done on an
416    AIX based IBM RS6000 model 355 using the same number of windows (3)
417    and XSession to switch between the window managers, and I used
418    'top' to show the values:
420       SIZE   RES
421       545K  652K fvwm2 (fvwm 2.0.35)
422       457K  528K fvwm  (fvwm 1.24rb)
423       856K  960K ctwm  (ctwm 3.2p1)
424      1004K 1156K mwm   (mwm 1.2)
425       543K  632K twm   (???)
426       263K  328K aixwm (a simple ugly window manager included w/ aix)
428    Note: This information is terribly outdated.
430 ----------------------------------------------------------------------
432 1.7  Why the rename of the various files (fvwm2, .fvwm2rc, fvwm2.man)?
434 A: Some people find this annoying, but it was done for several reasons:
436         - so both 1.xx and 2.xx can be installed for use, in case some
437           people at the same site would rather stay at 1.xx
438         - the syntax of the rc files is pretty different and
439           completely incompatible
440         - when people ask questions, if they explicitly mention their
441           .fvwm2rc file I know that they are running one of the 2.xx
442           versions, since they rarely mention exactly what version
443           they are running.
445    Note, starting from 2.5.1, the executable fvwm2 became fvwm again.
446    Also, starting from 2.5.11, the default config file is either
447    personal ~/.fvwm/config or system wide $datadir/fvwm/config.
448    So, we completely returned to the "fvwm" name.
450 ----------------------------------------------------------------------
452 1.8  When will fvwm release X.Y.Z be ready?
454 A: This is always a difficult question to answer.  We work on fvwm on
455    a volunteer basis.  Things get done when we have the time.
457    Joining the fvwm-workers mailing list might prove instructive.
460 ======================================================================
461                            2 - Installation
462 ======================================================================
464 2.1  I want to use fvwm, but I don't have root access on my machine.
465      Can I still install and run it?
467 A: Very easily, using the '--prefix' flag at configure time.
469    Suppose your home directory is /home/sam.  After unpacking the
470    fvwm sources, do "./configure --prefix=/home/sam [other options as
471    needed]'.  Now, after building ("make") and installing ("make
472    install"), you will find the binaries in /home/sam/bin, the
473    man pages in /home/sam/man, etc.  The modules will be in
474    /home/sam/libexec, and fvwm binary will have this module path
475    built in.
477 ----------------------------------------------------------------------
479 2.2  I'm trying to use fvwm under CDE/COSE, but encountering
480      difficulties.  Any suggestions?
482 A: Sure - here's one from Graeme McCaffery:
484    -----
485      Finally I have found out how to run fvwm properly from CDE 8-))
486      (thanks to Lars Sodergren).
488      First set your home session in Dtwm.  That usually is an empty
489      session, though you could have the CDE session manager remember
490      what your desktop was like instead of FvwmSaveDesk etc..
492      Then you have to set two resources in .Xdefaults:
494        Dtsession*wmStartupCommand: /home/orion/spxgm/bin/Fvwm
495        Dtsession*waitWmTimeout: 1
497      In this case I run fvwm from a shell script so that library
498      variables etc are set properly for everyone.  The waitWmTimeout
499      tells the session manager how long to wait until it starts the
500      window manager.  I've set it to 1 second.  By default it's 60
501      seconds.
503      Finally you have to quit with
505        /usr/dt/bin/dtaction ExitSession (or whatever your path is for dtaction)
507      Now you can happily use CDE programs and fvwm.
508    -----
510      On the other hand, here is a link to a web page that describes
511      how to add multiple window managers to the CDE login menu:
513         http://twirl.mcc.ac.uk/~zzassgl/wm.html
515 ----------------------------------------------------------------------
517 2.3  I'm trying to compile fvwm under SunOS using cc, but the compiler
518      is having lots of problems.  What gives?
520 A: cc under SunOS is not an ANSI C compiler.  Try using acc or gcc
521    instead.
523 ----------------------------------------------------------------------
525 2.4  I want colored icons, but they won't work.  Why not?
526      When I run configure, it reports "no" to "Have XPM support?"  How
527      can I get XPM support?
529 A: Fvwm uses the XPM (X PixMap) library to provide support for colored
530    and shaped icons.  XPM doesn't ship with the basic X distribution
531    as provided by The Open Group or XFree86.  However, many vendors
532    will bundle it as a standard component anyway.  If not, you can get
533    a copy of the source from ftp://ftp.x.org/contrib/libraries/ and
534    build it yourself.
536    If you have XPM on your system, there are a number of ways
537    configure could still decide not to use it.
539    First, if you've installed XPM in a non-standard place (not in the
540    normal system or X11 directories--say in /opt/xpm or /usr/local or
541    similar) then you need to tell configure where to look.  Use the
542    --with-xpm-library and --with-xpm-includes options (see
543    INSTALL.fvwm).  Typically configure will say "Xpm library or header
544    not found" if this is the problem.
546    Second, your version of XPM may be too old.  Fvwm requires XPM 3.4g
547    or better.  Typically configure will say "Xpm library version is
548    too old!" if this is the problem.  In that case, you'll need to
549    install a newer version.
551    Third, XPM may be mis-installed on your system.  If configure says
552    " Xpm library version and header file version don't match!" then
553    this may be the problem.  Either use the --with-xpm-library and
554    --with-xpm-includes options to specify more precisely what you
555    want, or try re-installing XPM.
557    Last, there could be a linker error.  This is especially common on
558    systems where XPM may be built as a shared library and installed in
559    a non-standard directory (Solaris is a good example).  There are
560    some notes about building using shared libraries in the
561    INSTALL.fvwm file.
563    If you can't figure it out, contact the fvwm mailing list.  Please
564    be sure to provide the type of hardware and operating system you're
565    using, how you invoked configure, and extract the lines dealing
566    with XPM from the config.log file and include that.
568 ----------------------------------------------------------------------
570 2.5  I'm a sysadmin, and if I wanted to force fvwm to read a system rc
571      file and then the user's rc file, how would I do that?
573 A: Well, you could probably do something like this.  Have the first
574    line of everyone's ~/.fvwm/config or ~/.fvwm/.fvwm2rc files be
575    'Read global.config' and have global.config reside in
576    "$datadir"/fvwm (the value of $datadir is set on ./configure step).
578 ----------------------------------------------------------------------
580 2.6  I'm a sysadmin, and if I wanted fvwm to look for all of its rc
581      files in a hidden directory, say ~/.fvwm, much like CDE does, how
582      could I do that?
584 A: Fvwm now supports ~/.fvwm search directory by default.
586    This could be probably done similarly to Q2.5 above.  The system rc
587    "$datadir"/fvwm/config (or system.fvwm2rc) could do something like:
589         Read Init      quiet
590         Read Decors    quiet
591         Read Styles    quiet
592         Read Functions quiet
593         Read Menus     quiet
594         Read Keys      quiet
595         Read Modules   quiet
597    or whatever breakdown you deemed appropriate, and you would have
598    default versions of these in "$datadir"/fvwm/ that it could find
599    in case the user was missing one of them and you wanted to supply
600    defaults.
602 ----------------------------------------------------------------------
604 2.7  How can I use fvwm with GNOME (version <= 1)?
606 A: Since the latest fvwm versions are mostly GNOME compliant, you may
607    simply run GNOME applications, like panel, gmc, gnome-terminal and
608    all others with fvwm.
610    The included fvwm-menu-desktop script (with a massive man page)
611    will help you build fvwm menus for gnome applications.
613    To ensure you run fvwm and not gnome-session, create .Xclients file
614    in your home directory and put a call to fvwm in it. The file
615    ~/.xinitrc can be used for the same purpose if you want to bypass
616    any system-wide logic installed by your distributor or sysadmin.
618    An alternative solution is to run fvwm inside of
619    /usr/bin/gnome-session. After you start gnome-session (don't start
620    fvwm yourself), go to the foot menu in the GNOME panel, then choose
623      System menus / Settings / Desktop / Window Manager
625    and create an entry for fvwm.  Fvwm supports session management.
627    If you run gnome-session, SessionInitFunction and
628    SessionRestartFunction are called instead of InitFunction and
629    RestartFunction, see the fvwm man page.
631    StartFunction, for running modules, is called as usual.
634    Here are examples of the GNOME Window Manager hints support in
635    fvwm:
637    o If you run gnome panel inside fvwm without GNOME support, you
638      can't fully use GNOME pager applets (if at all); with GNOME
639      support you can correctly see pages/desks and move windows
640      between them inside applets. You can also use the GNOME Tasklist
641      applet and manage your windows using it.
643    o If you run gmc and bind GnomeButton (see the man page), you can
644      pass root clicks to a gnome application (i.e. to gmc in this
645      case).
647 ----------------------------------------------------------------------
649 2.8 How can I use fvwm with GNOME version >= 2 or KDE version >= 2?
651 A: Most standard applications work as any other application with
652    fvwm. However, some features and special applications such as
653    panels, pagers, taskbars and desktops need a special
654    support. Interaction between the window manager, the desktop
655    environment and applications is standardized in the Extended Window
656    Manager Hints specification. fvwm supports this specification since
657    the 2.5.x series (GNOME, GTK, KDE and QT since their version
658    2). See the "Extended Window Manager Hints" section of the fvwm
659    manual page and the commands and styles which start with "EWMH" for
660    more details.
662    You can use fvwm as the GNOME window manager. For this, start GNOME
663    (gnome-session). The game is to replace the running window manager
664    (sawfish or metacity by default) by fvwm. You may try to type "fvwm
665    --replace&" in a terminal. If this does not work kill fvwm and open
666    the session properties dialog (run "gnome-session-properties&" in a
667    terminal) and change, in the second tab, the metacity (or sawfish)
668    Style value from "Restart" to "Normal" (do not forget to "Apply"
669    this change), so that gnome-session won't restart it when you kill
670    it. Then, run "killall metacity; sleep 1; fvwm &" in a
671    terminal. After you have succeeded starting fvwm you just have to
672    save your session (say via GNOME session logout). The next time you
673    start gnome-session, fvwm will be used (and you do not need to save
674    the session again at logout). Note that if you use gnome-smproxy,
675    and run an FvwmButtons which swallows some applications which use
676    the old session protocol these applications are restarted by
677    gnome-session and FvwmButtons at session restart which can cause
678    trouble.
680    You can also use fvwm as the KDE window manager.  KDE is started by
681    a shell script called "startkde". This script starts ksmserver
682    which starts the window manager (kwin by default). To start fvwm
683    you should add the option "-w fvwm" to the ksmserver command line
684    (close to the end of the script). You may copy startkde to
685    startkde_fvwm somewhere in your path, edit startkde_fvwm and
686    finally replace startkde by startkde_fvwm in your X startup script
687    (e.g., ~/.xinitrc, ~/.Xclients or ~/.xsession). Note that ksmserver
688    does not support the fvwm Restart command. You should use "Restart
689    fvwm" for restarting fvwm. But if you do that it is a bad idea to
690    save the session later.
692 ======================================================================
693           3 - Features, Configuration, Functions & Commands
694 ======================================================================
696 3.1  I use fvwm on a RedHat Linux system and can't figure out how to
697      change my fvwm configuration.  I've read the fvwm man page but
698      when I edit my .fvwm2rc nothing seems to happen.  What's going
699      on?
701 A: RedHat Linux installs the X server accompanied (by default) by a
702    configuration management system.  In earlier releases it was called
703    TheNextLevel and in more recent releases it's called
704    AnotherLevel. For further information about TheNextLevel, consult
705    RedHat's documentation in /usr/doc/TheNextLevel/.  For information
706    about AnotherLevel, do a 'man AnotherLevel'.
708 ----------------------------------------------------------------------
710 3.2  Is it possible to raise a window when I click into the window
711      itself, not just the border?
713 A: Any version later than 2.0.46 (i.e. 2.1.0 or later) has this
714    feature.  In the 2.2.x series, use:
716      GlobalOpts MouseFocusClickRaises
718 With the later 2.3.x betas and after use:
720      Style * MouseFocusClickRaises
722 ----------------------------------------------------------------------
724 3.3  How do I get Alt-Tab behavior like another GUI?
726 A: The built in command WindowList provides a very close approximation
727    to the Alt-Tab feature found in another GUI.  It doesn't look the
728    same but the following fvwm/config sample will provide a similar
729    interface:
731       Key Tab A M WindowList Root c c NoDeskSort
733    Starting with release 2.3.2, the above key binding is built-in.
735    Starting with release 2.3.15 you can hold the alt key down and keep
736    hitting tab.  A single alt-tab selects the previous window. The
737    remainder of this FAQ entry describes releases prior to 2.3.2.
739    Hitting Alt-Tab will pop up the WindowList menu.  Unlike another
740    GUI you should not keep the Alt key held down, the menu will stay
741    up until you hit Return/Enter/Space or Escape.  You can change
742    focus to a window on the menu by using the up and down arrow keys
743    to move the menu selection and then hitting Return or
744    Enter. Hitting Escape will close the menu without doing anything.
745    The WindowList menu has hot keys assigned for the first 26 windows
746    and you can use the hot key to go directly to the window.
748    The menu invoked with the above line will show all windows in most
749    recently focused order unless you have used the Focus command (see
750    Q3.4).  It shows each windows name and geometry with some extra
751    flags to indicate Sticky, OnTop and iconified windows.
753    A simpler style can be used with the following:
755       Key Tab A M WindowList Root c c CurrentDesk, NoGeometry
757    This will just list the windows on the current desk (titles only).
759    The other GUI has the feature of selecting the previous window if
760    Alt-TAB is hit and released quickly.  This behavior can be exactly
761    duplicated with 2.5.1 or later but not with earlier fvwm versions.
763      Key Tab A M WindowList Root c c \
764        CurrentDesk, NoGeometry, CurrentAtEnd, IconifiedAtEnd
766    Similar functionality can be assigned to hitting Alt-TAB twice in
767    quick succession (like a double click for keys):
769      DestroyFunc my_dbltab2
770      AddToFunc   my_dbltab2
771      + I WindowListFunc
773      DestroyFunc my_dbltab
774      AddToFunc   my_dbltab
775      + I Prev (CurrentDesk) my_dbltab2
777      Key Tab A M WindowList Root c c \
778        CurrentDesk, NoGeometry my_dbltab
780    There are a lot of options to the WindowList command to control
781    which windows are listed in which order and it may not be possible
782    to set conditions for the Prev command to reliably select the
783    second item when double keying.  The WindowList command has no
784    parallel for CurrentPage, Transient, Visible, Maximized, Raised,
785    and pattern matching.  The Prev conditions have no parallel for
786    OnTop, Alphabetic and desk sorting.  The WindowList menu respects
787    the WindowListSkip style attribute whereas Prev respects the
788    CirculateSkip and CirculateSkipIcon style attributes.
790 ----------------------------------------------------------------------
792 3.4  What's the difference between the Focus and FlipFocus commands?
794 A: Both of these commands change the keyboard focus to the target
795    window.  They differ only in the way they affect the internally
796    held list of windows.  This list is used by the Next, Prev and
797    WindowList commands.  The list is normally sorted in most recently
798    focused order with new windows being added to the end.  The
799    FlipFocus command plucks the target window from the list and
800    inserts it at the beginning, The Focus command rotates the list
801    around until the target window is at the beginning.  The behavior
802    of FlipFocus is also used when changing focus with the mouse and
803    the automatic focus changing when using ClickToFocus style.
805    If you never use the Focus command the list will remain in most
806    recently focused order.  If you do use the Focus command the list
807    will gradually get back to most recently focused order as you use
808    FlipFocus.
810    The Focus command is very useful in conjunction with the Next and
811    Prev commands.  e.g.
813       Key KP_Add A M Next (AcceptsFocus, CurrentDesk, !Iconic) Focus
814       Key KP_Subtract A M Prev (AcceptsFocus, CurrentDesk, !Iconic) Focus
816    Or for fvwm versions earlier than 2.4.1:
818       Key KP_Add A M Next [CurrentDesk !Iconic] Focus
819       Key KP_Subtract A M Prev [CurrentDesk !Iconic] Focus
821    These bindings allow you to circulate the focus around the windows
822    on the current desk in both directions.  If Prev FlipFocus were
823    used the focus would toggle between the top two windows on the
824    window list.
826    If you have several windows on a desk and you want to set the
827    circulation order for the Next and Prev commands you should focus
828    on the windows using the mouse or FlipFocus in the order you want.
829    Fvwm will learn the order and use it for the Next and Prev
830    commands.  If you subsequently use the mouse to focus or FlipFocus
831    the order will be lost.
833 ----------------------------------------------------------------------
835 3.5  You can bind mouse movements to keystrokes, how about mouse
836      presses?
838 A: Although fvwm has commands for binding movements to keystrokes,
839    controlling the pointer with the keyboard should really be handled
840    by the X server.  The following is an excerpt of the X FAQ on this
841    topic:
843      If you have the X Keyboard (XKB) Extension, you can enable mouse
844      keys, which makes it possible to generate mouse motion and button
845      events using the keyboard.  Events generated by MouseKeys are
846      completely transparent -- they will work with any application
847      that connects to a server that has the X Keyboard Extension,
848      regardless of whether the application itself uses XKB.
850      XKB is enabled by default in X11R6.1.
852      First, set up the Num Lock key so that Shift+Num_Lock
853      toggles mouse keys:
855        $ xmodmap -e "keysym Num_Lock = Num_Lock Pointer_EnableKeys"
857      (XFree86 3.1.2E is based on R6.1 and has the X Keyboard
858      Extension; it also has a binding to Pointer_EnableKeys in
859      its default keymap. You use Alt+Shift+Num_Lock to toggle
860      MouseKeys on and off.  If you are using an earlier release
861      of X or XFree86, you won't have XKB and the instructions
862      will not work.  See http://www.XFree86.org/FAQ for more
863      information.)
865      You might also have to turn off server num lock for this to
866      work.  Now press "Shift+Num_Lock" to enable MouseKeys.  When
867      MouseKeys are on:
869      o)   The keypad arrow keys move the pointer
870      o)   The keypad '5' key behaves like the 'default' pointer
871           button.
872      o)   The keypad '0' key locks the default pointer button
873           (for easy dragging).
874      o)   The keypad '.' key unlock the default pointer button
875           (to release a drag).
876      o)   The keypad '+' key double-clicks the default pointer
877           button.
878      o)   The keypad '/' key sets the 'default' button to Button1
879      o)   The keypad '*' key sets the default button to Button2
880      o)   The keypad '-' key sets the default button to Button3
882      This is the default configuration, but the mechanism allows
883      for nearly infinite configurability.
885      [thanks to Erik Fortune (erik@westworld.engr.sgi.com), 6/96]
887 ----------------------------------------------------------------------
889 3.6  I'd like to bind a key to paste/use the current selection, how can
890      I do that?
892 A: You can't directly with fvwm, but there may be a solution that is
893    more generally applicable - use the program 'xcb' available at
894    ftp://ftp.x.org/contrib/utilities/ or from your favorite mirror.
895    It could probably be used to get the desired effect or close to
896    it. This is most useful for running programs and passing the
897    selection to them (e.g. - invoke your favorite browser with the
898    current selection as the URL).  To get a semi-generic paste
899    facility to work, you'll probably need to use 'xse' (see Q3.5).  If
900    anyone comes up with a good example of this, please send it to the
901    fvwm mailing list for inclusion here.
903 ----------------------------------------------------------------------
905 3.7  Will fvwm ever support a separate colormap for each desktop?
907 A: Doubtful, although I'd like to see it too.  I believe that it'd be
908    possible to change the default colormap whenever you switch desks,
909    which would give programs started when that desk is active that
910    colormap, how would you deal with windows being moved across desks?
912    Plus fvwm itself needs certain colormap entries for all of its
913    drawing (borders, menus, etc), so these colors would have to be
914    pre-allocated in all of the colormaps, or something like that.
916    While this all *might* be technically possible, I don't feel that
917    it's really feasible right now (too much code bloat and
918    complexity), especially since most color hog programs
919    (i.e. Netscape) allow you to have them install private colormaps.
921    I may explore this a little at some point in the future though.
923 ----------------------------------------------------------------------
925 3.8  I really like the horizontal bars that appear on the title bars
926      of sticky windows.  Can I get those on other windows as well?
928 A: Yes.  For release 2.3.14 and after, put the line
930      Style * StippledTitle
932    in your fvwm/config (or .fvwm2rc).  For earlier releases use
934      GlobalOpts StipledTitles
936    (Yes, the spelling was inconsistent.)
938 ----------------------------------------------------------------------
940 3.9  How do I set the Sun keyboard key xxxx to an fvwm command?  Or
941      more generally, I'm having problems defining key bindings for
942      fvwm - what can I do?
944 A: From Jon Mountjoy, one of fvwm's users:
945      - Function keys on Sun Keyboard on Top Row are F1 - F8
946      - Keys on the function keypad on the Left of the Sun Keyboard
947        are F11 == Stop, F12 == Again, ..., F20 == Cut
949      His Example:
951      # Function keys on Sun Keyboard on Top Row
952      Key F1     A     N       Exec me(netscape) &
953      Key F2     A     N       Exec me(netscape -install) &
954      Key F5     A     N       Exec makex(Adder)
955      Key F6     A     N       Exec makex(Lambda)
956      Key F7     A     N       Exec makex(Castor)
957      Key F8     A     N       Exec xterm -T Local &
959      # Keys on the function keypad on the Left of the Sun Keyboard:
960      # F11 = Stop, F12 = Again, ..., F20 = Cut
961      Key F11    AWF   N       Next (!iconic, CurrentPage) Focus
962      Key F12    AWF   N       Prev (!iconic, CurrentPage) Focus
963      Key F13    WF    N       Maximize     100 100
964      Key F15    WF    N       RaiseLower ""
965      Key F17    WIF   N       Iconify ""
966      Key F18    WF    N       Stick ""
967      Key F20    WIF   N       Delete ""
968      Key Help   AWF   N       Iconify ""
970    A more general solution is to use xev (usually distributed w/ X11)
971    or xkeycaps (an X11 interface to xmodmap written by Jamie Zawinski,
972    available from ftp.x.org) to find out what the keysym for whatever
973    key you want REALLY is, and use that for binding fvwm commands.
975 ----------------------------------------------------------------------
977 3.10  My .fvwmrc from version 1.xx no longer works.  What do I do?
979 A: Start with a new one or convert your old one.  This can be done by
980    hand or with a little help from the 'fvwm-convert-2.2' in the
981    utils directory.
983    And here is a list of rc file command changes compiled by Makoto
984    'MAR_kun' MATSUSHITA <matusita@ics.es.osaka-u.ac.jp>.  It may or
985    may not be 100% accurate or complete, especially as changes evolve,
986    but it's a good start.
988    Note that there have been some changes in 2.1.x and up that are not
989    reflected in the conversion script yet.
991    ** Fvwm-1.xx commands **                   ** Fvwm-2.0.x equivalent **
993    AppsBackingStore                           (obsoleted)
994    AutoRaise delay                            (obsoleted, use FvwmAuto)
995    BackingStore                               (obsoleted)
996    BoundaryWidth Width                        Style (BorderWidth width)
997    ButtonStyle button# WidthxHeight           <-
998    CenterOnCirculate                          (obsoleted)
999    CirculateSkip windowname                   Style (CirculateSkip)
1000    CirculateSkipIcons                         Style (CirculateSkipIcon)
1001    ClickTime delay                            <-
1002    ClickToFocus                               Style (ClickToFocus)
1003    Cursor  cursor_num cursor_type             CursorStyle context cursornum
1004    DecorateTransients                         Style (DecorateTransient)
1005    DeskTopScale Scale                         (obsoleted, use FvwmPager)
1006    DeskTopSize HorizontalxVertical            <-
1007    DontMoveOff                                (obsoleted)
1008    EdgeResistance scrolling moving            <-
1009    EdgeScroll horizontal vertical             <-
1010    Font fontname                              MenuStyle (arg4)
1011    Function FunctionName                      AddToFunc (not compatible)
1012    HiBackColor colorname                      Style (HilightFore color)
1013    HiForeColor colorname                      Style (HilightFore color)
1014    Icon windowname bitmap-file                Style (Icon iconname-file)
1015    IconBox left top right bottom              Style (IconBox l t r b)
1016    IconFont fontname                          Style (IconFont fontname)
1017    IconPath path                              ImagePath path
1018    Key keyname Context Modifiers Function     <-
1019    Lenience                                   Style (Lenience)
1020    MenuBackColor colorname                    MenuStyle (arg2)
1021    MenuForeColor colorname                    MenuStyle (arg1)
1022    MenuStippleColor colorname                 MenuStyle (arg3)
1023    Module ModuleName                          <-
1024    ModulePath path                            <-
1025    Mouse Button Context Modifiers Function    <-
1026    MWMBorders                                 Style (MWMBorder)
1027    MWMButtons                                 Style (MWMButtons)
1028    MWMDecorHints                              Style (MWMDecor)
1029    MWMFunctionHints                           Style (MWMFunctions)
1030    MWMHintOverride                            Style (HintOverride)
1031    MWMMenus                                   MenuStyle (arg5)
1032    NoBorder windowname                        Style (NoBorder)
1033    NoBoundaryWidth Width                      Style (HandleWidth width)
1034    NoPPosition                                Style (NoPPosition)
1035    NoTitle windowname                         Style (NoTitle)
1036    OpaqueMove percentage                      OpaqueMoveSize percentage
1037    OpaqueResize                               (obsoleted)
1038    Pager  X_Location Y_Location               (obsoleted, use FvwmPager)
1039    PagerForeColor colorname                   (obsoleted, use FvwmPager)
1040    PagerBackColor colorname                   (obsoleted, use FvwmPager)
1041    PagerFont fontname                         (obsoleted, use FvwmPager)
1042    PagingDefault pagingdefaultvalue           (obsoleted)
1043    PixmapPath                                 ImagePath path
1044    Popup PopupName                            AddToMenu (not compatible)
1045    RandomPlacement                            Style (RandomPlacement)
1046    SaveUnders                                 (obsoleted)
1047    SloppyFocus                                Style (SloppyFocus)
1048    SmartPlacement                             Style (SmartPlacement)
1049    StartsOnDesk windowname desk-number        Style (StartsOnDesk desk-number)
1050    StaysOnTop windowname                      Style (StaysOnTop)
1051    StdBackColor colorname                     Style (BackColor color)
1052    StdForeColor colorname                     Style (ForeColor color)
1053    StickyBackColor colorname                  (obsoleted)
1054    StickyForeColor colorname                  (obsoleted)
1055    Sticky windowname                          Style (Sticky)
1056    StickyIcons                                Style (StickyIcon)
1057    StubbornIcons                              (obsoleted)
1058    StubbornIconPlacement                      (obsoleted)
1059    StubbornPlacement                          (obsoleted)
1060    Style windowname options                   <-
1061    SuppressIcons                              Style (NoIcon)
1062    WindowFont fontname                        Style (Font fontname)
1063    WindowListSkip windowname                  Style (WindowListSkip)
1064    XORvalue number                            <-
1066    ** fvwm-1 built-in functions ***
1068    Beep                                       <-
1069    CirculateDown [ name window_name ]         Next (not compatible)
1070    CirculateUp [ name window_name ]           Prev (not compatible)
1071    Close                                      <-
1072    CursorMove horizontal vertical             <-
1073    Delete                                     <-
1074    Desk arg1 arg2                             <-
1075    Destroy                                    <-
1076    Exec name command                          <-
1077    Focus                                      <-
1078    Function                                   <-
1079    GotoPage  x y                              <-
1080    Iconify [ value ]                          <-
1081    Lower                                      <-
1082    Maximize [  horizontal vertical ]          <-
1083    Module name ModuleName                     Module ModuleName
1084    Move [ x y ]                               <-
1085    Nop                                        <-
1086    Popup                                      <-
1087    Quit                                       <-
1088    Raise                                      <-
1089    RaiseLower                                 <-
1090    Refresh                                    <-
1091    Resize [ x y ]                             <-
1092    Restart  name WindowManagerName            <-
1093    Stick                                      <-
1094    Scroll horizonal vertical                  <-
1095    Title                                      <-
1096    TogglePage                                 (obsoleted)
1097    Wait name                                  <-
1098    Warp [ name window_name ]                  Next or Prev (not compatible)
1099    WindowsDesk new_desk                       (obsoleted, use MoveToDesk)
1100    WindowList arg1 arg2                       <-
1102    *** New in fvwm-2 **
1104    All
1105    AnimatedMove
1106    BugOpts
1107    BusyCursor
1108    DefaultColors
1109    DefaultColorset
1110    DefaultFont
1111    DefaultIcon
1112    DefaultLayers
1113    Destroy
1114    DestroyMenu
1115    EdgeThickness
1116    Emulate
1117    EscapeFunc
1118    ExecUseShell
1119    HideGeometryWindow
1120    KillModule
1121    Layer
1122    Menu menu-name double-click-action
1123    MoveToDesk
1124    MoveToPage
1125    Next (conditions) command
1126    None (arguments) command
1127    Pick
1128    PointerKey
1129    Prev (conditions) command
1130    QuitSession
1131    Read filename
1132    Recapture
1133    RecaptureWindow
1134    SaveQuitSession
1135    SaveSession
1136    Silent
1137    SnapAttraction
1138    SnapGrid
1139    StrokeFunc
1140    XORPixmap
1141    +
1142    (more functions are being added from time to time, so please check
1143     the man page and the NEWS file too).
1145 ----------------------------------------------------------------------
1147 3.11  What happened to the fvwm 1.xx 'include' command?
1149 A: It was actually part of the M4 preprocessing.  You can use the
1150    'Read' builtin to get the same effect, or use the FvwmM4 module.
1152 ----------------------------------------------------------------------
1154 3.12  How do I get window titles on sub windows of ... (e.g.
1155       Netscape)?
1157 A: These windows are known as 'transient' windows because of their
1158    short lived nature.  To get the window decorations for transient
1159    windows you can use the Style command:
1161      Style * DecorateTransient
1163    or to switch it off:
1165      Style * NakedTransient
1167 ----------------------------------------------------------------------
1169 3.13  I just upgraded to version >= 2.3.2, and my configuration
1170       settings disappeared!  How do I get them back?
1172 A: The directory for system-wide configuration files changed from
1173    ${sysconfdir} (/usr/local/etc, unless set otherwise at configure
1174    time) to a subdirectory, ${sysconfdir}/fvwm.  Move your config
1175    files by hand and restart fvwm.
1177    This change was made because fvwm now installs several files into
1178    this directory.
1180 ----------------------------------------------------------------------
1182 3.14  Some applications (e.g. Eterm) don't use the icon I defined for
1183       them. Why?
1185 A: Eterm provides its own icon and fvwm does not know if it is a plain
1186    icon or if Eterm wants to draw into it (like xbiff does when you
1187    get new mail).  You can explicitly override the application
1188    provided icon with a style command:
1190      Style <application-name> IconOverride
1192 ----------------------------------------------------------------------
1194 3.15  I don't like the gaps in my icon box when I de-iconify an
1195       application.  Is there some kind of auto arrange function?
1197 A: Assuming you are using the IconBox option of the Style command
1198    this can be done with a tricky fvwm function.  Put the
1199    DeiconifyAndRearrange function below in your configuration file:
1201      DestroyFunc DeiconifyAndRearrange
1202      AddToFunc DeiconifyAndRearrange
1203       + C Iconify off
1204       + C All (CurrentPage, Iconic) PlaceAgain Icon
1206    This works with fvwm-2.5.3 and later.  Older fvwm releases can
1207    achieve the same effect with:
1209      DestroyFunc DeiconifyAndRearrange
1210      AddToFunc DeiconifyAndRearrange
1211       + C Iconify off
1212       + C All (CurrentPage, Iconic) RecaptureWindow
1214    However, as the Recapture and RecaptureWindow commands may be
1215    removed in the future, please use PlaceAgain instead of
1216    Recapture if possible.
1218    Also, replace all places where you call the Iconify builtin
1219    function to de-iconify an icon with a call to the new function.
1220    For example, replace
1222      DestroyFunc IconFunc
1223      AddToFunc IconFunc
1224       + C Iconify off
1225       + M Raise
1226       + M Move
1227       + D Iconify off
1229    with:
1230      
1231      DestroyFunc IconFunc
1232      AddToFunc IconFunc
1233       + C DeiconifyAndRearrange
1234       + M Raise
1235       + M Move
1236       + D DeiconifyAndRearrange
1238    and:
1240      Mouse 1 I A Iconify off
1242    with:
1244      Mouse 1 I A DeiconifyAndRearrange
1246 ----------------------------------------------------------------------
1248 3.16  How do I set up an fvwm menu item that shuts down my Linux
1249       machine?
1251 A: Write a little shell script to run the shutdown command.
1253    Install sudo on your system (see the man page, etc.)
1255    Set up the sudoers config file to allow you, your wife, etc. to run
1256    that script with root permissions.
1258    Add a menu item to your fvwm root menu (or wherever) that invokes
1259    "sudo /my/script/name".
1261 ----------------------------------------------------------------------
1263 3.17  Although the Recapture command is obsolete, do I still need it
1264         to apply certain style changes?
1266 A: Excerpt from the man page:
1268    There are many commands that affect look and feel of specific,
1269    some or all windows, like Style, Mouse, the FvwmTheme module (for
1270    fvwm 2.4.x), Colorsets and many others.  For performance reasons
1271    such changes are not applied immediately but only when fvwm is idle,
1272    i.e. no user interaction or module input is pending.  Specifically,
1273    new Style options that are set in a function are not applied until
1274    after the function has completed.  This can sometimes lead to
1275    unwanted effects.  To force that all pending changes are applied
1276    immediately, use the UpdateStyles, Refresh or RefreshWindow commands.
1278 ----------------------------------------------------------------------
1280 3.18  When my specific window (or all windows) pops up, I want it to
1281       get focus/be moved/be resized/be closed/be shaded...  How?
1283 A: The following discusses a general solution, you should substitute
1284    the application names used in the examples as well as fvwm commands
1285    (Move, Iconify, Close) with the ones you need.  To get resource
1286    names of an application you want to catch, use FvwmIdent module.
1288    The first possible approach to achieve what you want is to have a
1289    separate function to start your application, like:
1291      DestroyFunc StartKedit
1292      AddToFunc   StartKedit
1293      + I Exec exec kedit
1294      + I Wait kedit
1295      + I Next (kedit) Resize 100p 200p
1297    This approach has 3 problems:
1298      1) You need to use StartKedit function to start your application,
1299         this will not work if you start it from the command line.
1300      2) If for some reason the application is not started, fvwm waits
1301         for it in Wait, you will need to press Ctrl-Alt-Esc.
1302      3) If you have more than one kedit window, it is not guaranteed
1303         that the right one is resized.
1305    But this approach has one plus - it also enables any fvwm commands
1306    that you may want to issue before executing your command.  For
1307    example, to start kedit window iconic, but not affect its
1308    subwindows, you can use:
1310      DestroyFunc StartAppIconic
1311      AddToFunc   StartAppIconic
1312      + I Style $0 StartIconic
1313      + I Exec exec $0 $1
1314      + I Wait $0
1315      + I Style $0 StartNormal
1316      + I UpdateStyles
1318      StartAppIconic kedit /tmp/my.txt
1321    The second approach is to use FvwmEvent, this solves the first two
1322    problems (in fvwm 2.2) or all three problems (in fvwm 2.3 and
1323    later).
1325    The sample to use with fvwm 2.2.3+ versions (this resizes the newly
1326    created window "My Window", supposing you have only one such
1327    window):
1329      DestroyModuleConfig FvwmEvent*
1330      *FvwmEvent add_window SetGeometryForMyWindow
1332      DestroyFunc SetGeometryForMyWindow
1333      AddToFunc   SetGeometryForMyWindow
1334      + I Next ("My Window") Move +10p +10p
1335      + I Next ("My Window") Resize 100p 200p
1337      AddToFunc StartFunction I Module FvwmEvent
1339    The sample to use with fvwm 2.3.21 to 2.4.15 versions (consider to
1340    upgrade and use the version below).  This moves a newly created
1341    window named "My Window", and warps a pointer to all new windows
1342    regardless of their name:
1344      *FvwmEvent-NewWindow: Cmd
1345      *FvwmEvent-NewWindow: PassId
1346      *FvwmEvent-NewWindow: StartDelay 4
1347      *FvwmEvent-NewWindow: add_window FuncFocusWindow
1349      DestroyFunc FuncFocusWindow
1350      AddToFunc   FuncFocusWindow
1351      + I WindowId $0 ("My Window") Move 200p 100p
1352      + I WindowId $0 Focus
1353      + I WindowId $0 WarpToWindow
1355      AddToFunc StartFunction I FvwmEvent FvwmEvent-NewWindow
1357    And finally the suggested configuration for 2.5.7+ and
1358    2.4.16+. This moves a newly created window named "My Window", and
1359    wraps a pointer to all new windows regardless of their name:
1361      *FvwmEvent-NewWindow: StartDelay 4
1362      *FvwmEvent-NewWindow: add_window FuncFocusWindow
1364      DestroyFunc FuncFocusWindow
1365      AddToFunc   FuncFocusWindow
1366      + I ThisWindow ("My Window") Move 200p 100p
1367      + I Focus
1368      + I WarpToWindow
1370      AddToFunc StartFunction I FvwmEvent FvwmEvent-NewWindow
1372 ----------------------------------------------------------------------
1374 3.19  When my specific window (or all windows) is closed, I want to
1375       switch desks/wrap to my app X/popup a menu/start app X...  How?
1377 A: Please read the answer to the previous question to understand
1378    better.
1380    Again, there are two approaches.  The first is good in one kind of
1381    situations, bad in others:
1383      DestroyFunc StartKedit
1384      AddToFunc   StartKedit
1385      + I Exec kedit; xmessage -name DummyWindow -g +10000+10000 "dummy"
1386      + I Wait DummyWindow
1387      + I Exec xmessage -timeout 10 "Sorry, you can't close kedit"
1388      + I StartKedit
1390    The second approach is to use FvwmEvent:
1392      *FvwmEvent-OldWindow: Cmd
1393      *FvwmEvent-OldWindow: PassId
1394      *FvwmEvent-OldWindow: destroy_window FuncPopupMyMenu
1396      DestroyFunc FuncPopupMyMenu
1397      AddToFunc   FuncPopupMyMenu
1398      # go to the desk 0 when any window is closed
1399      + I GotoDesk 0
1400      # popup my menu when "panel" is closed
1401      + I WindowId $0 ("panel") Popup MenuFvwmRoot
1403      AddToFunc StartFunction I FvwmEvent FvwmEvent-OldWindow
1405 ----------------------------------------------------------------------
1407 3.20  I have a multi head setup (multiple screens used under X).  How
1408       can I tell fvwm to use different configurations for the screens?
1410 A: Fvwm spawns itself into all found screens unless -s command line
1411    parameter is specified, as explained in the man page.  All spawned
1412    fvwm processes by default use the same configuration on each
1413    screen. There are several ways to change the default behavior.
1415    Write your configuration file as you would if you had only one
1416    screen.  Then move the screen specific lines into separate
1417    configuration files and call them, for example, config.<screen>
1418    where <screen> is the screen number.  Usually this will be 0 for
1419    the main screen and 1 for the secondary screen.  Place the screen
1420    specific files in the $HOME/.fvwm directory or whatever you set
1421    $FVWM_USERDIR to.  Now add this line to your config file:
1423      Read config.$[screen]
1425    The $[screen] will be replaced with the number of the screen each
1426    instance of fvwm is started on.
1429    Another method, which should work for older fvwm versions as well,
1430    is to specify a separate file for each screen explicitly.  For
1431    this, start a separate fvwm for each screen in your .xinitrc (or
1432    .Xclients):
1434      fvwm -s -d :0.0 -f config-0 &
1435      fvwm -s -d :0.1 -f config-1 &
1436      fvwm -s -d :0.2 -f config-2
1438    Note that only the last command is without a trailing ampersand.
1439    If you wish, config-* files may all include "Read config-common".
1441 ----------------------------------------------------------------------
1443 3.21  How do I maximize a window but not cover up FvwmTaskBar?
1445 A: Instead of Maximize use "Maximize 100 -30p" where 30 is the width
1446    of your FvwmTaskBar.
1448    Or use EwmhBaseStruts in Fvwm 2.5.x or later.
1450 ----------------------------------------------------------------------
1452 3.22  Why my close button looks pressed in maximized windows?
1453       Why don't buttons show on the titlebar of some windows?
1455 A: Fvwm has some builtin idea of what the buttons do, and some
1456    applications can request that certain buttons not be shown.
1457    For example, it's normal for Fvwm to suppress the iconify button
1458    (builtin button 4, the second button from the right) on a
1459    transient (dialog) window.
1461    The command:
1463      Style * DecorateTransient
1465    tells fvwm you want titles and buttons on transient windows.
1467      Style * MwmFunctions
1469    tells fvwm to accept application hints to hide certain buttons.
1471      ButtonStyle 2 - Clear MWMDecorMin
1473    says button 2 performs the minimize (iconify) function.
1475      Mouse 0 2 A Iconify
1477    makes any mouse button on button 2 iconify the window.
1478    Buttons won't show until some action is assigned to them using
1479    Mouse or Key commands.
1481    Things to look for in the man page are:
1483      DecorateTransient, MwmDecorXXX, MwmFunctions
1485    So, if you use Windows-like buttons, then redefine button hints:
1487      ButtonStyle 1 - Clear MWMDecorMenu
1488      ButtonStyle 2 - Clear
1489      ButtonStyle 4 - Clear MWMDecorMax
1490      ButtonStyle 6 - Clear MWMDecorMin
1492    Finally, this command makes button relief to follow the state:
1494      Style * MWMButtons
1496 ----------------------------------------------------------------------
1498 3.23  How to define transparent menus?
1500 A: First, it may help to read about colorsets in fvwm and FvwmTheme
1501    man pages.
1503    We speak about transparency, not translucency here.  This means
1504    the background of the parent window (for example the root window)
1505    will be used for our "transparent" areas, this is not always the
1506    window under our "transparent" window.  However, it is possible
1507    to get a real transparency (i.e. translucency) by applying one
1508    patch and using new Colorset Translucent option the patch adds.
1509    We do not discuss this here, however you may get this patch with
1510    README.patch included from:
1512      http://fvwm-themes.sf.net/patch/
1515    To define a transparent colorset, use something like:
1517      Colorset 23 Transparent, fg rgb:ff/ff/c4, bg darkgray
1519    (you may use any other number greater than 0 instead of 23)
1521    There is another way to define transparent colorset, by using
1522    RootTransparent instead of Transparent, but please remember,
1523    you should use a good utility to set the root background image,
1524    like "fvwm-root -r" or "Esetroot" or "wmsetbg", otherwise
1525    RootTransparent will not work:
1527      Colorset 23 RootTransparent, fg rgb:ff/ff/c4, bg darkcyan
1529    The good thing about RootTransparent is that it is possible to
1530    automatically calculate the average background color (used for
1531    highlighting/shading) and efficiently tint the visible part of the
1532    root image using something like:
1534      Colorset 23 RootTransparent, fg rgb:ff/ff/c4, bg average, \
1535        Tint black 20, bgTint black 20
1537    If you have enough memory, you may use "RootTransparent buffer"
1538    to speed up transparent menus, modules or decorations.
1540    If you are not sure whether you use "fvwm-root -r" or similar
1541    utility to set the root background, do not use RootTransparent
1542    option, use Transparent option without tinting, and set the bg
1543    color explicitly.
1545    Once a transparent colorset is defined, use it in menus:
1547      MenuStyle * MenuColorset 23
1549    See the man pages for a more complete explanation of colorsets.
1551 ----------------------------------------------------------------------
1553 3.24  How to define transparent modules?
1555 A: See question 3.23 to learn how to define a transparent colorset
1556    (you may reuse the same transparent colorset or define separate
1557    colorsets for different modules).
1559    Then read the man page for your specific module that you want to
1560    make transparent and specify this transparent colorset(s), like:
1562      *FvwmPager: Colorset * 23
1563      *FvwmButtons: Colorset 23
1564      *FvwmIconMan: Colorset 23
1566      Style FvwmPager ParentalRelativity
1567      Style FvwmButtons ParentalRelativity
1568      Style FvwmIconMan ParentalRelativity
1570    A side note: the ParentalRelativity option is not always needed.
1571    It is not needed if you use RootTransparent or you never intend to
1572    move a module inside its parent, or you swallow a module, since
1573    FvwmButtons adds ParentalRelativity automatically for swallowed
1574    fvwm modules.  Otherwise you need Style ParentalRelativity for
1575    transparent windows, but doing this for all windows is overhead.
1577    Note, that previously "Pixmap none" option was used to define
1578    transparency; Pixmap option is obsolete, use colorsets instead.
1580    If you swallow FvwmPager (or FvwmIconMan) into FvwmButtons, then
1581    you may configure both FvwmPager and FvwmButtons to be transparent
1582    or just one of them to be transparent, depending on what you want
1583    to achieve.
1585 ----------------------------------------------------------------------
1587 3.25  How to define transparent decorations?
1589 A: See question 3.23 to learn how to define a transparent colorset.
1590    Only RootTransparent method works for transparent decorations!
1591    This basically means that you should use external utilities like
1592    "wmsetbg" or "Esetroot" to set background in JPG/GIF/TIFF format
1593    and our utility "fvwm-root -r" for XPM/PNG images.
1595    To get transparent decorations, use a configuration like this:
1597      AddToFunc StartFunction
1598      + I Exec fvwm-root -r $HOME/wallpapers/sea.png
1600      Colorset 41 RootTransparent buffer, fg white, bg average, \
1601        Tint cyan 15, bgTint cyan 15  # tint is optional
1602      Colorset 42 RootTransparent buffer, fg white, bg average, \
1603        Tint red  15, bgTint red  15  # tint is optional
1605      Style * Colorset 41, HilightColorset 42  # to use fg and bg
1606      BorderStyle Inactive Colorset 42 -- flat
1607      BorderStyle Active   Colorset 41 -- flat
1608      TitleStyle AllInactive Colorset 42 -- flat
1609      TitleStyle AllActive   Colorset 41 -- flat
1610      ButtonStyle All -- UseTitleStyle flat
1612    It is possible to define partially transparent decorations too.
1613    You may achieve this by adding "AddTitleStyle Colorset NN PP",
1614    or even "TitleStyle Colorset NN PP".  Please read the man page.
1615    Also search in fvwm-themes to see whether some theme provides
1616    the window decoration look similar to what you want to achieve.
1618 ----------------------------------------------------------------------
1620 3.26  How about transparent applications too?
1622 A: This is not really an fvwm related question, you should find X
1623    applications supporting transparency and read their documentation.
1625    Depending on the application you should set the root image in one
1626    or another way.  Usually utilities like fvwm-root (with possible
1627    "-r" parameter), Esetroot or wmsetbg should be used.
1629    There is a wide range of terminal emulators that may be configured
1630    to be transparent, like Eterm, aterm, gnome-terminal and others.
1631    Here is an example command line:
1633      aterm -ls -sh 70 -bg black -fg white -tr +sb -fn 7x14 -fb 7x14bold
1635    Some applications have transparent theme, e.g. gkrellm and xmms.
1637    Some applications may show text on the root image, e.g. root-tail.
1639    There are a lot of other applications supporting transparency not
1640    listed here, search in FreshMeat, http://freshmeat.net/.
1642 ----------------------------------------------------------------------
1644 3.27  How can I define emacs type multi-keystroke fvwm bindings?
1646 A: In emacs, keys can be set up as prefix keys, so that once
1647    you type the prefix key, a subsequent key has a special meaning.
1648    For example, Control-a would normally go to the beginning of a line
1649    but Control-c Control-a might do something completely different.
1650    There are at least 2 ways to do the same thing with fvwm.
1652    The simplest technique is to use the prefix key to invoke a menu
1653    and then use the menu hot keys as the second key in the binding.
1654    Since menu hot keys don't include modifiers, you can only use plain
1655    keys for the second key in the sequence.
1657    This second technique lets you use any key for the second key but
1658    only works with 2.5.x or later.
1659    This approach invokes a function on the first key that defines the
1660    action of the second key for a short time and then removes it:
1662    DestroyFunc Ctrl-Alt-F-Action
1663    AddToFunc   Ctrl-Alt-F-Action
1664    + I Key X A A Exec xterm
1665    + I Key C A A Exec xcalc
1666    # optionally popup a prompt window here
1667    + I Schedule 5000 Key X A A -
1668    + I Schedule 5000 Key C A A -
1670    # Press Ctrl-Alt-F and then "x" or "c"
1671    Key F A CM Ctrl-Alt-F-Action
1673    With this, you press the second key in 5 seconds otherwise the
1674    binding for the second key is removed.
1677    With fvwm-2.5.24 or later (using SendToModule) a much better
1678    solution is:
1680       SendToModule buttons-alias PressButton A 1
1681    
1682    This would send the FvwmButtons instance "button-alias" a command
1683    to invoke the action that button "A" has as though the button were
1684    clicked with mouse button 1.  For instance:
1686       *button-alias: (Id A, Title "My Button", Action (Mouse 1) \
1687          `Exec exec xcalc`)
1689    
1690 ======================================================================
1691                              4 - Modules
1692 ======================================================================
1694 4.1  I'm using FvwmButtons (or GoodStuff in 1.xx), and sometimes the
1695      buttons stay depressed, and other times they don't.  Why is that?
1697 A: From the FvwmButtons man page:
1699        If command is an fvwm Exec command, then the button
1700        will remain pushed in until a window whose name or
1701        class matches the quoted portion of the command is
1702        encountered.  This is intended to provide visual
1703        feedback to the user that the action he has requested
1704        will be performed.  If the quoted portion contains no
1705        characters, then the button will pop out immediately.
1706        Note that users can continue pressing the button, and
1707        re-executing the command, even when it looks "pressed
1708        in."
1710 ----------------------------------------------------------------------
1712 4.2  When having FvwmButtons swallow an app, is it possible to have
1713      button presses assigned to actions as well?  For instance, I'd
1714      like to swallow xload and have a button press pop up an xterm, or
1715      swallow xbiff and have a button press bring up the list of
1716      messages.
1718 A: Yes, with the alpha release 2.5.0 or any later release.  For older
1719    releases, read on.
1721    The button presses normally get passed through to the swallowed
1722    application, but if you put a title on the button, you can
1723    assign actions to that. Here's an example that someone sent to
1724    the mailing list once:
1726    *FvwmButtons(1x4,       \
1727      Title           'System Info', \
1728      Swallow         "xload" 'Exec xload', \
1729      Action(Mouse 1) 'Exec xosview -cua0 -net 200 -ul -l -geometry 325x325', \
1730      Action(Mouse 2) 'Exec xcpustate -interval 1 -bg "#a4978e" -fg black', \
1731      Action(Mouse 3) 'Exec rxvt -fg "khaki" -bg "dark olive green" \
1732                            -fat -n top -T Top -7 -e top' )
1734    And you could come up with something similar for xbiff (untested):
1736    *FvwmButtons(1x2, \
1737      Title 'Check Mail' Swallow "xbiff" 'Exec xbiff', \
1738      Action(Mouse 1) 'Exec from | xmessage -file -' )
1740    plus you could bind another button (say Mouse 3) to run your
1741    mail program.
1743    Sometime in the future I'll probably try and fix it so that you can
1744    actually assign a button press over the application itself...
1746 ----------------------------------------------------------------------
1748 4.3  I'm seeing odd things when trying to preprocess files with the
1749      FvwmM4/Cpp module...
1751 A: Yup, I imagine that you might be.  Things like the InitFunction not
1752    being called or windows that were running before fvwm started not
1753    getting their Borders & Style options set, etc.
1755    The reason for all this is because of the fact that FvwmM4 is a
1756    module.  Fvwm won't be looking at the commands coming back from
1757    the module until after it hits the main loop of the code, AFTER the
1758    startup is all done and it has already tried to execute the
1759    InitFunction.
1761    To force synchronous execution of FvwmM4/Cpp use:
1763      ModuleSynchronous FvwmM4/Cpp -lock filename
1765    See the man page for more details.
1767 ----------------------------------------------------------------------
1769 4.4  I heard about this FvwmFileMgr module.  Where can I find it?
1771 A: The FvwmFileMgr module disappeared because a file manager doesn't
1772    need to be integrated with a window manager and something like xfm
1773    does a much better job.  I recommend you pick that up instead (from
1774    ftp.x.org or your favorite mirror).
1776 ----------------------------------------------------------------------
1778 4.5  I used to use GoodStuff in fvwm 1.xx, but it's not in the 2.xx
1779      distribution.  What do I use now?
1781 A: GoodStuff was renamed to FvwmButtons.  Same module, new name (that
1782    fits in with the other modules naming convention).
1784 ----------------------------------------------------------------------
1786 4.6  I want to have the sub panels in FvwmButtons not at their default
1787      position near the button but somewhere else on the screen.  Is
1788      this possible?
1790 A: Yes, but not with the current implementation of the panels.  Please
1791    read question 7.12 for instructions.
1793 ----------------------------------------------------------------------
1795 4.7  How can I open a sub panel or push buttons in FvwmButtons
1796      with a keyboard shortcut?
1798 A: FvwmButtons does not support keyboard shortcuts itself.  Since
1799    fvwm version 2.3.24 the FakeClick command can be used to
1800    simulate a click in the FvwmButtons window:
1802    fvwm-2.3.24 or later:
1804      DestroyFunc press_fvwmbuttons
1805      AddToFunc press_fvwmbuttons
1806      + I Next (FvwmButtons, CirculateHit) WarpToWindow $1 $2
1807      + I FakeClick depth 2 press $0 release $0
1809    fvwm-2.5.1 or later (moves the pointer back to the original
1810    position):
1812      DestroyFunc press_fvwmbuttons
1813      AddToFunc press_fvwmbuttons
1814      + I SetEnv pointer_x $[pointer.x]
1815      + I SetEnv pointer_y $[pointer.y]
1816      + I Next (FvwmButtons, CirculateHit) WarpToWindow $1 $2
1817      + I FakeClick depth 2 press $0 release $0
1818      + I WindowId root WarpToWindow $[pointer_x]p $[pointer_y]p
1820    With this function, you can warp the pointer to the desired
1821    button to press and simulate a click.  Call it with
1823      press_fvwmbuttons btn xoff yoff
1824                          ^    ^    ^
1825                          |    |    |___ y offset of the button
1826                          |    |________ x offset of the button
1827                          |_____________ button to press
1829    For example, if the button of a panel is at 30% of FvwmButtons'
1830    width and 10% of its height and you want to simulate mouse
1831    button 1, issue
1833     press_fvwmbuttons 1 30 10
1835    You can bind this to a key.  For example:
1837      Key f1 a n press_fvwmbuttons 1 30 10
1839    Note that this solution does not work well if the mouse is moved at
1840    the same time.
1842    With fvwm-2.5.24 or later (using SendToModule) a much better
1843    solution is:
1845       SendToModule buttons-alias PressButton A 1
1846    
1847    This would send the FvwmButtons instance "button-alias" a command
1848    to invoke the action that button "A" has as though the button were
1849    clicked with mouse button 1.  For instance:
1851       *button-alias: (Id A, Title "My Button", Action (Mouse 1) \
1852          `Exec exec xcalc`)
1854    
1855 ======================================================================
1856             5 - Development, Known Problems & Bug Reports
1857 ======================================================================
1859 5.1  I'd really like to see neat feature XYZ in fvwm.  Wouldn't
1860      that be cool?  I even have a patch.  When can it be added?
1862 A: If you plan to write a patch, *please*, first of all fetch the
1863    latest development release from our web site or better yet use CVS
1864    as described in http://fvwm.org/documentation/dev_cvs.php.  It is
1865    also a good idea to contact the fvwm-workers list.  At times,
1866    patches for older releases may prove completely worthless, e.g.
1867    because the fix has already been integrated, a feature already
1868    added or removed or simply because the code is very different to
1869    the code you patches.  You will do yourself and us a great favor.
1870    Otherwise all your hard work may be wasted.
1872    People are always requesting or suggesting new features (many of
1873    which are great ideas and where a lot of the current features came
1874    from).  One of the more common ones for example is Windows 95 look
1875    and feel (although since this was first written, that particular
1876    feature has actually been indirectly implemented via several
1877    appearance-affecting features).
1879    I'd like to make a statement about this.  fvwm is supposed to be
1880    small, fast, powerful, and flexible, and sometimes tradeoffs have
1881    to be made here.  The module interface helps here, as a lot of
1882    features that not everyone wants or needs don't have to be in the
1883    main module consuming resources for those people that don't want or
1884    need them.
1886    So if you have a suggestion (or a patch), please think of a way to
1887    make it as small and generic as possible if you feel it belongs in
1888    the main module.  Please have a look at the enhancements that are
1889    listed in our bug tracking system (see Q5.3).
1891    If you plan to make a patch, please contact the fvwm-workers
1892    mailing list first.  From time to time we are changing the code in
1893    a very disruptive way and if you create a patch to a version before
1894    such changes were made we will all have a hard time to integrate
1895    the patch.  Most of the time we will ask you to update the patch
1896    for the current code anyway.
1898    Bear in mind that we make no guarantees that we'll add any
1899    requested feature or apply any submitted patches to the official
1900    version, but please don't let this dissuade you from submitting
1901    them.  We like to get new ideas and we're always curious to see how
1902    someone would implement a given feature, even if we never plan to
1903    put it in fvwm. Also, we may choose to re-implement any patches
1904    submitted, which may change the syntax, functionality, etc.  Please
1905    don't take offense from that, as we mean no offense and we
1906    generally have a good reason (at least by our way of thinking) for
1907    our actions...
1909 ----------------------------------------------------------------------
1911 5.2  How do I create/submit/apply patches?
1913 A: First of all, please read the first section of the answer to Q5.1!
1915    Please add proper entries to the ChangeLog file(s) and possibly to
1916    NEWS and AUTHORS files whenever you submit a patch.  The ChangeLog
1917    lists *all* changed files and functions along with a useful
1918    explanation of the change details.  The NEWS file mentions all
1919    user-visible changes, including bug fixes.  Also, do not forget to
1920    write a section for the man page if the patch includes new
1921    features.
1923    You can find more detailed instructions for working with the
1924    fvwm sources in the files doc/DEVELOPERS and doc/CONVENTIONS in
1925    CVS or the tarballs.
1927    Creating a patch against CVS sources (preferable) -
1929         1) Execute "cvs update -AdP" to ensure there are no conflicts
1930            with the most recent sources.
1931         2) Don't forget to update the ChangeLog file (see below) and
1932            all manual pages if needed.
1933         3) In the base cvs directory run: cvs diff -u >myfeature.patch
1935    Creating a patch against released sources -
1937         1) Copy the original file(s) to the same name with the
1938            additional extension of .orig (or something like that).
1939         2) Update the ChangeLog file.  If you use (x)emacs, move the
1940            cursor into the function you changed and hit <ctrl>-x 4 a.
1941            This will generate an empty ChangeLog entry in the right
1942            file (there are several ChangeLogs).  Add a description of
1943            what you did.  Do this each time you change a function or
1944            file (for changes outside of functions).  You should update
1945            the AUTHORS and NEWS files too if appropriate.
1946            Please take the time to add the ChangeLog entries, it makes
1947            our work a lot easier.
1948         3) Run diff with either the -c (context) or -u (unified)
1949            switch on the sets of files, with the .orig file FIRST.  I
1950            prefer unified diff's because they are smaller, but
1951            sometimes they aren't as readable (and some diff versions
1952            don't support unified diffs), so either context or unified
1953            diffs are fine (but please, no "plain" diffs).
1955         ex: cp fvwm.c fvwm.c.orig ; <edit> ; diff -u fvwm.c.orig fvwm.c
1957    Submitting a patch -
1959         Mail it to the fvwm-workers mailing list
1960         <fvwm-workers@fvwm.org>.
1962         If your patch is large you should compress it (preferably with
1963         gzip).  Should it still be larger than 25k you might want to
1964         to place it on a web page and email the URL to the mailing
1965         list or ask on the fvwm-workers list first.
1967         Be sure to read the answer to Q5.1.
1969         Don't forget the ChangeLog and the documentation.
1971    Applying a patch -
1973         Get a copy of the program 'patch' from your favorite source,
1974         such as ftp://ftp.gnu.org/gnu/patch/, compile it, and then
1975         follow its directions (generally just cd into the appropriate
1976         directory and run 'patch < patchfile').
1978 ----------------------------------------------------------------------
1980 5.3  How do I submit a bug report?
1982 A: Please do not report any 'bugs' related to XMMS in the fvwm bug
1983    tracking system or the fvwm mailing lists but send them to the XMMS
1984    developers instead.
1986    Please enter a DETAILED description of your problem in our
1987    web-based bug-tracking system.  You can find a link on our web page
1988    (see Q1.3). By detailed we mean more than just "my window isn't
1989    behaving right" or "I found a bug":
1991         - First of all: use our bug tracking system! You will find
1992           a link to it on our main web page (see Q1.3).  If for some
1993           reason the bug tracking system doesn't work for you, please
1994           use the fvwm-bug shell script that comes with fvwm.
1995         - Describe the problem as best you can, preferably with
1996           suggestions on how to reproduce it easily
1997         - If applicable, include information from:
1998                 xwininfo (preferably w/ the -all option)
1999                 xprop
2000                 FvwmIdent
2001                 xdpyinfo (maybe)
2002         - What exact version of fvwm you are running.
2003         - What OS & version you are running under
2004         - What version of X11 are you running under, and is it an MIT
2005           server or a vendor specific server (e.g. the OpenWindow X
2006           server under SunOS)
2007         - How was fvwm compiled (compiler & version, options, etc)
2008         - What settings do you have in your config file that may be
2009           pertinent.
2011 ----------------------------------------------------------------------
2013 5.4  I have a window that is behaving unexpectedly under fvwm, but
2014      just fine under (whatever other window manager), or I have just
2015      some random bug.  What do I do?
2017 A: First, check your rc file and your .Xdefaults to make sure that
2018    something blatantly obvious in there isn't causing the problem.
2019    Second, *PLEASE PLEASE PLEASE* check the FAQ, BUGS, TODO, and man
2020    pages.  Finally, check the official WWW page and the mailing list
2021    archives (which have a search facility) stored there.
2023    If you still can't figure it out, report your problem to our bug
2024    tracking system (see Q5.3).
2026 ----------------------------------------------------------------------
2028 5.5  Why do NumLock, CapsLock and ScrollLock interfere with
2029      ClickToFocus and/or my mouse bindings?
2031 A: Because they are treated as modifiers.  You can use the
2032    IgnoreModifiers command to turn individual modifiers off for
2033    bindings.  With XFree86 and fvwm version 2.4.0 or above, the
2034    right command is
2036      IgnoreModifiers L25
2038    If you changed your modifiers manually or are using a different
2039    X server use the 'xmodmap' command to find out which modifiers
2040    correspond to the keys you want to switch off.
2042    This command creates a lot of extra network traffic, depending
2043    on your CPU, network connection, the number of Key, Mouse or
2044    PointerKey commands in your configuration file and the number
2045    of modifiers you want to ignore.  If you do not have a
2046    lightning fast machine or very few bindings you should not
2047    ignore more than two modifiers.  So do not ignore scroll-lock
2048    if you have no problem with it.
2050    A better way to solve this problem is to modify the keyboard
2051    mapping of your X server.  The commands
2053      xmodmap -e "clear Lock"
2054      xmodmap -e "clear Mod2"
2055      xmodmap -e "clear Mod5"
2057    remove the CapsLock, NumLock and ScrollLock from the keyboard
2058    map.  Pressing these keys has no effect then.  To re-add them
2059    try this:
2061      xmodmap -e "add Lock = Caps_Lock"
2062      xmodmap -e "add Mod2 = Num_Lock"
2063      xmodmap -e "add Mod5 = Scroll_Lock"
2065    Fvwm has to be restarted to use the changes made by
2066    xmodmap.  Please refer to the man page of the xmodmap command
2067    for further details.  If you disable the CapsLock key in your
2068    keyboard map in this way, you can speed up fvwm a bit by
2069    removing the Lock modifier from the list of ignored modifiers:
2071      IgnoreModifiers
2074    Since we all occasionally press NumLock or ScrollLock, it makes
2075    sense to redefine some main bindings to work with any modifiers.
2076    I.e. consider to replace something like this in your configuration:
2078      Mouse 1 R N Menu MenuFvwmRoot
2080    with this:
2082      Mouse 1 R A Menu MenuFvwmRoot
2084 ----------------------------------------------------------------------
2086 5.6  Menus with gradient backgrounds flicker or are very slow.
2088 A: The flickering is caused by fvwm constantly redrawing the menus
2089    when a sub menu pops up or down.  One way to help this is to use
2090    a X server with backing storage (XFree86 has backing storage
2091    support, I don't know about other servers but I guess that any
2092    decent X server has it).  If your Xserver is started with the
2093    -bs option, remove it.  If not try the -wm option, for example:
2095      startx -- -wm
2097    You may have to adapt this example to your system (e.g. if you
2098    use xinit to start X).
2100    If that doesn't help, either because your X server does not have
2101    backing storage or because system resources are limited, make
2102    sure sub menus do not overlap the parent menu:
2104      MenuStyle <stylename> PopupOffset 1 100
2106    Unfortunately this does not work properly with the fvwm
2107    menu style.
2109    For the speed problem both suggestions above might help too.
2110    Another thing to try is to turn hilighting of the active menu
2111    item other than by foreground color off.  Put these lines in your
2112    fvwm/config after the menu styles have been defined:
2114      MenuStyle <stylename> Hilight3DOff, HilightBackOff
2115      MenuStyle <Stylename> ActiveFore <preferred color>
2117 ----------------------------------------------------------------------
2119 5.7  Why won't the StartIconic style work with {Netscape, etc.}?
2121 A: The application won't allow it.  This has only been observed with
2122    Netscape.  When Netscape starts up, fvwm starts the main window in
2123    the iconic state.  Netscape immediately issues another MapRequest,
2124    to which the window manager must respond by de-iconifying the
2125    window, according to the ICCCM rules.  (Netscape can be persuaded
2126    to start iconic, however, by invoking it with the -iconic command
2127    line flag.)
2129 ----------------------------------------------------------------------
2131 5.8  How do I capture the output (e.g. errors) of fvwm?
2133 A: Errors are reported to the standard error file.  You can redirect
2134    standard error to a file when fvwm is started: "fvwm 2>
2135    fvwm-errors". X sessions started by xdm often redirect errors to a
2136    file named ".xsession-errors".
2138    Alternatively, FvwmConsole or "FvwmForm FvwmForm-Talk" modules
2139    will display error messages.
2141 ----------------------------------------------------------------------
2143 5.9  I try to run some program under fvwm, but it dies with an X11
2144      error like BadAccess.  The same program works just fine under MWM
2145      or OLWM.  What's going on?
2147 A: The error message usually looks something like this:
2149         X Error of failed request:  BadAccess (attempt to access private
2150         resource denied)
2151          Major opcode of failed request:  28 (X_GrabButton)
2152          Serial number of failed request:  1595
2153          Current serial number in output stream:  1596
2155    Well, this is telling you that there is a conflict in key/button
2156    assignments.  In your config you have bound some key/button that
2157    this program really wants to bind to an action, but it can't since
2158    fvwm has already done so (but you weren't doing it in the rc file
2159    for your previous window manager).  Figure out what the offending
2160    key binding is and remove it from your fvwm/config, or temporarily
2161    via "FvwmForm FvwmForm-Talk" by removing the fvwm binding (see the
2162    man page for the Key & Mouse commands).
2164 ----------------------------------------------------------------------
2166 5.10  Every time I update my install, my currently running fvwm
2167       session dies.  Why is that?
2169 A: Many OSes swap the program from memory via the image on the disk,
2170    and if you overwrite it, and then the current one tries to swap
2171    something back into memory before you restart, it'll core dump.  To
2172    avoid this, rename your old executables or move them to some other
2173    directory.  The 'mv' command preserves the inode so it won't
2174    core dump, but then when you restart fvwm it'll pick up the new
2175    copy.
2177 ----------------------------------------------------------------------
2179 5.11  After I restart fvwm certain windows or icons raise above
2180       all other windows and cannot be lowered by any means.  One
2181       example are the shortcuts of KFM (the KDE file manager).
2182       What can I do about that?
2184 A: Some applications use so called 'override redirect' windows that
2185    are not (and cannot be) managed by the window manager.  By
2186    convention as defined in the ICCCM, such windows must only be
2187    displayed for a very short time.  KFM and possibly other
2188    applications ignore this convention and use permanent 'override
2189    redirect' windows, e.g. the KFM shortcuts.  Fvwm can not easily
2190    detect these windows when it restarts and places the windows
2191    managed by fvwm below them.
2193    However, since fvwm version 2.3.8 there is a command that will
2194    help you, although it might cause trouble with other applications
2195    using 'override redirect' windows.  We can't make any promises
2196    since KFM is violating the conventions and the applications may
2197    violate them in different ways.
2199    Now the command.  Put this anywhere in your config file:
2201      BugOpts RaiseOverUnmanaged on
2203 ----------------------------------------------------------------------
2205 5.12  The StartsOnPage style does not work for me.  Why?
2207 A: Many applications request a specific position where they want to
2208    appear (the so called 'program specified position').  Unless fvwm
2209    is told explicitly to ignore this, the program specified position
2210    overrides the StartsOnPage style.  Use this line in your
2211    configuration file:
2213      Style * NoPPosition
2215 ----------------------------------------------------------------------
2217 5.13  Some modules can not be started when I restart fvwm.
2219 A: You may see the following error message on the console:
2221      [fvwm][PositiveWrite]: <<ERROR>> Failed to read descriptor:
2222      - data available=N
2223      - terminate signal=N
2225    It means that fvwm has given up waiting for one of its modules to
2226    reply, and so has killed it.  The length of the timeout is a
2227    configuration parameter - try adding
2229      ModuleTimeout 10
2231    to your config file.  The units are in seconds and the default
2232    value is 5.
2234    This problem will only occur on slow machines or high system load
2235    (many open windows).
2238 ----------------------------------------------------------------------
2240 5.14  I'm running Rational Rose and fvwm ignores its windows.
2242 A: This problem might occur on other applications besides the one
2243    mentioned.
2245    The symptoms as reported by Raymond Toy are:
2247      I've been using fvwm for ages and it's always worked for me just
2248      fine.  However, I've started using Rational Rose for Solaris.  fvwm
2249      seems to get completely confused.
2251      o Fvwm doesn't draw any frames around the Rose window like it
2252        does for all other windows (except for those I explicit said
2253        not to).
2255      o The Rose window is always on top.  Nothing I do can bring
2256        another window above the Rose window.
2258      o Using fvwm's identify window module shows nothing.  No identify
2259        window pops up showing the window info.
2261      o Focus sometimes seems to be lost.  (I have focus follows
2262        mouse).  I have to move the mouse out of the window and back in
2263        to get focus. Sometimes I also have to click in the window to
2264        get focus.
2266      The annoying thing is that this all seems to work with CDE and
2267      dtwm. I don't want to have to switch to dtwm so any hints or
2268      pointers on where to look to get fvwm to understand this window
2269      would help me a lot.
2272    Heres what we found out:
2274    Rational Rose uses software from Mainsoft that lets MS Windows
2275    applications be recompiled to run on UNIX.
2277    There are 2 Mainsoft Knowledgebase pages that relate to UNIX
2278    window managers:
2280         http://www.mainsoft.com/kb_mainwin/kbmw0027.html
2281         http://dev.mainsoft.com/Default.aspx?tabid=58 [KBMW0034]
2283    These pages suggest that you export MWWM=allwm or MWWM=MWM before
2284    starting the application. The first page is missing, but can be
2285    found using http://web.archive.org.
2287    Raymond reports:
2289      This works just fine!   Setting MWWM=allwm, Rose  comes
2290      up like a normal X app where  the WM draws the borders.
2291      With MWWM=MWM, it works ok too except that for the main
2292      window,  no borders are drawn  by the WM and Rose draws
2293      its own  borders (I  have  fvwm respecting   MWM decor
2294      hints).  (This   is     correct  as mentioned by    the
2295      Knowledgebase pages above.)   I don't  recall what Rose
2296      looks like with dtwm, but I suspect it's quite close to
2297      all MWWM=MWM.
2299    Next we had Klaus Zeitler report that the Rational Rose official
2300    startup script is explicitly setting ALLWM to nothing.  This makes
2301    it more difficult for an individual user to set this variable.
2302    If you can, you can just modify the script, otherwise, your other
2303    alternative is to copy the script somewhere where you can modify it
2304    and run it from there.
2306 ----------------------------------------------------------------------
2308 5.15  Although I use the WindowListSkip style for my modules they
2309       still show up in FvwmIconMan, FvwmWinList etc.
2311 A: Make sure you have
2313      *FvwmIconMan: UseWinList true
2315    in your config file.  If that does not help, the modules you are
2316    using may not match the fvwm executable.  Recompile and reinstall
2317    everything and the problem should go away.
2319 ----------------------------------------------------------------------
2321 5.16  When I Maximize an application, sometimes I get gaps around
2322       the edges, and other times I don't.  What's going on?
2324 A: The ICCCM specification allows applications to specify certain
2325    properties the window manager should honor, such as aspect
2326    ratio (PAspect) or increments to be resized in (PResizeInc).  Of
2327    course, sometimes these properties won't perfectly match the
2328    size of your desktop (or ewmh struts), if that should happen,
2329    you will get gaps.
2331    In general, the application will have a good reason for doing
2332    this (for example, a terminal window may not want to have only
2333    part of a column visible), but you can make fvwm ignore the
2334    hints with
2336      Style * ResizeHintOverride
2338 ======================================================================
2339                           6 - Miscellaneous
2340 ======================================================================
2342 6.1  What exactly is the difference between a DESK, a PAGE, and the
2343      SCREEN?
2345 A: Our naming convention is sometimes a source of confusion, and when
2346    discussing problems and the like it's good to maintain a consistent
2347    meaning.  To illustrate how features of fvwm should be referred to
2348    - fvwm has multiple disjoint DESKTOPS, each of which is comprised
2349    of M by N PAGES, which are each the size of the physical SCREEN.
2350    The physical SCREEN acts as a viewport over one of the PAGES of the
2351    current DESK.  Here's a picture to clarify (also, take a look at
2352    the FvwmPager module):
2354              Desk 0                     Desk 1
2355      +----------+----------+    +----------+----------+
2356      |          |          |    |          |          |
2357      | Page 0 0 | Page 1 0 |    |          |          |
2358      |          |          |    |          |          |
2359      |          |          |    |          |          |
2360      +----------+----------+    +----------+----------+
2361      |+--------+|          |    |          |          |
2362      ||Page 0 1|| Page 1 1 |    |          |          |
2363      ||        ||          |    |          |          |
2364      |+--------+|          |    |          |          |
2365      +----------+----------+    +----------+----------+
2367    It shows two 2 x 2 DESKTOPS.  If the current DESK were number 0,
2368    and the current PAGE were 0 1, the SCREEN would show only the
2369    windows located there, plus any sticky ones.
2371    Desktops are numbered consecutively, beginning with 0.  The user is
2372    not responsible for creating new desktops, those details are
2373    handled inside fvwm.  To display the different desktops, the user
2374    can configure key bindings that determine which desktop is
2375    displayed.  For example, to have the combinations Meta-1 to Meta-4
2376    display desktop numbers 0 to 3, one would add this to her config:
2378      Key 1 A M GotoDesk 0
2379      Key 2 A M GotoDesk 1
2380      Key 3 A M GotoDesk 2
2381      Key 4 A M GotoDesk 3
2383    The same can be done for pages.  For example, if each desktop has
2384    a size of 2 by to pages you could bind Meta-F1 to Meta-F4 to
2385    flip pages:
2387      DeskTopSize 2x2
2388      Key F1 A M GotoPage 0 0
2389      Key F2 A M GotoPage 1 0
2390      Key F3 A M GotoPage 0 1
2391      Key F4 A M GotoPage 1 1
2393    It is also a good idea to create a pager that displays several
2394    desktops, side by side.  This command displays the first 4
2395    desktops:
2397      Module FvwmPager 0 3
2399    Or if you prefer to see only the current desktop in the pager:
2401      Module FvwmPager * *
2403 ----------------------------------------------------------------------
2405 6.2  I'd really like {OpenWindows, NeXT, Win95, Mac, etc} look and
2406      feel.  Are you going to support that?
2408 A: This is not our primary mission, but we think fvwm does a pretty
2409    good job of producing these appearances.
2411    You may want to take a look at the
2412         http://fvwm-themes.sourceforge.net/
2413    package.
2415 ----------------------------------------------------------------------
2417 6.3  Where can I get more XPMs for icons?
2419 A: If you want more color icons, grab the ones out of the ctwm
2420    distribution (also at ftp.x.org) which has a lot of nice ones.  You
2421    can also find more in other distributions at ftp.x.org, and at
2422    http://www.sct.gu.edu.au/~anthony/icons/ (which has a lot, I
2423    believe).
2425    Icons used to be distributed along with fvwm.  Now there is a basic
2426    set of icons available at the fvwm web site.  You might find some
2427    links at the fvwm web site to other sources of icons.
2429    You may want to take a look at the
2430         http://wm-icons.sourceforge.net/
2431    package.
2433 ----------------------------------------------------------------------
2435 6.4  Linux XF86 virtual screen size & fvwm interaction...
2437 A: Turn off the Linux Virtual Screen stuff in your XF86Config file if
2438    you don't like it.  The XFree86 virtual screen feature and hardware
2439    panning support in certain video cards is a pretty useless kludge
2440    when you're using a window manager that implements virtual
2441    desktops.
2443 ----------------------------------------------------------------------
2445 6.5  I know this question doesn't have to do with fvwm, but what
2446      happened to to rxvt and rclock which Rob Nation used to support?
2447      Where can I find them now?
2449 A: The official home for rxvt is:
2451      http://www.rxvt.org/
2453    and rclock can be found in that rxvt distribution as well.
2455 ----------------------------------------------------------------------
2457 6.6  How do I set the background with fvwm?
2459 A: Setting the background image is not really part of the window
2460    manager.  If you are using one of the Linux distributions, most
2461    likely, some part of the distribution is setting the background for
2462    you.
2464    There is a program shipped with fvwm (fvwm-root, previously known
2465    as xpmroot) that you can use to set the background to an XPM or PNG
2466    image.  Other programs like "xv", "xli", "xloadimage", "display",
2467    "feh" and "Esetroot", may be used too, they support some image
2468    formats that fvwm-root does not.
2470    If you just want a static image on your background, you might
2471    invoke one of these programs from your .xsession or .xinitrc file.
2472    You can also invoke one of these programs from the StartFunction in
2473    your config.
2475    The fvwm module FvwmBacker can be used to change the background
2476    depending on the desk you are currently on by calling an external
2477    program.  One big disadvantage of external programs is that
2478    changing the background on the fly can be pretty slow.  FvwmBacker
2479    can use the image defined in a colorset and cached by fvwm for fast
2480    background changing.  For example:
2482      Colorset 10 TiledPixmap foo.xpm
2483      Colorset 11 Pixmap bar.png
2484      FvwmBacker: Command (Desk *, Page * 0) Colorset 10
2485      FvwmBacker: Command (Desk *, Page * 1) Colorset 11
2487    However, fvwm can handle only xpm, xbm and png images.  Other
2488    formats must be converted before they can be used in fvwm.
2490    If you want to set a different background per screen (i.e., you're
2491    using Xinerama), then the program "Nitrogen" can be used to do
2492    that.  See:  http://projects.l3ib.org/nitrogen/
2494 ----------------------------------------------------------------------
2496 6.7  When I use Fvwm, my XYZ isn't the right color.  Whats wrong?
2498 A: Under this heading we've had questions about FvwmForm being all
2499    white, icons not displaying and messages about being unable to
2500    allocate colors.
2502    Older hardware uses something called 8 bit color.  You can also
2503    mis-configure newer hardware so that it's only using 8 bit color.
2504    When you use 8 bit color, your display can only have 256 colors on
2505    it at once.
2507    This is explained in excruciating detail in the
2508         http://www.sunhelp.org/faq/FrameBuffer.html
2510    If your display can support more than 256 colors, that's the way to
2511    go.  Look up the documentation for your X server.  You may want to
2512    start with "man X".
2514    If you are stuck with 8 bit color, fvwm can help.  In the 2.2.x
2515    releases, you can use the "ColorLimit" command to reduce the number
2516    of colors Fvwm uses in icons.  In the 2.3.x releases and later,
2517    ColorLimiting is automatic, but you still might want to use this
2518    command to further reduce color use.
2520    Other things you may want to do:
2522    - Always run Netscape with the "-install" argument.
2524    - If you use an image on your screen background, reduce the number
2525      of colors it uses.  For xv add the "-nc nn" argument.  For
2526      xli use the "-colors nn" argument.
2528    - Don't use color gradients.
2530    - Some applications are color hungry.  Beware of anything TK based,
2531      and FrameMaker in its default setting.
2533    If you still have problems after this, try the fvwm mailing list.
2535 ----------------------------------------------------------------------
2537 6.8  I just got a mouse with 57 buttons.  How do I make Fvwm use them?
2539 A: Okay, we know you don't have 57 buttons, but we've seen reports
2540    of up to 7 so far.  Starting with Fvwm 2.4.0 Fvwm supports all
2541    five mouse buttons that X officially supports, and since
2542    2.5.11, up to 9 buttons are supported by default.
2544    2.5.11 and later:
2546      To use more than 9 buttons (up to 31), modify the file
2547      libs/defaults.h.  Replace
2549        #define NUMBER_OF_EXTENDED_MOUSE_BUTTONS      9
2551      with
2553        #define NUMBER_OF_EXTENDED_MOUSE_BUTTONS      15
2555    2.4.10 to 2.5.10:
2557      To use more than 5 buttons, modify the file libs/defaults.h.
2558      Replace
2560        #define NUMBER_OF_MOUSE_BUTTONS               5
2562      with
2564        #define NUMBER_OF_MOUSE_BUTTONS               7
2566    Then recompile and reinstall fvwm.  However, the buttons with
2567    numbers higher than 5 do not work as well as 1 to 5.  This is
2568    because X does not provide the necessary interface to handle more
2569    than 5 buttons in some functions.  This means that some
2570    functionality is not available with buttons 6 and higher.
2572    The maximum possible number you can use is 31.  Any higher value
2573    will probably not work and possibly even crash fvwm or its modules.
2575 ----------------------------------------------------------------------
2577 6.9  Why does fvwm change my X Cursor theme?
2579 A: It doesn't.  There is a standard set of cursors that should
2580 always be available to applications, such as crosshair, left_ptr,
2581 arrow, pencil, and so on.  Your theme should provide each of these
2582 cursors, but some don't.  When something (for example, an
2583 application or fvwm) requests a cursor that your theme does not
2584 provide, X falls back to the default.  If you are seeing fvwm
2585 using cursors that do not match your theme, you should use
2586 CursorStyle to change to a cursor that is available, or find a
2587 more complete theme.  Note that fvwm does not control what cursors
2588 your applications request.
2590 ======================================================================
2591               7 - Hints and Examples from the Developers
2592 ======================================================================
2594 7.1  An easy way to test new configurations.
2596    Did you know that you do not need to restart X or fvwm to see what
2597    most configuration commands do? There are several modules
2598    that allow you to issue fvwm commands at any time.  Among
2599    these are FvwmCommand, "FvwmForm FvwmForm-Talk" and FvwmConsole.
2600    Personally I use FvwmCommand and FvwmConsole.
2602    When you run FvwmConsole you get a shell like window where you can
2603    type configuration commands that are sent to fvwm.  Just add an
2604    entry to some menu that starts it:
2606      AddToMenu main_menu
2607       + "FvwmConsole" Module FvwmConsole
2609    Using FvwmCommand is a bit more tricky.  To use it you need to
2610    start a server in your config by adding this line:
2612      Module FvwmCommandS
2614    Make sure FvwmCommand is in your search path.  Now you can enter
2615    commands on the command line of your favorite shell:
2617      FvwmCommand "MenuStyle * Font 6x9"
2619    Note that you have to quote the command.  The advantage of
2620    FvwmCommand over FvwmConsole is that you can use your shell with
2621    all its features to run commands (command completion and history
2622    for example).  The disadvantage is that it is a bit slow since a
2623    new FvwmCommand has to be started for each command.
2625    Other related modules and commands are FvwmScript and PipeRead.
2627 ----------------------------------------------------------------------
2629 7.2  Using shell commands for configuration.
2631    Sometimes you might want to use the output of a shell command or
2632    script in your config.  For example you might need a menu that
2633    has all filenames in a certain directory as its entries.  You can
2634    use the PipeRead command and the FvwmCommand module.  I recommend
2635    using PipeRead since creating twenty menu items takes a
2636    considerable amount of time with FvwmCommand.
2638    Example from my config:
2640      # make the background menu
2641       DestroyFunc MakeBackgroundMenu
2642       AddToFunc MakeBackgroundMenu
2643       + I DestroyMenu BackgroundMenu
2644       + I AddToMenu BackgroundMenu Backgrounds Title
2645       + I PipeRead 'for i in `/bin/ls $HOME/.fvwm/backgrounds/*.bg.*`; \
2646             do echo -e AddToMenu BackgroundMenu `basename $i | sed -e \
2647             "s/\.bg\..*$//"` Function SetDefaultBackground $i; done'
2649      # set the default background
2650      DestroyFunc SetDefaultBackground
2651      AddToFunc SetDefaultBackground
2652       + I Exec echo -e $0 > $HOME/.fvwm/background
2653       + I SetBackground
2655      # set a new background
2656      DestroyFunc SetBackground
2657      AddToFunc SetBackground
2658       + I Exec test -r $HOME/.fvwm/background && xv -root -quit -viewonly \
2659             `cat $HOME/.fvwm/background|tr -d "\n"`
2661      # activate setting from last session and build the menu
2662      AddToFunc StartFunction
2663       + I SetBackground
2664       + I MakeBackgroundMenu
2667    The MakeBackgroundMenu function builds a menu that contains an item
2668    for every file that matches the pattern "*.bg.*" in the directory
2669    $HOME/.fvwm/backgrounds.  The suffix .bg.* is removed.  When I
2670    select an item the file is displayed in the background using
2671    xv. Furthermore the path and filename are stored in
2672    $HOME/.fvwm/background.  When I start my next fvwm session the
2673    filename is fetched from there so I get the background from my last
2674    session.
2676    I have an even more complex setup for color palettes.
2678 ----------------------------------------------------------------------
2680 7.3  How to start applications on a page or desk other than the
2681      current.
2683    Use the 'StartsOnDesk' or 'StartsOnPage' style in your config:
2685      Style Netscape* StartsOnPage 0 1
2687    or
2689      Style Netscape* StartsOnDesk 1
2691    Any window with a title that begins with 'Netscape' will be placed
2692    on page 0 1 (desk 1).  You will probably want to use these options
2693    too:
2695      Style * RecaptureHonorsStartsOnPage, CaptureHonorsStartsOnPage
2697    If you want to start applications on a different page in the
2698    background without switching to this page, use the 'SkipMapping'
2699    style:
2701      Style Netscape* StartsOnPage 0 1, SkipMapping
2703 ----------------------------------------------------------------------
2705 7.4  How to start applications on a page or desk other than the
2706      current without moving the viewport to the new page or desk.
2708    Use the SkipMapping style:
2710      Style Netscape* StartsOnPage 0 1, SkipMapping
2712 ----------------------------------------------------------------------
2714 7.5  A more efficient MWM menu style.
2716    Perhaps you have noticed that with the MWM menu style your sub
2717    menus are shown as soon as the pointer enters their menu items,
2718    even if you just want to scroll down the list.  You can prevent
2719    this with the 'PopupDelay' and 'PopupDelayed' options of the
2720    MenuStyle command:
2722      MenuStyle mwm
2723      MenuStyle PopupDelayed, PopupDelay 80
2725    The sub menu will be shown 80 milliseconds after the pointer enters
2726    the menu item.  You will hardly notice the delay.  Note that 80 ms
2727    is just long enough to move through the menu with auto repeat on my
2728    cursor keys.  You may have to experiment with this number to get it
2729    right.
2731 ----------------------------------------------------------------------
2733 7.6  Placing menus on the screen.
2735    Do you have to close windows or move the pointer all over the
2736    screen to find some part of the background where you can bring up
2737    your main menu (or any other root menu)?
2739    Then you should use a keyboard shortcut.  For example
2741      Key  space A M   Menu root c c main_menu
2743    in your config gives you the menu 'main_menu' in the center of the
2744    screen when you press Alt-space.  Or you might want a shortcut to
2745    the window menu:
2747      Key  space A SM  Menu root c c WindowMenu
2749    You can place menus anywhere you like, not just where the mouse
2750    pointer is.  Please read the section for the 'Menu' command in the
2751    man page.
2753 ----------------------------------------------------------------------
2755 7.7  Are you flipping pages by accident when moving the mouse close to
2756      the border of the screen?
2758    You can disable page flipping with the EdgeScroll command:
2760      EdgeScroll 0 0
2762    in your config turns it off.
2764 ----------------------------------------------------------------------
2766 7.8  Lining up your windows and icons.
2768    The SnapAttraction and SnapGrid commands really help to keep your
2769    desktop tidy.  With SnapAttraction windows (or icons or both) are
2770    'attracted' to each other.  When you drag a window (icon) and it
2771    comes close to another window (icon) it clings to it without a gap
2772    between the borders.  Put this command in your config:
2774      SnapAttraction 8 SameType
2776    This means windows cling to other windows if they get closer than
2777    8 pixels and icons cling to icons.  Or if you just want it for
2778    windows/icons use
2780      SnapAttraction 8 Windows
2782    or
2784      SnapAttraction 8 Icons
2786    Or if you want icons to cling to windows and vice versa:
2788      SnapAttraction 8 All
2791    The SnapGrid command is a big help too:
2793      SnapGrid 8
2795    in your config tells fvwm to use a grid of 8 pixels to place
2796    windows and icons.  Try it and see if you like it.
2798    Hint: It might be a good idea to use a divisor of your desktop
2799    width and height for SnapGrid.
2801 ----------------------------------------------------------------------
2803 7.9  Moving the mouse/focus/page with the keyboard.
2805    Try these key bindings for mouse movement:
2807      # shift-<direction> to move a few pixels
2808      Key   Left   A   S   CursorMove -1 0
2809      Key   Right  A   S   CursorMove +1 +0
2810      Key   Up     A   S   CursorMove +0 -1
2811      Key   Down   A   S   CursorMove +0 +1
2813      # shift-meta-<direction> to move 1/4 page
2814      Key   Left   A   SM  Scroll -25 +0
2815      Key   Right  A   SM  Scroll +25 +0
2816      Key   Up     A   SM  Scroll +0  -25
2817      Key   Down   A   SM  Scroll +0  +25
2819    or these to flip pages
2821      # shift-control-<direction> to move a full page
2822      Key   Left   A   SC  CursorMove -10 +0
2823      Key   Right  A   SC  CursorMove +10 +0
2824      Key   Up     A   SC  CursorMove +0  -10
2825      Key   Down   A   SC  CursorMove +0  +10
2827      # Alt-Fn to go to a specific page (like on the Linux console)
2828      Key F1 A M GotoPage 0 0
2829      Key F2 A M GotoPage 1 0
2830      Key F3 A M GotoPage 0 1
2831      Key F4 A M GotoPage 1 1
2833    or to change the focus to a window in a specific direction:
2835      # number keys on keypad to move the focus
2836      Key KP_1 A C Direction SouthWest (AcceptsFocus) Focus
2837      Key KP_2 A C Direction South (AcceptsFocus) Focus
2838      Key KP_3 A C Direction SouthEast (AcceptsFocus) Focus
2839      Key KP_4 A C Direction West (AcceptsFocus) Focus
2840      Key KP_6 A C Direction East (AcceptsFocus) Focus
2841      Key KP_7 A C Direction NorthWest (AcceptsFocus) Focus
2842      Key KP_8 A C Direction North (AcceptsFocus) Focus
2843      Key KP_9 A C Direction NorthEast (AcceptsFocus) Focus
2845 ----------------------------------------------------------------------
2847 7.10  The cat safe desktop ^_^
2849    If your cats keep stepping on your keyboard while you are brewing
2850    another cup of coffee, one of these hints may help:
2852      Use 'Style * MouseFocus' and move the mouse pointer over the
2853      background when you go away.
2855      If you can't do without your 'SloppyFocus' you can move the
2856      mouse pointer into a window that takes no keyboard input and
2857      give it the focus (e.g. FvwmButtons or a console message
2858      window).  A true fanatic creates a separate window with a picture
2859      of his cat for this ^_^
2861 ----------------------------------------------------------------------
2863 7.11  Lowering and moving windows.
2865    In some configurations moving a window with the middle mouse
2866    button lowers the window after moving it.  Lowering it before
2867    moving gives you a nice visual effect:
2869      Mouse  2 T A  Function MoveOrLower
2871      DestroyFunc MoveOrLower
2872      AddToFunc MoveOrLower
2873       + C   Lower
2874       + M   Lower
2875       + M   Move
2876       + D   Lower
2878 ----------------------------------------------------------------------
2880 7.12  Toggling windows on and off.
2882    It is often desirable to have a menu item or perhaps a button in
2883    FvwmButtons or FvwmWharf that launches an application when used
2884    the first time and closes it if used a second time.  Although it
2885    is not obvious how to do this, it is possible.  Let's assume you
2886    need a menu item that toggles an FvwmConsole window on and off.
2888    Then put the following lines in your config (for fvwm-2.5.11 or
2889    later):
2891      DestroyFync ToggleFvwmConsole
2892      AddToFunc ToggleFvwmConsole
2893      + I ToggleWindow FvwmConsole "Module FvwmConsole"
2895      # Application toggling function
2896      # First argument is the window name, second argument is the
2897      # command to start the application.
2898      DestroyFunc ToggleWindow
2899      AddToFunc ToggleWindow
2900      + I None ($$0, CirculateHit) $$1
2901      + I TestRc (Match) Break
2902      + I Next (currentpage, visible, !iconic, $$0, CirculateHit) Close
2903      + I TestRc (Match) Break
2904      + I Next ($$0, CirculateHit) Function MakeVisible
2906      # Helper function
2907      DestroyFunc MakeVisible
2908      AddToFunc MakeVisible
2909      + I MoveToDesk
2910      + I MoveToPage
2911      + I MoveToScreen
2912      + I Raise
2913      + I Iconify off
2914      + I WindowShade off
2916    To invoke the function, you can add it to a menu
2918      AddToMenu <some menu>
2919      + "toggle FvwmConsole" Function ToggleFvwmConsole
2921    Or if you prefer a button in the button bar:
2923      *FvwmButtons: (Action ToggleFvwmConsole)
2925    The lines with MoveToDesk, MoveToPage and Raise will bring the
2926    window to the top of the current page if it is not visible
2927    instead of closing it.  The generic function ToggleWindow can be
2928    reused to toggle all kinds of windows.
2930    If you want to toggle one specific window, e.g. an xterm, but
2931    still want to have other xterms that are not toggled, you must
2932    give the window an unique name:
2934      DestroyFunc RunXMessages
2935      AddToFunc RunXMessages
2936      + I Exec exec xterm -T XMessages -n XMessages \
2937          -e tail -f /var/adm/?* ~/.X.err
2939      DestroyFunc ToggleXMessages
2940      AddToFunc ToggleXMessages
2941      + I ToggleWindow XMessages RunXMessages
2943    Keep in mind that these functions simply check if a window with
2944    the specified name exists.  They will happily close manually
2945    opened windows or launch an application multiple times if the
2946    application is slow to start (e.g. like netscape).
2948    For fvwm-2.5.10 or earlier, these functions should work too:
2950      DestroyFunc ToggleFvwmConsole
2951      AddToFunc ToggleFvwmConsole
2952      + I None (FvwmConsole, CirculateHit) FvwmConsole
2953      + I Next (FvwmConsole, CirculateHit, CurrentPage, Visible) Close
2954      + I Next (FvwmConsole, CirculateHit) MoveToDesk
2955      + I Next (FvwmConsole, CirculateHit) MoveToPage
2956      + I Next (FvwmConsole, CirculateHit) Raise
2958      DestroyFunc ToggleXMessages
2959      AddToFunc ToggleXMessages
2960      + I None (XMessages, CirculateHit) Exec exec \
2961        xterm -T XMessages -n XMessages -e tail -f /var/adm/?* ~/.X.err
2962      + I Next (XMessages, CirculateHit) Close
2964 ----------------------------------------------------------------------
2966 7.13  Starting applications by clicking on an icon (also known as
2967       "docking" applications).
2969    Normally an icon represents a minimized application.  If you
2970    want to turn that around, and launch applications by clicking
2971    on icons we can't stop you.  Heres a way to do that using
2972    FvwmButtons:
2974      # FvwmButtons icon launcher:
2975      DestroyFunc Launcher
2976      AddToFunc Launcher
2977      + I DestroyModuleConfig $0Launch: *
2978      + I *$0Launch: Geometry 64x68
2979      + I *$0Launch: Columns 1
2980      + I *$0Launch: Rows    4
2981      + I *$0Launch: Frame   0
2982      + I *$0Launch: (1x3+0+0, Icon $1, Action (Mouse 1) `Exec $2`)
2983      + I *$0Launch: Pixmap none
2984      + I *$0Launch: (1x1+0+3, Font 9x15, Fore White, Back DarkBlue, \
2985                     Title $0, Action (Mouse 1) `Exec $2`)
2986      + I Style $0Launch HandleWidth 0, NoTitle
2987      + I Module FvwmButtons $3 $0Launch
2988      # Examples:
2989      Launcher RXVT xterm.xpm "rxvt -bg black" "-g +0+0"
2990      Launcher XV   xv.xpm    "xv"   "-g +0+100"
2992    Also, GNOME and KDE have desktop icon applications gmc and kfm,
2993    which enable this functionality.  These applications may be run
2994    under fvwm. Nautilus (version >= 2) and kdesktop may be run under
2995    fvwm version 2.5.1 or better.
2997 ----------------------------------------------------------------------
2999 7.14  Positioning a window using arithmetic.
3001    This example shows how to center a window on the screen.  Note
3002    how is uses PipeRead and the shell construct $(()) in order to
3003    perform arithmetic.
3005      DestroyFunc CenterWindow
3006      AddToFunc   CenterWindow
3007      + I ThisWindow Piperead "echo Move \
3008        +$(( $[vp.width]/2-$[w.width]/2 ))p \
3009        +$(( $[vp.height]/2-$[w.height]/2 ))p"
3011    If you had a window named "MyWindow" you would center it using
3012    the command:
3014    Next (MyWindow) CenterWindow
3016    ThisWindow may be removed, it is only needed to avoid errors when
3017    CenterWindow is called without a window context.  (In which case
3018    see the Pick command.)
3020    With fvwm release 2.5.11, you can place windows in the center of
3021    the screen using "Style X CenterPlacement".
3023    But with fvwm release 2.5.22 and greater CenterPlacement is
3024    deprecated over the use of PositionPlacement style which allows for
3025    not only centering windows, but positioning windows anywhere on the
3026    screen using the same arguments as the Move command.  But in terms of
3027    centering windows:
3029       Style MyWindow PositionPlacement Center
3031 ----------------------------------------------------------------------
3033 7.15  Hiding the mouse pointer.
3035    Some users don't like the mouse pointer getting in the way of
3036    what they are looking at.  You might want to search for and
3037    install the "unclutter" program.  Unclutter hides the mouse
3038    pointer after you haven't moved the mouse for a while.
3040    If you find unclutter causes the pointer to flash on and off
3041    or move around on its own, run unclutter with the -noevents
3042    argument.
3044 ----------------------------------------------------------------------
3046 7.16  Finding the mouse pointer.
3048    Sometimes its hard to see the mouse pointer.  Here is a way to
3049    find it:
3051      Key Super_L A A Exec xmessage -name "SmallBlob" -bg red \
3052        -fg white -nearmouse -timeout 1 'I am here!'
3053      Style SmallBlob UsePPosition, NoTitle, NoHandles, BorderWidth 10
3055 ----------------------------------------------------------------------
3057 7.17  Autohiding FvwmButtons or other windows.
3059    Some applications have a feature usually called "autohiding"
3060    which allows to withdraw a window to a location where it does
3061    not use precious desktop space.  It is possible to write some
3062    small functions in fvwm that can hide any window you like:
3064    fvwm-2.5.11 or later:
3066      # The autohiding functions
3067      DestroyFunc autohide
3068      AddToFunc autohide
3069      + I ThisWindow ($0) Deschedule $[w.id]
3070      + I ThisWindow ($0) KeepRc ThisWindow (shaded) WindowShade off
3071      + I TestRc (!Match) All ($0, !shaded) autohide_hide $1 $2
3073      DestroyFunc autohide_hide
3074      AddToFunc autohide_hide
3075      + I Schedule $0 $[w.id] WindowShade $1
3076      + I Schedule $0 $[w.id] Deschedule $[w.id]
3078      # Start FvwmAuto
3079      AddToFunc StartFunction
3080      + I Module FvwmAuto 1 -menter enter_handler
3082      # Add the windows you want to autohide
3083      DestroyFunc enter_handler
3084      AddToFunc enter_handler
3085      + I autohide FvwmButtons 500 S
3086      #            ^           ^   ^
3087      #            |           |   |___  Shade direction (optional)
3088      #            |           |_______  Hide delay (milliseconds)
3089      #            |___________________  Unique window name/resource
3091    Simply add any windows you like to the enter_handler function
3092    as in the example above.  The autohide function is called with
3093    two or three parameters.  The first one is the window's name or
3094    class, which must be unique.  The second is the delay in
3095    milliseconds before the window is hidden after the pointer
3096    leaves it, and the last - optional - one indicates the
3097    direction in which it is hidden (N, S, E, W, NW, NE, SW or SE).
3099    You can find a slightly more complicated version below.  The
3100    difference is that showing the window does not happen
3101    immediately, but can be delayed too.
3103    fvwm-2.5.11 or later:
3105      DestroyFunc autohide
3106      AddToFunc autohide
3107      + I ThisWindow ($0) Deschedule $[w.id]
3108      + I TestRc (!Match) Deschedule -$[w.id]
3109      + I ThisWindow ($0) KeepRc ThisWindow (shaded) \
3110          autohide_show $1 $3
3111      + I TestRc (!Match) All ($0, !shaded) autohide_hide $2 $3
3113      DestroyFunc autohide_show
3114      AddToFunc autohide_show
3115      + I Schedule $0 -$[w.id] WindowShade $1 off
3116      + I Schedule $0 -$[w.id] Deschedule $[w.id]
3117      + I Schedule $0 -$[w.id] Deschedule -$[w.id]
3119      DestroyFunc autohide_hide
3120      AddToFunc autohide_hide
3121      + I Schedule $0 $[w.id] WindowShade $1 on
3122      + I Schedule $0 $[w.id] Deschedule $[w.id]
3123      + I Schedule $0 $[w.id] Deschedule -$[w.id]
3125      AddToFunc StartFunction
3126      + I Module FvwmAuto 1 -menter enter_handler
3128      DestroyFunc enter_handler
3129      AddToFunc enter_handler
3130      + I autohide FvwmButtons 250 500 S
3131      #            ^           ^   ^   ^
3132      #            |           |   |   |__  Shade direction (optional)
3133      #            |           |   |______  Hide delay
3134      #            |           |__________  Show delay
3135      #            |______________________  Unique window name/resource
3137    These functions work too in 2.5.8 to 2.5.10, but you may have
3138    to remove the KeepRc command from the autohide function in both
3139    versions.
3141 ----------------------------------------------------------------------
3143 7.18  Using application screenshots as icon or mini icon
3144       thumbnails.
3146    With a bit of scripting magic, fvwm can take a screenshot of an
3147    application window when it's iconified, resize it, and use it as
3148    the application's icon.  However, there are some applications that
3149    can do it on their own, which is the recommended method.
3151    With xterm, you can use the +ai (active icon) option on the command
3152    line:
3154      $ xterm +ai
3156    There is a live-icon elisp package for XEmacs.  Put this in your
3157    XEmacs configuration file:
3159      (load-library "live-icon")
3160      ; Control size, same as max icon size, uncomment if you want
3161      ; this feature.
3162      ;(setq live-icon-max-height 48)
3163      ;(setq live-icon-max-width 48)
3165    Make sure you are not using the style IconOverride for these
3166    applications.  It disables the use of active icons.  There may be
3167    other applications with similar features.
3170    Assuming you want application thumbnails as icons provided by fvwm,
3171    you need fvwm 2.5.8 or later, as this solution requires the
3172    WindowStyle command, and you should have the ImageMagick utilities
3173    available in your $PATH <URL:http://www.imagemagick.org/>.
3175    The function below provides a Replacement for the Iconify command
3176    called Thumbnail, which you can use in your bindings and raises
3177    each window, takes a screenshot and attempts to set the screenshot
3178    as the window's Icon.  Taking a screenshot may take a couple of
3179    seconds.  The window is iconified immediately, but the new
3180    thumbnail is activated when the screenshot is ready.
3182    Note that a screenshot can only be made reliably from the visible
3183    parts of a window.  So if the window is halfway off screen, on a
3184    different desk, or buried beneath other windows, the thumbnail may
3185    be smaller than expected or be empty in the hidden parts.  There is
3186    no way to prevent this.
3188    The same solution should work for mini icons.  Just replace the
3189    word "icon" with "miniicon" everywhere.
3191      DestroyFunc Thumbnail
3192      AddToFunc Thumbnail
3193      + I Raise
3194      + I ThisWindow (!Shaded, Iconifiable, !Iconic) PipeRead \
3195          "xwd -silent -id $[w.id] | convert -scale 64 -frame 1x1 \
3196          -mattecolor black -quality 0 xwd:- \
3197          png:$[FVWM_USERDIR]/icon.tmp.$[w.id].png \
3198          && echo WindowStyle IconOverride, \
3199          Icon $[FVWM_USERDIR]/icon.tmp.$[w.id].png \
3200          || echo Nop"
3201      + I Iconify
3203    You can use FvwmEvent to remove the Icons when each window is
3204    returned to its non Iconic state.
3206      DestroyFunc DeThumbnail
3207      AddToFunc DeThumbnail
3208      + I Exec rm -f $[FVWM_USERDIR]/icon.tmp.$[w.id].png
3209      + I DestroyWindowStyle
3211      *FvwmEvent: deiconify DeThumbnail
3213      AddToFunc StartFunction I Module FvwmEvent
3215    If you cannot use DestroyWindowStyle as you require it for some
3216    other purpose, you can save the window's current Icon, and restore
3217    it when required, this solution requires fvwm 2.5.9 or later.
3219    The Thumbnail function should look like this:
3221      DestroyFunc Thumbnail
3222      AddToFunc Thumbnail
3223      + I Raise
3224      + I SetEnv Icon-$[w.id] $[w.iconfile]
3225      + I ThisWindow (!Shaded, Iconifiable, !Iconic) PipeRead \
3226          "xwd -silent -id $[w.id] | convert -scale 64 -frame 1x1 \
3227          -mattecolor black -quality 0 xwd:- \
3228          png:$[FVWM_USERDIR]/icon.tmp.$[w.id].png \
3229          && echo WindowStyle IconOverride, \
3230          Icon $[FVWM_USERDIR]/icon.tmp.$[w.id].png \
3231          || echo Nop"
3232      + I Iconify
3234    And then the Icon is restored with this function:
3236      DestroyFunc DeThumbnail
3237      AddToFunc DeThumbnail
3238      + I PipeRead "echo WindowStyle Icon \\$\\[Icon-$[w.id]\\]"
3239      + I UnsetEnv Icon-$[w.id]
3240      + I Exec rm -f $[FVWM_USERDIR]/icon.tmp.$[w.id].png
3242    These Icons can also survive a Restart by adding this check to your
3243    StartFunction:
3245      AddToFunc StartFunction I Test (Restart) All (Iconic) \
3246        Test (f $[FVWM_USERDIR]/icon.tmp.$[w.id].png) WindowStyle \
3247        IconOverride, Icon $[FVWM_USERDIR]/icon.tmp.$[w.id].png
3249    You can also check for any remaining icons left behind and remove
3250    them in your ExitFunction:
3252      DestroyFunc ExitFunction
3253      AddToFunc ExitFunction I Test (!ToRestart) \
3254        Exec rm -f $[FVWM_USERDIR]/icon.tmp.*
3256    The same solution should work for mini icons.  Just replace the
3257    word "icon" with "miniicon" everywhere.
3259 ----------------------------------------------------------------------