Cull unused functions when compiling against librplay.
[fvwm.git] / modules / FvwmButtons / FvwmButtons.1.in
blob9e906a79c9c2675d6a85eb561cf5bf2804058fb9
1 .\" @(#)@PACKAGE@-@VERSION@ @RELDATELONG@
2 .TH FvwmButtons 1 "@RELDATELONG@ (@VERSION@)" Fvwm "Fvwm Modules"
3 .UC
4 .SH NAME
5 FvwmButtons \- the fvwm buttonbox module
6 .SH SYNOPSIS
7 .nf
8 Module FvwmButtons [-g geometry] [-transient | -transientpanel] [name[configfile]]
9 .fi
11 \fIFvwmButtons\fP can only be invoked by fvwm.
12 Command line invocation of the \fIFvwmButtons\fP module will not work.
14 .SH DESCRIPTION
15 The FvwmButtons module provides a window of buttons which sits on
16 the X terminal's root window. The user can press the buttons at
17 any time, and trigger invocation of a user-specified command by
18 the window manager. FvwmButtons only works when fvwm is used as
19 the window manager.
21 The buttonbox can be of any configuration or geometry, and can
22 have monochrome or color icons to represent the actions which
23 would be invoked.  Even other applications can be 'swallowed' by
24 the button bar.
26 Panels that are opened on a button press are available too.  See
27 .I "CREATING PANELS"
28 section for details.
30 .SH OPTIONS
32 The
33 .I -g
34 option specifies the geometry of the main window. The command line
35 option takes precedence over any other geometry settings in the
36 configuration file.
38 The
39 .I -transient
40 option tells FvwmButtons to terminate itself after the first key
41 or button press has been received (presses to open a sub panel do
42 not count) or a sub panel has been closed or respawned. This is
43 especially useful for sub panels where you want to select a single
44 button and have it closed automatically.  It could be used to
45 create two-dimensional graphical menus.  Since
46 .I -transient
47 is an option, not a configuration setting you can use the same
48 configuration for transient and non transient button bars.
50 The
51 .I -transientpanel
52 option does roughly the same as the
53 .I -transient
54 option, but instead of closing the whole button bar, the window is
55 merely hidden.  This is very useful if the button bar is started
56 as a subpanel of another button bar because it avoids that it must
57 be started again when something is selected.
59 .SH INVOCATION
61 FvwmButtons is spawned by fvwm, so command line invocation will not work.
63 FvwmButtons can be invoked by inserting the line 'Module
64 FvwmButtons OptionalName' in the .fvwm2rc file. This should be
65 placed in the StartFunction if FvwmButtons is to be spawned during
66 fvwm's initialization. This can be bound to a menu or mouse button
67 or keystroke to invoke it later.
69 When invoked with the \fIOptionalName\fP argument, the
70 \fIOptionalName\fP is used to find configuration commands.  For
71 example:
72 .nf
73 .sp
74 AddToFunc StartFunction Module FvwmButtons MyButtonBox
75 .sp
76 .fi
77 FvwmButtons will then use only the lines
78 starting with "*MyButtonBox", instead of the default "*FvwmButtons".
80 .SH CONFIGURATION OPTIONS
81 The following commands are understood by FvwmButtons:
83 .IP "*FvwmButtons: Back \fIcolor\fP"
84 Specifies the background color for the buttons. The relief and shadow color
85 are calculated from the background color.
87 .IP "*FvwmButtons: BoxSize \fIalgorithm\fP"
88 This option specifies how serious FvwmButtons takes the Rows and Columns
89 options (see below). It can be one of
90 .IR dumb ", " fixed " or " smart .
93 .I fixed
94 is used and both Rows and Columns are specified and non-zero,
95 FvwmButtons uses exactly the number of rows and columns specified.
96 If the box is too small to accommodate all buttons the module will
97 fail.
100 .I smart
101 is used FvwmButtons enlarges the box so all buttons have a chance
102 to fit. The number of columns is increased to at least the width
103 of the widest button and new rows are added until all buttons are
104 placed. For the best tolerance of configuration errors use the
105 smart option.
107 .I dumb
108 is neither
109 .I fixed
111 .I smart.
112 This is the default.
114 .IP "*FvwmButtons: Colorset \fIcolorset\fP"
115 Tells the module to use colorset \fIcolorset\fP for the window
116 background.  Refer to the FvwmTheme man page
117 for details about colorsets.
119 .IP "*FvwmButtons: ActiveColorset \fIcolorset\fP"
120 Tells the module to use colorset \fIcolorset\fP for the background
121 color/image and/or title color of a button when the mouse is hovering
122 above a button.
124 .IP "*FvwmButtons: PressColorset \fIcolorset\fP"
125 Tells the module to use colorset \fIcolorset\fP for the background
126 color/image and/or title color of a button when it is pressed.
128 .IP "*FvwmButtons: Columns \fIcolumns\fP"
129 Specifies the number of columns of buttons to be created. If
130 unspecified, the number of columns is set to the number of buttons
131 requested, divided by the number of rows. If both the rows and
132 columns are specified, but the number of buttons is more than the
133 rows and columns allow for, the columns specification is ignored
134 unless the \fIBoxSize\fP option is \fIfixed\fP.
136 .IP "*FvwmButtons: File \fIfilename\fP"
137 Specifies that the configuration for this button is found in the
138 file \fIfilename\fP. \fIFilename\fP can be a full pathname, or is
139 assumed to be in fvwm's startup directory. The configuration file
140 is in the same format as fvwm's configuration file, but each line
141 is read as if prefixed by "*FvwmButtons". Comments are given by
142 starting a line with "#". Line continuation is done by ending a
143 line with a "\\".
145 .IP "*FvwmButtons: Font \fIfont\fP"
146 Specifies the font to be used for labeling the buttons, or
147 \fINone\fP.
149 .IP "*FvwmButtons: Fore \fIcolor\fP"
150 Specifies the color used for button label text and monochrome
151 icons.
153 .IP "*FvwmButtons: Frame \fIwidth\fP"
154 Specifies the width of the relief around each button. If this is a
155 negative number, the relief is inverted. This makes the button
156 sunken normally and raised when activated.
158 .IP "*FvwmButtons: Geometry \fIgeometry\fP"
159 Specifies the FvwmButtons window location and size.  The geometry
160 is a standard X11 window geometry specification.
162 .IP "*FvwmButtons: ButtonGeometry \fIgeometry\fP"
163 This option works like the \fIGeometry\fP option except that the
164 size is the size of a single button.  The size of the whole
165 FvwmButtons window is calculated by multiplying the button
166 dimension by the number of rows and columns.
168 .IP "*FvwmButtons: Padding \fIwidth height\fP"
169 This option specifies the default horizontal padding to be
170 \fIwidth\fP pixels, and the vertical padding to be \fIheight\fP
171 pixels. The amount of free space between the relief of the button
172 and its contents is normally 2 pixels on the sides and 4 pixels
173 above and below, except for swallowed windows and containers,
174 which are not padded at all, unless this option is used.
176 .IP "*FvwmButtons: Pixmap \fIpixmapfile\fP"
177 Specifies a background pixmap to use.  Specify "none" (without the
178 double quotes) for a transparent background.
180 .IP "*FvwmButtons: Rows \fIrows\fP"
181 Specifies the number of rows of buttons to be created. The default
182 is 2 rows.
184 .IP "*FvwmButtons: (\fIoptions\fP) [\fItitle icon command\fP]"
185 Specifies the contents of a button in the buttonbox. The following
186 \fIoptions\fP, separated by commas or whitespace, can be given a
187 button:
188 .\" Start relative indent:
190 .IP "\fIgeometry\fP"
191 Specifies the size and position of the button within the
192 FvwmButtons window or container. The geometry is a standard X11
193 window geometry specification. The button is \fIwidth\fP times the
194 normal button width and \fIheight\fP times the normal button
195 height. If values for \fIx\fP and \fIy\fP are given, the button is
196 placed x (y) button units from the left (top) of the container if
197 x (y) is positive and x (y) units from the right (bottom) if x (y)
198 is negative. Buttons with position arguments (x and y) are placed
199 before those without them. If two or more buttons are forced to
200 overlap by this, FvwmButtons exits with an error message.
202 .IP "Action [(\fIoptions\fP)] \fIcommand\fP"
203 Specifies an fvwm command to be executed when the button is
204 activated by pressing return or a mouse button. The \fIcommand\fP
205 needs to be quoted if it contains a comma or a closing
206 parenthesis.
208 The current options of the \fIAction\fP are: Mouse \fIn\fP - this
209 action is only executed for mouse button \fIn\fP. One action can
210 be defined for each mouse button, in addition to the general
211 action.
213 In the \fIcommand\fP part, you can use a number of predefined
214 variables: \fI$left\fP, \fI$right\fP, \fI$top\fP and \fI$bottom\fP
215 are substituted by the left, right, top and bottom coordinates of
216 the button pressed. \fI$-left\fP, \fI$-right\fP, \fI$-top\fP and
217 \fI$-bottom\fP are substituted likewise, but the coordinates are
218 calculated from the bottom or the right edge of the screen instead
219 (for a button that is 5 pixels away from the right screen border,
220 $-right will be 5). \fI$width\fP and \fI$height\fP are replaced by
221 the width or height of the button. The variables \fI$fg\fP and
222 \fI$bg\fP are replaced with the name of the foreground or
223 background color set with the \fIBack\fP or \fIFore\fP option (see
224 below). All this is done regardless of any quoting characters. To
225 get a literal '$' use the string '$$'.
227 Example:
231   *FvwmButtons: (Title xload, Action (Mouse 1) \\
232     `Exec exec xload -fg $fg -bg $bg -geometry -3000-3000`)
236 Note: With fvwm versions prior to 2.5.0, actions could not be
237 assigned to a button that swallowed an application window (see
238 \fISwallow\fP option).  Such actions worked only when the border
239 around the button was clicked.  This is now possible, but to get
240 back the old behavior, the \fIActionIgnoresClientWindow\fP can be
241 used on the button:
245   *FvwmButtons: (Action beep, ActionIgnoresClientWindow, \\
246      Swallow xeyes "Exec exec xeyes")
250 In this example, the action is only executed when you click on the
251 border of the button or the transparent part of the xeyes window,
252 but not on the xeyes window itself.
254 .IP "ActionIgnoresClientWindow"
255 See the note in the description of \fIAction\fP above.
257 .IP "ActionOnPress"
258 Usually the action is executed on the button release except for
259 the \fBPopup\fP action.  This option changes this behavior, the
260 action is executed on the button press.  This may be good, for
261 example, with \fBMenu\fP or \fBSendToModule\fP that generates
262 popups, or when \fBFrame\fP is 0 and the button would look
263 unresponsive otherwise.
265 .IP "Back \fIcolor\fP"
266 Specifies the background color to be used drawing this box. A
267 relief color and a shadow color are calculated from this.
269 .IP "Center"
270 The contents of the button is centered on the button. This is the
271 default but may be changed by \fILeft\fP or \fIRight\fP.
273 .IP "Top"
274 The contents of the button is vertically aligned at the top of the 
275 button. The default is to vertically center it.
277 .IP "Colorset \fIcolorset\fP"
278 The given colorset can be applied to a container, a swallowed
279 application and a simple button.  To apply it to a button or
280 container, simply put the option in a line with a button or
281 container description.  Drawing backgrounds for individual buttons
282 and containers with colorsets requires a lot of communication with
283 the X server.  So if you are not content with the drawing speed of
284 dozens of buttons with colorset backgrounds, do not use colorsets
285 here.  Setting colorsets as the background of swallowed
286 applications does not have this restriction but depends entirely
287 on the swallowed application.  It may work as you wish, but since
288 it involves fiddling with other applications' windows there is no
289 guarantee for anything.  I have tested three applications: xosview
290 works nicely with a colorset background, xload works only with a
291 VGradient or solid background and an analog xclock leaves a trail
292 painted in the background color after its hands.
294 If the swallowed window is an fvwm module (see the (No)FvwmModule
295 option to Swallow), then the
296 .I colorset
297 is not applied to the swallowed module. You should use the
298 .I colorset
299 in the module configuration. If the swallowed module has a
300 transparent colorset background, then the FvwmButtons background
301 (and not the button colorset) is seen by transparency of the
302 background of the swallowed module. Refer to the man page of the
303 FvwmTheme module for details about colorsets.
305 .IP "ActiveColorset \fIcolorset\fP"
306 Use colorset \fIcolorset\fP for the background color/image and/or title
307 color of the button when the mouse is hovering above it.
309 .IP "PressColorset \fIcolorset\fP"
310 Use colorset \fIcolorset\fP for the background color/image and/or title
311 color of the button when it is pressed.
313 .IP "Container [(\fIoptions\fP)]"
314 Specifies that this button will contain a miniature buttonbox,
315 equivalent to swallowing another FvwmButtons module. The options
316 are the same as can be given for a single button, but they affect
317 all the contained buttons. Options available for this use are
318 \fIBack, Font, Fore, Frame\fP and \fIPadding\fP. Flags for Title
319 and Swallow options can be set with \fITitle(flags)\fP and
320 \fISwallow(flags)\fP. You should also specify either "Columns
321 \fIwidth\fP" or "Rows \fIheight\fP", or "Rows 2" will be
322 assumed. For an example, see the \fISample configuration\fP
323 section.
325 The container button itself (separate from the contents) can take
326 format options like \fIFrame\fP and \fIPadding\fP, and commands
327 can be bound to it. This means you can make a sensitive relief
328 around a container, like
331   *FvwmButtons: (2x2, Frame 5, Padding 2 2, Action Beep,\\
332       Container(Frame 1))
335 Typically you will want to at least give the container a size
336 setting \fIwidth\fPx\fIheight\fP.
338 .IP "End"
339 Specifies that no more buttons are defined for the current
340 container, and further buttons will be put in the container's
341 parent. This option should be given on a line by itself, i.e
344   *FvwmButtons: (End)
348 .IP "Font \fIfontname\fP"
349 Specifies that the font \fIfontname\fP is to be used for labeling
350 this button.
352 .IP "Fore \fIcolor\fP"
353 Specifies the foregound color of the title and monochrome icons in
354 this button.
356 .IP "Frame \fIwidth\fP"
357 The relief of the button will be \fIwidth\fP pixels wide. If
358 \fIwidth\fP is given as a negative number, the relief is
359 inverted. This makes the button sunken normally and raised when
360 activated.
362 .IP "Icon \fIfilename\fP"
363 The name of an image file, containing the icon to display on the button.
364 FvwmButtons searches through the path specified in the fvwm ImagePath
365 configuration item to find the icon file.
367 .IP "ActiveIcon \fIfilename\fP"
368 The name of an image file, containing an alternative icon to display
369 on the button when the mouse is hovering above the button. If no
370 ActiveIcon is specified, the image specified by Icon is displayed
371 (if there is one).
373 .IP "PressIcon \fIfilename\fP"
374 The name of an image file, containing an alternative icon to display
375 on the button when the button is pressed. If no PressIcon is specified,
376 the image specified by Icon is displayed (if there is one).
378 .IP "Id \fIid\fP"
379 The id to be used to identify this button.
380 The first character of the id should be alphabetic.
381 See also the "DYNAMICAL ACTIONS" section.
383 .IP "Left"
384 The contents of the button are aligned to the left. The default is
385 to center the contents on the button.
387 .IP "NoSize"
388 This option specifies that this button will not be considered at
389 all when making the initial calculations of button sizes. Useful
390 for the odd button that gets just a couple of pixels too large to
391 keep in line, and therefor blows up your whole buttonbox. "NoSize"
392 is equivalent to "Size 0 0".
394 .IP "Padding \fIwidth height\fP"
395 The amount of free space between the relief of the button and its
396 contents is normally 2 pixels to the sides and 4 pixels above and
397 below, except for swallowed windows and containers, which are by
398 default not padded at all. This option sets the horizontal padding
399 to \fIwidth\fP and the vertical padding to \fIheight\fP.
401 .IP "Panel [ (\fIoptions\fP) ] \fIhangon\fP \fIcommand\fP"
402 Panels can be swallowed exactly like windows are swallowed by
403 buttons with the \fISwallow\fP command below, but they are not
404 displayed within the button.  Instead they are hidden until the
405 user presses the panel's button.  Then the panel (the window of
406 the swallowed application) opens with a sliding animation.  The
407 \fIoptions\fP can be any of the \fIflags\fP described for the
408 Swallow command.  In addition a direction 'left', 'right', 'up'
409 or 'down' can be used to specify the sliding direction.
411 .\" dje: Looks like there should be another indent here...
412 The \fIsteps animation-steps\fP option defines the number of
413 animation steps.
415 The \fIdelay ms\fP option sets the delay between the steps of the
416 animation in milliseconds.  Use zero for no delay. The maximum
417 delay is 10 seconds (10000). It doesn't make any sense to use the
418 delay option unless you also use the smooth option.
420 The \fIsmooth\fP option causes the panel  to  redraw  between the
421 steps of the animation.  The sliding animation may be smoother
422 this way, it depends on the application, and display speed.  The
423 application may appear to grow instead of sliding out.  The
424 animation may be slower.
427 .I Hints
428 option causes FvwmButtons to use the applications size hints to
429 calculate the size of the animation steps.
430 .I Hints
431 is the default.  If the number of steps is not what you want, try
432 using
433 .I NoHints.
436 .I noborder
437 option tells FvwmButtons to ignore the borders of the window when
438 calculating positions for the animation (equivalent to set noplr
439 and noptb in the position option).
441 With the \fIindicator\fP option set, FvwmButtons will draw a small
442 triangle in the button that will open a panel.  The triangle
443 points in the direction where the panel will pop up.  The
444 \fIindicator\fP keyword may be followed by a positive integer that
445 specifies the maximum width and height of the indicator.  Without
446 this size FvwmButtons will make the indicator fit the button. You
447 will probably want to use the \fIPadding\fP option to leave a few
448 pixels between the indicator and the frame of the button.
450 The \fIposition\fP option allows to place the panel. The syntax
454 position [\fIcontext-window\fP] [\fIpos\fP] [\fIx\fP \fIy\fP] [\fIborder-opts\fP]
457 .\" dje, even another indent to describe these suboptions.  4 indents is
458 .\" probably not a good idea.  Each is 1/2 inch by default...
459 The argument \fIcontext-window\fP can be one of: Button, Module or
460 Root. The  \fIcontext-window\fP is the window from which panel
461 percentage offsets are calculated. Button specifies the panel's
462 button, Module specifies FvwmButtons itself, and Root specifies a
463 virtual screen. The context-window together with the sliding
464 direction define a line segment which is one of the borders of the
465 context-window: the top/bottom/left/right border for sliding
466 up/down/left/right.
468 The \fIpos\fP argument can be one of: center, left or right (for
469 sliding up or a down) or top or bottom (for sliding left or
470 right). It defines the vertical (sliding up and down) or the
471 horizontal (sliding left and right) position of the Panel on the
472 line segment. For example, for a sliding up if you use a left pos,
473 then the left borders of the panel and of the context-window will
474 be aligned.
476 The offset values \fIx\fP and \fIy\fP specify how far the panel is
477 moved from it's default position. By default, the numeric value
478 given is interpreted as a percentage of the context window's width
479 (height). A trailing "p" changes the interpretation to mean
480 "pixels". All offset calculations are relative to the buttons
481 location, even when using a root context.
483 The \fIborder-opts\fP are: mlr, mtb, noplr and noptb. They define
484 which border widths are taken in account. By default, the borders
485 of FvwmButtons are not taken in account. mlr reverses this default
486 for the left and the right border and mtb reverses this default
487 for the top and the bottom border. Conversely, by default the
488 borders of the Panel are taken in account. noplr reverses this
489 default for the left and the right border and noptb reverses this
490 default for the top and the bottom border.
492 The defaults are sliding up with a delay of five milliseconds and
493 twelve animation steps. To post the panel without any animation,
494 set the number of steps to zero. The default position is 'Button
495 center'.
497 Please refer to the \fICREATING PANELS\fP section for further
498 information on panels.
500 Example:
503   # To include the panel in a button
504   *FvwmButtons: (Panel(down, delay 0, steps 16) \\
505     SubPanel "Module FvwmButtons SubPanel")
507   # To define the panel as an instance of
508   # FvwmButtons with a different name:
509   *SubPanel: (Icon my_lock.xpm, Action Exec xlock)
510   *SubPanel: (Icon my_move.xpm, Action Move)
511   ...
515 .IP "Right"
516 The contents of the button are aligned to the right. The default
517 is to center the contents on the button.
519 .IP "Size \fIwidth height\fP"
520 Specifies that the contents of this button require \fIwidth\fP by
521 \fIheight\fP pixels, regardless of what size FvwmButtons
522 calculates from the icon and the title. A button bar with only
523 swallowed windows will not get very large without this option
524 specified, as FvwmButtons does not consider sizes for swallowing
525 buttons. Note that this option gives the minimum space assured;
526 other buttons might require the buttonbox to use larger sizes.
528 .IP "Swallow [(\fIflags\fP)] \fIhangon\fP \fIcommand\fP"
529 Causes FvwmButtons to execute \fIcommand\fP, and when a window
530 with a name, class or resource matching \fIhangon\fP appears, it
531 is captured and swallowed into this button.  The \fIhangon\fP
532 string may contain wildcard characters ('*') that match any
533 substring.  Swallow replaces the variables \fI$fg\fP and \fI$bg\fP
534 as described above for the \fIAction\fP option (but if you use the
535 UseOld and NoClose options the application is not be restarted
536 when FvwmButtons is restarted and thus does not get the new
537 colors - if you changed them).  An example:
540   *FvwmButtons: (Swallow XClock 'Exec xclock -geometry -3000-3000 &')
543 takes the first window whose name, class, or resource is "XClock"
544 and displays it in the button.  If no matching window is found,
545 the "Exec" command creates one.  The argument "-geometry
546 -3000-3000" is used so that the window is first drawn out of sight
547 before its swallowed into FvwmButtons.
549 Modules can be swallowed by specifying the module instead of 'Exec
550 whatever', like:
553   *FvwmButtons: (Swallow "FvwmPager" "FvwmPager 0 0")
556 The flags that can be given to swallow are:
558 NoClose / Close -
559 Specifies whether the swallowed program in this button will be
560 un-swallowed or closed when FvwmButtons exits cleanly. "NoClose"
561 can be combined with "UseOld" to have windows survive a restart of
562 the window manager. The default setting is "Close".
564 NoHints / Hints -
565 Specifies whether hints from the swallowed program in this button
566 will be ignored or not, useful in forcing a window to resize
567 itself to fit its button. The default value is "Hints".
569 NoKill / Kill -
570 Specifies whether the swallowed program will be closed by killing
571 it or by sending a message to it. This can be useful in ending
572 programs that doesn't accept window manager protocol. The default
573 value is "NoKill". This has no effect if "NoClose" is specified.
575 NoRespawn / Respawn / SwallowNew -
576 Specifies whether the swallowed program is to be respawned
577 (restarted) if it dies. If "Respawn" is specified, the program is
578 respawned using the original \fIcommand\fP. Use this option with
579 care, the program might have a legitimate reason to die.  If
580 "SwallowNew" is given, the program is not respawned, but if a new
581 window with the specified name appears, it is swallowed.
583 NoOld / UseOld -
584 Specifies whether the button will try to swallow an existing
585 window matching the \fIhangon\fP name before spawning one itself
586 with \fIcommand\fP.  The \fIhangon\fP string may contain wildcard
587 characters ('*') that match any substring.The default value is
588 "NoOld". "UseOld" can be combined with "NoKill" to have windows
589 survive a restart of the window manager. If you want FvwmButtons
590 to swallow an old window, and not spawn one itself if failing, let
591 the \fIcommand\fP be "Nop":
594   *FvwmButtons: (Swallow (UseOld) "Console" Nop)
597 If you want to be able to start it yourself, combine it with an
598 action:
601   *FvwmButtons: (Swallow (UseOld) "Console" Nop, \\
602                Action `Exec "Console" console &`)
605 NoTitle / UseTitle -
606 Specifies whether the title of the button will be taken from the
607 swallowed window's title or not. If "UseTitle" is given, the title
608 on the button changes dynamically to reflect the window name. The
609 default is "NoTitle".
611 NoFvwmModule / FvwmModule -
612 By default, FvwmButtons treats the swallowed window as an fvwm
613 module window if the 4 first letters of the
614 .I command
615 is "Fvwm" or the 6 first letters of the
616 .I command
617 is "Module".
618 NoFvwmModule and FvwmModule override this logic.
620 .IP "Title [(\fIoptions\fP)] \fIname\fP"
621 Specifies the title to be written on the button. Whitespace can be
622 included in the title by quoting it. If a title at any time is too
623 long for its buttons, characters are chopped of one at a time
624 until it fits. If \fIjustify\fP is "Right", the head is removed,
625 otherwise its tail is removed. These \fIoptions\fP can be given to
626 Title:
628 Center - The title is centered horizontally. This is the default.
630 Left - The title is justified to the left side.
632 Right - The title is justified to the right side.
634 Side - Causes the title to appear on the right hand side of any
635 icon or swallowed window, instead of below which is the
636 default. If you use small icons, and combine this with the "Left"
637 or "Right" option, you can get a look similar to fvwm's menus.
639 .IP "ActiveTitle \fIname\fP"
640 Specifies the title to be written on the button when the mouse is
641 hovering above the button. If no ActiveTitle is specified, the text
642 specified by Title is displayed (if there is any).
644 .IP "PressTitle \fIname\fP"
645 Specifies the title to be written on the button when the button is
646 pressed. If no PressTitle is specified, the text specified by Title
647 is displayed (if there is any).
649 .IP "Legacy fields [\fItitle icon command\fP]"
650 These fields are kept for compatibility with previous versions of
651 FvwmButtons, and their use is discouraged. The \fItitle\fP field
652 is similar to the option Title \fIname\fP. If the title field is
653 "-", no title is displayed. The \fIicon\fP field is similar to the
654 option Icon \fIfilename\fP. If the icon field is "-" no icon is
655 displayed. The \fIcommand\fP field is similar to the option Action
656 \fIcommand\fP or alternatively Swallow "\fIhangon\fP"
657 \fIcommand\fP.
658 .IP "The \fIcommand\fP"
659 Any fvwm command is recognized by FvwmButtons. See fvwm(1) for
660 more information.
662 The Exec command has a small extension when used in Actions, its
663 syntax is:
666   Exec ["hangon"] command
669 Example:
672   *FvwmButtons: (Action Exec "xload" xload)
675 The hangon string must be enclosed in double quotes.  When
676 FvwmButtons finds such an Exec command, the button remains pushed
677 in until a window whose name, class or resource matches the quoted
678 portion of the command is encountered.  This is intended to
679 provide visual feedback to the user that the action he has
680 requested will be performed.  The hangon string may contain
681 wildcard characters ('*') that match any substring. If the quoted
682 portion contains no characters, then the button will pop out
683 immediately.  Note that users can continue pressing the button,
684 and re-executing the command, even when it looks pressed in.
686 .IP "Quoting"
687 Any string which contains whitespace must be quoted. Contrary to
688 earlier versions commands no longer need to be quoted. In this
689 case any quoting character will be passed on to the application
690 untouched. Only commas ',' and closing parentheses ')' have to be
691 quoted inside a command. Quoting can be done with any of the three
692 quotation characters; single quote:
694   'This is a "quote"',
696 double quote:
698   "It's another `quote'",
700 and back quote:
702   `This is a strange quote`.
704 The back quoting is unusual but used on purpose, if you use a
705 preprocessor like FvwmCpp and want it to get into your commands,
706 like this:
709   #define BG gray60
710   *FvwmButtons: (Swallow "xload" `Exec xload -bg BG &`)
713 Any single character can be quoted with a preceding
714 backslash '\\'.
716 .\" End relative indent
717 .SH CREATING PANELS
719 Former versions of FvwmButtons (fvwm 2.0.46 to 2.3.6) had a
720 different way of handling panels.  You can not use your old panel
721 configuration with the new panel feature.  Read "CONVERTING OLD
722 PANEL CONFIGURATIONS" for more information.
725 .SS HOW TO CREATE NEW PANELS
727 Any program that can be launched from within fvwm and that has a
728 window can be used as a panel.  A terminal window could be your
729 panel, or some application like xload or xosview or another fvwm
730 module, including FvwmButtons itself.  All you need to know is how
731 to start your application from fvwm.
733 The button that invokes the panel is as easily configured as any
734 other button.  Essentially you need nothing more than the
735 \fIPanel\fP option:
739 *FvwmButtons: (Panel my_first_panel \\
740   "Module FvwmButtons -g -30000-30000 my_first_panel")
741 *FvwmButtons: (Panel my_second_panel \\
742   "Exec exec xterm -g -30000-30000 -n my_second_panel")
746 This works like the \fISwallow\fP option.  The difference is that
747 the application is not put into the button when it starts up but
748 instead hidden from view.  When you press the button for the panel
749 the window slides into view.  The '-g -30000-30000' option tells
750 the application that it should be created somewhere very far to
751 the top and left of your visible screen.  Otherwise you would see
752 it flashing for a moment when FvwmButtons starts up.  Some
753 applications do not work well with this kind of syntax so you may
754 have to live with the short flashing of the window.  If you want
755 to make a panel from another instance of FvwmButtons you can do
756 so, but you must give it a different name ('my_first_panel' in
757 above example).  If you run FvwmButtons under the same name, new
758 panels are created recursively until your system runs out of
759 resources and FvwmButtons crashes! To configure a second button
760 bar with a different name, simply put '*new_name' in place of
761 '*FvwmButtons' in your configuration file.  If you are not
762 familiar with the \fISwallow\fP option or if you want to learn
763 more about how 'swallowing' panels works, refer to the description
764 of the \fISwallow\fP option.
766 Now that your panel basically works you will want to tune it a
767 bit.  You may not want a window title on the panel.  To disable
768 the title use the fvwm \fIStyle\fP command.  If your button bar is
769 'sticky' you may want to make the panel sticky too.  And probably
770 the panel window should have no icon in case it is iconified.
774 Style name_of_panel_window NoTitle, Sitcky, NoIcon
778 You may want your panel to stay open only until you select
779 something in it.  You can give FvwmButtons the
780 \fI-transientpanel\fP option after the -g option in the
781 command. FvwmPager has a similar option '-transient'.
783 Last, but not least, you can now put an icon, a title or a small
784 arrow in the button so that you can see what it is for. A title or
785 icon can be specified as usual.  To activate the arrow, just add
786 '(indicator)' after the 'Panel' keyword in the example above and
787 the \fIPadding\fP option to leave a few pixels between the arrow
788 and the border of the button.  An optional direction in which the
789 panel is opened can be given too:
793 *FvwmButtons: (Padding 2, Panel(down, indicator) my_first_panel \\
794   "Module FvwmButtons -g -30000-30000 -transientpanel my_first_panel")
798 There are several more options to configure how your panel works,
799 for example the speed and smoothness of the sliding
800 animation. Please refer to the description of the \fIPanel\fP
801 option for further details.
803 .SS CONVERTING OLD PANEL CONFIGURATIONS
805 This section describes how to convert a pretty old syntax used in
806 2.2.x versions.  You may skip it if your syntax is more recent.
808 With the old panel feature you first had one or more lines
809 defining panels in your main FvwmButtons configuration:
814 *FvwmButtons(Title WinOps,Panel WinOps)
815 *FvwmButtons(Title Tools ,Panel Tools)
820 After the last configuration line for the main panel the
821 configuration of the first panel followed, introduced with a line
822 beginning with *FvwmButtonsPanel:
826 *FvwmButtonsPanel WinOps
827 *FvwmButtonsBack bisque2
830 *FvwmButtonsPanel Tools
831 *FvwmButtonsBack bisque2
836 And perhaps you had style commands for you panels:
840 Style FvwmButtonsPanel Title, NoHandles, BorderWidth 0
841 Style FvwmButtonsPanel NoButton 2, NoButton 4, Sticky
845 The new configuration looks much the same, but now the
846 configuration of the main panel is independent of the
847 configuration of the sub panels.  The lines invoking the panels
848 use the same syntax as the Swallow option, so you simply add the
849 name of the window to use as a panel and the command to execute
850 instead of the panel name.  Note that you give the new instance of
851 FvwmButtons a different name.
855 *FvwmButtons: (Title WinOps, Panel WinOps \\
856   "Module FvwmButtons WinOps")
857 *FvwmButtons: (Title Tools , Panel Tools \\
858   "Module FvwmButtons Tools")
862 If you used something like 'Panel-d' you now have to use
863 'Panel(down)' instead.  To make the new panel vanish as soon as a
864 button was selected start FvwmButtons with the '-transientpanel'
865 option:
869 *FvwmButtons: (Title Tools , Panel(down) Tools \\
870   "Module FvwmButtons -transientpanel Tools")
874 The rest of the configuration is very easy to change.  Delete the
875 lines '*FvwmButtonsPanel <name>' and add <name> to all of the
876 following configuration lines for the panel instead. Use the same
877 name in your Style commands:
881 *WinOps: Back bisque2
883 *Tools: Back bisque2
885 Style "WinOps" Title, NoHandles, BorderWidth 0
886 Style "WinOps" NoButton 2, NoButton 4, Sticky
887 Style "Tools" Title, NoHandles, BorderWidth 0
888 Style "Tools" NoButton 2, NoButton 4, Sticky
892 That's it.  The new panels are much more flexible.  Please refer
893 to other parts of this documentation for details.
895 .SS WHY WAS THE PANEL FEATURE REWRITTEN?
897 There are several reasons.  The most important one is that the
898 program code implementing the panels was very disruptive and
899 caused a lot of problems.  At the same time it made writing new
900 features for FvwmButtons difficult at best.  The second reason is
901 that most users were simply unable to make it work - it was way
902 too complicated.  Even I (the author of the new code) had to spend
903 several hours before I got it working the first time.  The third
904 reason is that the new panels are more versatile.  Any application
905 can be a panel in FvwmButtons, not just other instances of
906 FvwmButtons itself.  So I sincerely hope that nobody is angry
907 about the change. Yes - you have to change your configuration, but
908 the new feature is much easier to configure, especially if you
909 already know how the Swallow option works.
911 .SH ARRANGEMENT ALGORITHM
913 FvwmButtons tries to arrange its buttons as best it can, by using
914 recursively, on each container including the buttonbox itself, the
915 following algorithm.
916 .IP "Getting the size right"
917 First it calculates the number of button unit areas it will need,
918 by adding the width times the height in buttons of each
919 button. Containers are for the moment considered a normal
920 button. Then it considers the given \fIrows\fP and \fIcolumns\fP
921 arguments. If the number of rows is given, it will calculate how
922 many columns are needed, and stick to that, unless \fIcolumns\fP
923 is larger, in which case you will get some empty space at the
924 bottom of the buttonbox. If the number of columns is given, it
925 calculates how many rows it needs to fit all the buttons. If
926 neither is given, it assumes you want two rows, and finds the
927 number of columns from that. If the BoxSize option is set to
928 \fIsmart\fP at least the height/width of the tallest/widest button
929 is used while the \fIfixed\fP value prevents the box from getting
930 resized if both \fIrows\fP and \fIcolumns\fP have been set to
931 non-zero.
932 .IP "Shuffling buttons"
933 Now it has a large enough area to place the buttons in, all that
934 is left is to place them right. There are two kinds of buttons:
935 fixed and floating buttons. A fixed button is forced to a specific
936 slot in the button box by a x/y geometry argument. All other
937 buttons are considered floating. Fixed buttons are placed
938 first. Should a fixed button overlap another one or shall be place
939 outside the buttons window, FvwmButtons exits with an error
940 message. After that the floating buttons are placed. The algorithm
941 tries to place the buttons in a left to right, top to bottom
942 western fashion. If a button fits at the suggested position it is
943 placed there, if not the current slot stays empty and the slot to
944 the right will be considered. After the button has been placed,
945 the next button is tried to be placed in the next slot and so on
946 until all buttons are placed. Additional rows are added below the
947 bottom line of buttons until all buttons are placed if necessary
948 if the BoxSize option \fIsmart\fP is used.
949 .IP "Containers"
950 Containers are arranged by the same algorithm, in fact they are
951 shuffled recursively as the algorithm finds them.
952 .IP "Clarifying example"
953 An example might be useful here: Suppose you have 6 buttons, all
954 unit sized except number two, which is 2x2. This makes for 5 times
955 1 plus 1 times 4 equals 9 unit buttons total area. Assume you have
956 requested 3 columns.
959 1) +---+---+---+   2) +---+---+---+   3) +---+---+---+
960    | 1 |       |      | 1 |       |      | 1 |       |
961    +---+       +      +---+   2   +      +---+   2   +
962    |           |      |   |       |      | 3 |       |
963    +           +      +   +---+---+      +---+---+---+
964    |           |      |           |      |   |   |   |
965    +-----------+      +---+-------+      +---+---+---+
967 4) +---+---+---+   5) +---+-------+   6) +---+-------+
968    | 1 |       |      | 1 |       |      | 1 |       |
969    +---+   2   +      +---+   2   |      +---+   2   |
970    | 3 |       |      | 3 |       |      | 3 |       |
971    +---+---+---+      +---+---+---+      +---+-------+
972    | 4 |       |      | 4 | 5 |   |      | 4 | 5 | 6 |
973    +---+---+---+      +---+---+---+      +---+---+---+
976 .IP "What size will the buttons be?"
977 When FvwmButtons has read the icons and fonts that are required by
978 its configuration, it can find out which size is needed for every
979 non-swallowing button. The unit button size of a container is set
980 to be large enough to hold the largest button in it without
981 squeezing it. Swallowed windows are simply expected to be
982 comfortable with the button size they get from this scheme. If a
983 particular configuration requires more space for a swallowed
984 window, it can be set in that button's configuration line using
985 the option "Size \fIwidth height\fP". This will tell FvwmButtons
986 to give this button at least \fIwidth\fP by \fIheight\fP pixels
987 inside the relief and padding.
989 .SH DYNAMICAL ACTIONS
990 A running FvwmButtons instance may receive some dynamical actions.
991 This is achived using the fvwm command
994 SendToModule FvwmButtons-Alias <action> <params>
997 Supported actions:
999 .IP "ChangeButton \fIbutton_id\fP options"
1000 where
1001 .I button_id
1002 is the id of the button to change as specified using the
1003 .B Id
1004 button option. It may also be a number, in this case the button
1005 with the given number is assumed.  And finally,
1006 .I button_id
1007 may be in the form +x+y, where x and y are a column number and
1008 a row number of the button to be changed.
1009 It is possible to specify multiple option pairs (name with value)
1010 by delimiting them using comma. Currently options include
1011 .BR Title ", " ActiveTitle ", " PressTitle ", " Icon ", "
1012 .BR ActiveIcon " and " PressIcon .
1014 .IP "ExpandButtonVars \fIbutton_id\fP command"
1015 where
1016 .I button_id
1017 has the same syntax as described in
1018 .B ChangeButton
1019 above. Command may be any fvwm command with variables $var that
1020 are expanded if supported.
1022 .IP "PressButton \fIbutton_id\fP [\fImouse_button\fP]"
1023 where
1024 .I button_id
1025 is the id of the button to press as specified using the
1026 .B Id
1027 button option and
1028 .I mouse_button
1029 is the number of mouse button used to click on the button e.g "1" for left
1030 mouse button etc. Quotes around the number is not needed. If
1031 .I mouse_button
1032 option is omitted "1" assumed. This command behaves exactly like if
1033 the button in question was pressed using the mouse.
1035 .IP Silent
1036 This prefix may be specified before other actions. It disables
1037 all possible error and warning messages.
1039 .IP Example:
1042 *FvwmButtons: (Id note1, Title "13:30 - Dinner", Icon clock1.xpm)
1044 SendToModule FvwmButtons Silent \\
1045   ChangeButton note1 Icon clock2.xpm, Title "18:00 - Go Home"
1049 .SH SAMPLE CONFIGURATION
1050 The following are excerpts from a .fvwm2rc file which describe
1051 FvwmButtons initialization commands:
1055 ##########################################################
1056 # Load any modules which should be started during fvwm
1057 # initialization
1059 # Make sure FvwmButtons is always there.
1060 AddToFunc StartFunction  "I" Module FvwmButtons
1062 # Make it titlebar-less, sticky, and give it an icon
1063 Style "FvwmButtons"     Icon toolbox.xpm, NoTitle, Sticky
1065 # Make the menu/panel look like CDE
1066 Style "WinOps" Title, NoHandles, BorderWidth 0
1067 Style "WinOps" NoButton 2, NoButton 4, Sticky
1068 Style "Tools" Title, NoHandles, BorderWidth 0
1069 Style "Tools" NoButton 2, NoButton 4, Sticky
1071 ##########################################################
1072 DestroyModuleConfig FvwmButtons: *
1073 *FvwmButtons: Fore Black
1074 *FvwmButtons: Back rgb:90/80/90
1075 *FvwmButtons: Geometry -135-5
1076 *FvwmButtons: Rows 1
1077 *FvwmButtons: BoxSize smart
1078 *FvwmButtons: Font -*-helvetica-medium-r-*-*-12-*
1079 *FvwmButtons: Padding 2 2
1081 *FvwmButtons: (Title WinOps, Panel WinOps \\
1082   "Module FvwmButtons -transientpanel WinOps")
1083 *FvwmButtons: (Title Tools, Panel Tools   \\
1084   "Module FvwmButtons -transientpanel Tools")
1086 *FvwmButtons: (Title Resize, Icon resize.xpm,  Action Resize)
1087 *FvwmButtons: (Title Move,   Icon arrows2.xpm, Action Move  )
1088 *FvwmButtons: (Title Lower,  Icon Down,        Action Lower )
1089 *FvwmButtons: (Title Raise,  Icon Up,          Action Raise )
1090 *FvwmButtons: (Title Kill,   Icon bomb.xpm,    Action Destroy)
1092 *FvwmButtons: (1x1,Container(Rows 3,Frame 1))
1093 *FvwmButtons: (Title Dopey ,Action                          \\
1094     `Exec "big_win" xterm -T big_win -geometry 80x50 &`)
1095 *FvwmButtons: (Title Snoopy, Font fixed, Action             \\
1096     `Exec "small_win" xterm -T small_win &`)
1097 *FvwmButtons: (Title Smokin')
1098 *FvwmButtons: (End)
1100 *FvwmButtons: (Title Xcalc, Icon rcalc.xpm,                 \\
1101              Action `Exec "Calculator" xcalc &`)
1102 *FvwmButtons: (Title XMag, Icon magnifying_glass2.xpm,      \\
1103              Action `Exec "xmag" xmag &`)
1104 *FvwmButtons: (Title Mail, Icon mail2.xpm,                  \\
1105              Action `Exec "xmh" xmh &`)
1106 *FvwmButtons: (4x1, Swallow "FvwmPager" `FvwmPager 0 3`     \\
1107              Frame 3)
1109 *FvwmButtons: (Swallow(UseOld,NoKill) "xload15" `Exec xload \\
1110      -title xload15 -nolabel -bg rgb:90/80/90 -update 15    \\
1111      -geometry -3000-3000 &`)
1115 The last lines are a little tricky - one spawns an FvwmPager
1116 module, and captures it to display in a quadruple width button. is
1117 used, the Pager will be as big as possible within the button's
1118 relief.
1120 The final line is even more magic. Note the combination of
1121 \fIUseOld\fP and \fINoKill\fP, which will try to swallow an
1122 existing window with the name "xload15" when starting up (if
1123 failing: starting one with the specified command), which is
1124 un-swallowed when ending FvwmButtons. The swallowed application is
1125 started with "-geometry -3000-3000" so that it will not be visible
1126 until its swallowed.
1128 The other panels are specified after the root panel:
1132 ########## PANEL WinOps
1133 DestroyModuleConfig WinOps: *
1134 *WinOps: Back bisque2
1135 *WinOps: Geometry -3-3
1136 *WinOps: Columns 1
1138 *WinOps: (Title Resize, Icon resize.xpm,  Action Resize)
1139 *WinOps: (Title Move,   Icon arrows2.xpm, Action Move  )
1140 *WinOps: (Title Lower,  Icon Down,        Action Lower )
1141 *WinOps: (Title Raise,  Icon Up,          Action Raise )
1143 ########## PANEL Tools
1144 DestroyModuleConfig Tools: *
1145 *Tools: Back bisque2
1146 *Tools: Geometry -1-1
1147 *Tools: Columns 1
1149 *Tools: (Title Kill,    Icon bomb.xpm,    Action Destroy)
1153 The color specification \fIrgb:90/80/90\fP is actually the most
1154 correct way of specifying independent colors in X, and should be
1155 used instead of the older \fI#908090\fP. If the latter
1156 specification is used in your configuration file, you should be
1157 sure to escape the hash in any of the \fIcommand\fPs which will be
1158 executed, or fvwm will consider the rest of the line a comment.
1160 Note that with the x/y geometry specs you can easily build button
1161 windows with gaps. Here is another example. You can not accomplish
1162 this without geometry specs for the buttons:
1165 ##########################################################
1166 # Another example
1167 ##########################################################
1169 # Make it titlebar-less, sticky, and give it an icon
1170 Style "FvwmButtons"     Icon toolbox.xpm, NoTitle, Sticky
1172 DestroyModuleConfig FvwmButtons: *
1173 *FvwmButtons: Font        5x7
1174 *FvwmButtons: Back rgb:90/80/90
1175 *FvwmButtons: Fore        black
1176 *FvwmButtons: Frame       1
1177 # 9x11 pixels per button, 4x4 pixels for the frame
1178 *FvwmButtons: Geometry    580x59+0-0
1179 *FvwmButtons: Rows        5
1180 *FvwmButtons: Columns     64
1181 *FvwmButtons: BoxSize     fixed
1182 *FvwmButtons: Padding     1 1
1184 # Pop up a module menu directly above the button.
1185 *FvwmButtons: (9x1+3+0, Padding 0, Title "Modules",   \\
1186   Action `Menu Modulepopup rectangle \\
1187   $widthx$height+$lleft+$top o+50 -100m`)
1189 # first row of buttons from left to right:
1190 *FvwmButtons: (3x2+0+1, Icon my_lock.xpm, Action `Exec xlock`)
1191 *FvwmButtons: (3x2+3+1, Icon my_recapture.xpm, Action Recapture)
1192 *FvwmButtons: (3x2+6+1, Icon my_resize.xpm, Action Resize)
1193 *FvwmButtons: (3x2+9+1, Icon my_move.xpm, Action Move)
1194 *FvwmButtons: (3x2+12+1, Icon my_fvwmconsole.xpm,     \\
1195   Action 'Module FvwmConsole')
1197 # second row of buttons from left to right:
1198 *FvwmButtons: (3x2+0+3, Icon my_exit.xpm, Action QuitSave)
1199 *FvwmButtons: (3x2+3+3, Icon my_restart.xpm, Action Restart)
1200 *FvwmButtons: (3x2+6+3, Icon my_kill.xpm, Action Destroy)
1201 *FvwmButtons: (3x2+9+3, Icon my_shell.xpm, Action 'Exec rxvt')
1203 # big items
1204 *FvwmButtons: (10x5, Swallow (NoKill, NoCLose)        \\
1205   "FvwmPager" 'FvwmPager * * -geometry 40x40-1024-1024')
1206 *FvwmButtons: (6x5, Swallow "FvwmXclock" `Exec xclock \\
1207   -name FvwmXclock -geometry 40x40+0-3000 -padding 1  \\
1208   -analog -chime -bg rgb:90/80/90`)
1209 *FvwmButtons: (13x5, Swallow (NoClose)                \\
1210 "FvwmIconMan" 'Module FvwmIconMan')
1211 *FvwmButtons: (20x5, Padding 0, Swallow "xosview"     \\
1212   `Exec /usr/X11R6/bin/xosview -cpu -int -page -net   \\
1213   -geometry 100x50+0-3000 -font 5x7`)
1217 .SH BUGS
1219 The action part of the Swallow option must be quoted if it
1220 contains any whitespace character.
1222 .SH COPYRIGHTS
1223 The FvwmButtons program, and the concept for interfacing this
1224 module to the Window Manager, are all original work by Robert
1225 Nation.
1227 Copyright 1993, Robert Nation. No guarantees or warranties or
1228 anything are provided or implied in any way whatsoever. Use this
1229 program at your own risk. Permission to use this program for any
1230 purpose is given, as long as the copyright is kept intact.
1232 Further modifications and patching by Jarl Totland, copyright
1233 1996.  The statement above still applies.
1235 .SH AUTHOR
1236 Robert Nation.  Somewhat enhanced by Jarl Totland, Jui-Hsuan
1237 Joshua Feng, Scott Smedley.