Provided by: fvwm3_1.0.4+ds-1build1_amd64 bug

NAME

       FvwmButtons - the fvwm buttonbox module

SYNOPSIS

           Module FvwmButtons [-g geometry] [-transient | -transientpanel] [name[configfile]]

       FvwmButtons can only be invoked by fvwm. Command line invocation of the FvwmButtons module
       will not work.

DESCRIPTION

       The FvwmButtons module provides a window of buttons which sits on the X terminal’s root
       window. The user can press the buttons at any time, and trigger invocation of a
       user-specified command by the window manager. FvwmButtons only works when fvwm is used as
       the window manager.

       The buttonbox can be of any configuration or geometry, and can have monochrome or color
       icons to represent the actions which would be invoked. Even other applications can be
       'swallowed' by the button bar.

       Panels that are opened on a button press are available too. See CREATING PANELS section
       for details.

OPTIONS

       The -g option specifies the geometry of the main window. The command line option takes
       precedence over any other geometry settings in the configuration file.

       The -transient option tells FvwmButtons to terminate itself after the first key or button
       press has been received (presses to open a sub panel do not count) or a sub panel has been
       closed or respawned. This is especially useful for sub panels where you want to select a
       single button and have it closed automatically. It could be used to create two-dimensional
       graphical menus. Since -transient is an option, not a configuration setting you can use
       the same configuration for transient and non transient button bars.

       The -transientpanel option does roughly the same as the -transient option, but instead of
       closing the whole button bar, the window is merely hidden. This is very useful if the
       button bar is started as a subpanel of another button bar because it avoids that it must
       be started again when something is selected.

INVOCATION

       FvwmButtons is spawned by fvwm, so command line invocation will not work.

       FvwmButtons can be invoked by inserting the line 'Module FvwmButtons OptionalName' in the
       .fvwm2rc file. This should be placed in the StartFunction if FvwmButtons is to be spawned
       during fvwm’s initialization. This can be bound to a menu or mouse button or keystroke to
       invoke it later.

       When invoked with the OptionalName argument, the OptionalName is used to find
       configuration commands. For example:

           AddToFunc StartFunction Module FvwmButtons MyButtonBox

       FvwmButtons will then use only the lines starting with "*MyButtonBox", instead of the
       default "*FvwmButtons".

CONFIGURATION OPTIONS

       The following commands are understood by FvwmButtons:

       *FvwmButtons: Back color
           Specifies the background color for the buttons. The relief and shadow color are
           calculated from the background color.

       *FvwmButtons: BoxSize algorithm
           This option specifies how serious FvwmButtons takes the Rows and Columns options (see
           below). It can be one of dumb, fixed or smart.

           If fixed is used and both Rows and Columns are specified and non-zero, FvwmButtons
           uses exactly the number of rows and columns specified. If the box is too small to
           accommodate all buttons the module will fail.

           If smart is used FvwmButtons enlarges the box so all buttons have a chance to fit. The
           number of columns is increased to at least the width of the widest button and new rows
           are added until all buttons are placed. For the best tolerance of configuration errors
           use the smart option.

           dumb is neither fixed nor smart. This is the default.

       *FvwmButtons: Colorset colorset
           Tells the module to use colorset colorset for the window background. Refer to the fvwm
           man page for details about colorsets.

       *FvwmButtons: ActiveColorset colorset
           Tells the module to use colorset colorset for the background color/image and/or title
           color of a button when the mouse is hovering above a button.

       *FvwmButtons: PressColorset colorset
           Tells the module to use colorset colorset for the background color/image and/or title
           color of a button when it is pressed.

       *FvwmButtons: Columns columns
           Specifies the number of columns of buttons to be created. If unspecified, the number
           of columns is set to the number of buttons requested, divided by the number of rows.
           If both the rows and columns are specified, but the number of buttons is more than the
           rows and columns allow for, the columns specification is ignored unless the BoxSize
           option is fixed.

       *FvwmButtons: File filename
           Specifies that the configuration for this button is found in the file filename.
           Filename can be a full pathname, or is assumed to be in fvwm’s startup directory. The
           configuration file is in the same format as fvwm’s configuration file, but each line
           is read as if prefixed by "*FvwmButtons". Comments are given by starting a line with
           "#". Line continuation is done by ending a line with a "\".

       *FvwmButtons: Font font
           Specifies the font to be used for labeling the buttons, or None.

       *FvwmButtons: Fore color
           Specifies the color used for button label text and monochrome icons.

       *FvwmButtons: Frame width
           Specifies the width of the relief around each button. If this is a negative number,
           the relief is inverted. This makes the button sunken normally and raised when
           activated.

       *FvwmButtons: Geometry geometry
           Specifies the FvwmButtons window location and size. The geometry is a standard X11
           window geometry specification.

       *FvwmButtons: ButtonGeometry geometry
           This option works like the Geometry option except that the size is the size of a
           single button. The size of the whole FvwmButtons window is calculated by multiplying
           the button dimension by the number of rows and columns.

       *FvwmButtons: Padding width height
           This option specifies the default horizontal padding to be width pixels, and the
           vertical padding to be height pixels. The amount of free space between the relief of
           the button and its contents is normally 2 pixels on the sides and 4 pixels above and
           below, except for swallowed windows and containers, which are not padded at all,
           unless this option is used.

       *FvwmButtons: Pixmap pixmapfile
           Specifies a background pixmap to use. Specify "none" (without the double quotes) for a
           transparent background.

       *FvwmButtons: Rows rows
           Specifies the number of rows of buttons to be created. The default is 2 rows.

       *FvwmButtons: WindowName name
           If FvwmButtons has a titlebar enabled with Title style, (for example, some transient
           subpanel), this option can set it’s Window name and Icon name to a string provided
           with this parameter. If omitted, default for Window and Icon name is the window
           resource name which itself is simply "FvwmButtons", or is derived from the alias by
           which FvwmButtons configuration is referenced. This enables setting a title with
           spaces and larger number of non-ASCII characters which is not allowed as an alias for
           FvwmButtons module instance otherwise.

       *FvwmButtons: (options) [title icon command]
           Specifies the contents of a button in the buttonbox. The following options, separated
           by commas or whitespace, can be given a button:

           geometry
               Specifies the size and position of the button within the FvwmButtons window or
               container. The geometry is a standard X11 window geometry specification. The
               button is width times the normal button width and height times the normal button
               height. If values for x and y are given, the button is placed x (y) button units
               from the left (top) of the container if x (y) is positive and x (y) units from the
               right (bottom) if x (y) is negative. Buttons with position arguments (x and y) are
               placed before those without them. If two or more buttons are forced to overlap by
               this, FvwmButtons exits with an error message.

           Action [(options)] command
               Specifies an fvwm command to be executed when the button is activated by pressing
               return or a mouse button. The command needs to be quoted if it contains a comma or
               a closing parenthesis.

               The current options of the Action are: Mouse n - this action is only executed for
               mouse button n. One action can be defined for each mouse button, in addition to
               the general action.

               In the command part, you can use a number of predefined variables: $left, $right,
               $top and $bottom are substituted by the left, right, top and bottom coordinates of
               the button pressed. $-left, $-right, $-top and $-bottom are substituted likewise,
               but the coordinates are calculated from the bottom or the right edge of the screen
               instead (for a button that is 5 pixels away from the right screen border, $-right
               will be 5). $width and $height are replaced by the width or height of the button.
               The variables $fg and $bg are replaced with the name of the foreground or
               background color set with the Back or Fore option (see below). All this is done
               regardless of any quoting characters. To get a literal '$' use the string '$$'.

               Example:

                     *FvwmButtons: (Title xload, Action (Mouse 1) \
                       `Exec exec xload -fg $fg -bg $bg -geometry -3000-3000`)

               Note: With fvwm versions prior to 2.5.0, actions could not be assigned to a button
               that swallowed an application window (see Swallow option). Such actions worked
               only when the border around the button was clicked. This is now possible, but to
               get back the old behavior, the ActionIgnoresClientWindow can be used on the
               button:

                     *FvwmButtons: (Action beep, ActionIgnoresClientWindow, \
                        Swallow xeyes "Exec exec xeyes")

               In this example, the action is only executed when you click on the border of the
               button or the transparent part of the xeyes window, but not on the xeyes window
               itself.

           ActionIgnoresClientWindow
               See the note in the description of Action above.

           ActionOnPress
               Usually the action is executed on the button release except for the Popup action.
               This option changes this behavior, the action is executed on the button press.
               This may be good, for example, with Menu or SendToModule that generates popups, or
               when Frame is 0 and the button would look unresponsive otherwise.

           Back color
               Specifies the background color to be used drawing this box. A relief color and a
               shadow color are calculated from this.

           Center
               The contents of the button is centered on the button. This is the default but may
               be changed by Left or Right.

           Top
               The contents of the button is vertically aligned at the top of the button. The
               default is to vertically center it.

           Colorset colorset
               The given colorset can be applied to a container, a swallowed application and a
               simple button. To apply it to a button or container, simply put the option in a
               line with a button or container description. Drawing backgrounds for individual
               buttons and containers with colorsets requires a lot of communication with the X
               server. So if you are not content with the drawing speed of dozens of buttons with
               colorset backgrounds, do not use colorsets here. Setting colorsets as the
               background of swallowed applications does not have this restriction but depends
               entirely on the swallowed application. It may work as you wish, but since it
               involves fiddling with other applications' windows there is no guarantee for
               anything. I have tested three applications: xosview works nicely with a colorset
               background, xload works only with a VGradient or solid background and an analog
               xclock leaves a trail painted in the background color after its hands.

               If the swallowed window is an fvwm module (see the (No)FvwmModule option to
               Swallow), then the colorset is not applied to the swallowed module. You should use
               the colorset in the module configuration. If the swallowed module has a
               transparent colorset background, then the FvwmButtons background (and not the
               button colorset) is seen by transparency of the background of the swallowed
               module. Refer to the fvwm man page for details about colorsets.

           ActiveColorset colorset
               Use colorset colorset for the background color/image and/or title color of the
               button when the mouse is hovering above it.

           PressColorset colorset
               Use colorset colorset for the background color/image and/or title color of the
               button when it is pressed.

           Container [(options)]
               Specifies that this button will contain a miniature buttonbox, equivalent to
               swallowing another FvwmButtons module. The options are the same as can be given
               for a single button, but they affect all the contained buttons. Options available
               for this use are Back, Font, Fore, Frame and Padding. Flags for Title and Swallow
               options can be set with Title(flags) and Swallow(flags). You should also specify
               either "Columns width" or "Rows height", or "Rows 2" will be assumed. For an
               example, see the Sample configuration section.

               The container button itself (separate from the contents) can take format options
               like Frame and Padding, and commands can be bound to it. This means you can make a
               sensitive relief around a container, like

                     *FvwmButtons: (2x2, Frame 5, Padding 2 2, Action Beep,\
                         Container(Frame 1))

               Typically you will want to at least give the container a size setting
               widthx_height_.

           End
               Specifies that no more buttons are defined for the current container, and further
               buttons will be put in the container’s parent. This option should be given on a
               line by itself, i.e

                     *FvwmButtons: (End)

           Font fontname
               Specifies that the font fontname is to be used for labeling this button.

           Fore color
               Specifies the foregound color of the title and monochrome icons in this button.

           Frame width
               The relief of the button will be width pixels wide. If width is given as a
               negative number, the relief is inverted. This makes the button sunken normally and
               raised when activated.

           Icon filename
               The name of an image file, containing the icon to display on the button.
               FvwmButtons searches through the path specified in the fvwm ImagePath
               configuration item to find the icon file.

           ActiveIcon filename
               The name of an image file, containing an alternative icon to display on the button
               when the mouse is hovering above the button. If no ActiveIcon is specified, the
               image specified by Icon is displayed (if there is one).

           PressIcon filename
               The name of an image file, containing an alternative icon to display on the button
               when the button is pressed. If no PressIcon is specified, the image specified by
               Icon is displayed (if there is one).

           Id id
               The id to be used to identify this button. The first character of the id should be
               alphabetic. See also the "DYNAMICAL ACTIONS" section.

           Left
               The contents of the button are aligned to the left. The default is to center the
               contents on the button.

           NoSize
               This option specifies that this button will not be considered at all when making
               the initial calculations of button sizes. Useful for the odd button that gets just
               a couple of pixels too large to keep in line, and therefore blows up your whole
               buttonbox. "NoSize" is equivalent to "Size 0 0".

           Padding width height
               The amount of free space between the relief of the button and its contents is
               normally 2 pixels to the sides and 4 pixels above and below, except for swallowed
               windows and containers, which are by default not padded at all. This option sets
               the horizontal padding to width and the vertical padding to height.

           Panel [ (options) ] hangon command
               Panels can be swallowed exactly like windows are swallowed by buttons with the
               Swallow command below, but they are not displayed within the button. Instead they
               are hidden until the user presses the panel’s button. Then the panel (the window
               of the swallowed application) opens with a sliding animation. The options can be
               any of the flags described for the Swallow command. In addition a direction
               'left', 'right', 'up' or 'down' can be used to specify the sliding direction.

               The steps animation-steps option defines the number of animation steps.

               The delay ms option sets the delay between the steps of the animation in
               milliseconds. Use zero for no delay. The maximum delay is 10 seconds (10000). It
               doesn’t make any sense to use the delay option unless you also use the smooth
               option.

               The smooth option causes the panel to redraw between the steps of the animation.
               The sliding animation may be smoother this way, it depends on the application, and
               display speed. The application may appear to grow instead of sliding out. The
               animation may be slower.

               The Hints option causes FvwmButtons to use the applications size hints to
               calculate the size of the animation steps. Hints is the default. If the number of
               steps is not what you want, try using NoHints.

               The noborder option tells FvwmButtons to ignore the borders of the window when
               calculating positions for the animation (equivalent to set noplr and noptb in the
               position option).

               With the indicator option set, FvwmButtons will draw a small triangle in the
               button that will open a panel. The triangle points in the direction where the
               panel will pop up. The indicator keyword may be followed by a positive integer
               that specifies the maximum width and height of the indicator. Without this size
               FvwmButtons will make the indicator fit the button. You will probably want to use
               the Padding option to leave a few pixels between the indicator and the frame of
               the button. Second option to indicator may be given which enters the look of the
               triangle. If this keyword is in, triangle will appear pressed in, while out will
               make triangle to appear depressed (3D raised). If this keyword is omitted, default
               will be out or depressed.

               The position option allows one to place the panel. The syntax is:

                   position [context-window] [pos] [x y] [border-opts]

               The argument context-window can be one of: Button, Module or Root. The
               context-window is the window from which panel percentage offsets are calculated.
               Button specifies the panel’s button, Module specifies FvwmButtons itself, and Root
               specifies a virtual screen. The context-window together with the sliding direction
               define a line segment which is one of the borders of the context-window: the
               top/bottom/left/right border for sliding up/down/left/right.

               The pos argument can be one of: center, left or right (for sliding up or a down)
               or top or bottom (for sliding left or right). It defines the vertical (sliding up
               and down) or the horizontal (sliding left and right) position of the Panel on the
               line segment. For example, for a sliding up if you use a left pos, then the left
               borders of the panel and of the context-window will be aligned.

               The offset values x and y specify how far the panel is moved from it’s default
               position. By default, the numeric value given is interpreted as a percentage of
               the context window’s width (height). A trailing "p" changes the interpretation to
               mean "pixels". All offset calculations are relative to the buttons location, even
               when using a root context.

               The border-opts are: mlr, mtb, noplr and noptb. They define which border widths
               are taken in account. By default, the borders of FvwmButtons are not taken in
               account. mlr reverses this default for the left and the right border and mtb
               reverses this default for the top and the bottom border. Conversely, by default
               the borders of the Panel are taken in account. noplr reverses this default for the
               left and the right border and noptb reverses this default for the top and the
               bottom border.

               The defaults are sliding up with a delay of five milliseconds and twelve animation
               steps. To post the panel without any animation, set the number of steps to zero.
               The default position is 'Button center'.

               Please refer to the CREATING PANELS section for further information on panels.

               Example:

                     # To include the panel in a button
                     *FvwmButtons: (Panel(down, delay 0, steps 16) \
                       SubPanel "Module FvwmButtons SubPanel")

                     # To define the panel as an instance of
                     # FvwmButtons with a different name:
                     *SubPanel: (Icon my_lock.xpm, Action Exec xlock)
                     *SubPanel: (Icon my_move.xpm, Action Move)
                     ...

           Right
               The contents of the button are aligned to the right. The default is to center the
               contents on the button.

           Size width height
               Specifies that the contents of this button require width by height pixels,
               regardless of what size FvwmButtons calculates from the icon and the title. A
               button bar with only swallowed windows will not get very large without this option
               specified, as FvwmButtons does not consider sizes for swallowing buttons. Note
               that this option gives the minimum space assured; other buttons might require the
               buttonbox to use larger sizes.

           Swallow [(flags)] hangon command
               Causes FvwmButtons to execute command, and when a window with a name, class or
               resource matching hangon appears, it is captured and swallowed into this button.
               The hangon string may contain wildcard characters ('*') that match any substring.
               Swallow replaces the variables $fg and $bg as described above for the Action
               option (but if you use the UseOld and NoClose options the application is not be
               restarted when FvwmButtons is restarted and thus does not get the new colors - if
               you changed them). An example:

                     *FvwmButtons: (Swallow XClock 'Exec xclock -geometry -3000-3000 &')

               takes the first window whose name, class, or resource is "XClock" and displays it
               in the button. If no matching window is found, the "Exec" command creates one. The
               argument "-geometry -3000-3000" is used so that the window is first drawn out of
               sight before its swallowed into FvwmButtons.

               Modules can be swallowed by specifying the module instead of 'Exec whatever',
               like:

                     *FvwmButtons: (Swallow "FvwmPager" "FvwmPager 0 0")

               The flags that can be given to swallow are:

               NoClose / Close - Specifies whether the swallowed program in this button will be
               un-swallowed or closed when FvwmButtons exits cleanly. "NoClose" can be combined
               with "UseOld" to have windows survive a restart of the window manager. The default
               setting is "Close".

               NoHints / Hints - Specifies whether hints from the swallowed program in this
               button will be ignored or not, useful in forcing a window to resize itself to fit
               its button. The default value is "Hints".

               NoKill / Kill - Specifies whether the swallowed program will be closed by killing
               it or by sending a message to it. This can be useful in ending programs that
               doesn’t accept window manager protocol. The default value is "NoKill". This has no
               effect if "NoClose" is specified.

               NoRespawn / Respawn / SwallowNew - Specifies whether the swallowed program is to
               be respawned (restarted) if it dies. If "Respawn" is specified, the program is
               respawned using the original command. Use this option with care, the program might
               have a legitimate reason to die. If "SwallowNew" is given, the program is not
               respawned, but if a new window with the specified name appears, it is swallowed.

               NoOld / UseOld - Specifies whether the button will try to swallow an existing
               window matching the hangon name before spawning one itself with command. The
               hangon string may contain wildcard characters ('*') that match any substring.The
               default value is "NoOld". "UseOld" can be combined with "NoKill" to have windows
               survive a restart of the window manager. If you want FvwmButtons to swallow an old
               window, and not spawn one itself if failing, let the command be "Nop":

                     *FvwmButtons: (Swallow (UseOld) "Console" Nop)

               If you want to be able to start it yourself, combine it with an action:

                     *FvwmButtons: (Swallow (UseOld) "Console" Nop, \
                                  Action `Exec "Console" console &`)

               NoTitle / UseTitle - Specifies whether the title of the button will be taken from
               the swallowed window’s title or not. If "UseTitle" is given, the title on the
               button changes dynamically to reflect the window name. The default is "NoTitle".

               NoFvwmModule / FvwmModule - By default, FvwmButtons treats the swallowed window as
               an fvwm module window if the 4 first letters of the command is "Fvwm" or the 6
               first letters of the command is "Module". NoFvwmModule and FvwmModule override
               this logic.

           Title [(options)] name
               Specifies the title to be written on the button. Whitespace can be included in the
               title by quoting it. If a title at any time is too long for its buttons,
               characters are chopped of one at a time until it fits. If justify is "Right", the
               head is removed, otherwise its tail is removed. These options can be given to
               Title:

               Center - The title is centered horizontally. This is the default.

               Left - The title is justified to the left side.

               Right - The title is justified to the right side.

               Side - Causes the title to appear on the right hand side of any icon or swallowed
               window, instead of below which is the default. If you use small icons, and combine
               this with the "Left" or "Right" option, you can get a look similar to fvwm’s
               menus.

           ActiveTitle name
               Specifies the title to be written on the button when the mouse is hovering above
               the button. If no ActiveTitle is specified, the text specified by Title is
               displayed (if there is any).

           PressTitle name
               Specifies the title to be written on the button when the button is pressed. If no
               PressTitle is specified, the text specified by Title is displayed (if there is
               any).

           Legacy fields [title icon command]
               These fields are kept for compatibility with previous versions of FvwmButtons, and
               their use is discouraged. The title field is similar to the option Title name. If
               the title field is "-", no title is displayed. The icon field is similar to the
               option Icon filename. If the icon field is "-" no icon is displayed. The command
               field is similar to the option Action command or alternatively Swallow "hangon"
               command.

           The command
               Any fvwm command is recognized by FvwmButtons. See fvwm(1) for more information.

               The Exec command has a small extension when used in Actions, its syntax is:

                     Exec ["hangon"] command

               Example:

                     *FvwmButtons: (Action Exec "xload" xload)

               The hangon string must be enclosed in double quotes. When FvwmButtons finds such
               an Exec command, the button remains pushed in until a window whose name, class or
               resource matches the quoted portion of the command is encountered. This is
               intended to provide visual feedback to the user that the action he has requested
               will be performed. The hangon string may contain wildcard characters ('*') that
               match any substring. If the quoted portion contains no characters, then the button
               will pop out immediately. Note that users can continue pressing the button, and
               re-executing the command, even when it looks pressed in.

           Quoting
               Any string which contains whitespace must be quoted. Contrary to earlier versions
               commands no longer need to be quoted. In this case any quoting character will be
               passed on to the application untouched. Only commas ',' and closing parentheses
               ')' have to be quoted inside a command. Quoting can be done with any of the three
               quotation characters; single quote:

               'This is a "quote"',

               double quote:

               "It’s another `quote'",

               and back quote:

               This is a strange quote.

               The back quoting is unusual but used on purpose, if you use a preprocessor like
               FvwmCpp and want it to get into your commands, like this:

                     #define BG gray60
                     *FvwmButtons: (Swallow "xload" `Exec xload -bg BG &`)

               Any single character can be quoted with a preceding backslash '\'.

CREATING PANELS

       Former versions of FvwmButtons (fvwm 2.0.46 to 2.3.6) had a different way of handling
       panels. You can not use your old panel configuration with the new panel feature. Read
       "CONVERTING OLD PANEL CONFIGURATIONS" for more information.

   HOW TO CREATE NEW PANELS
       Any program that can be launched from within fvwm and that has a window can be used as a
       panel. A terminal window could be your panel, or some application like xload or xosview or
       another fvwm module, including FvwmButtons itself. All you need to know is how to start
       your application from fvwm.

       The button that invokes the panel is as easily configured as any other button. Essentially
       you need nothing more than the Panel option:

           *FvwmButtons: (Panel my_first_panel \
             "Module FvwmButtons -g -30000-30000 my_first_panel")
           *FvwmButtons: (Panel my_second_panel \
             "Exec exec xterm -g -30000-30000 -n my_second_panel")

       This works like the Swallow option. The difference is that the application is not put into
       the button when it starts up but instead hidden from view. When you press the button for
       the panel the window slides into view. The '-g -30000-30000' option tells the application
       that it should be created somewhere very far to the top and left of your visible screen.
       Otherwise you would see it flashing for a moment when FvwmButtons starts up. Some
       applications do not work well with this kind of syntax so you may have to live with the
       short flashing of the window. If you want to make a panel from another instance of
       FvwmButtons you can do so, but you must give it a different name ('my_first_panel' in
       above example). If you run FvwmButtons under the same name, new panels are created
       recursively until your system runs out of resources and FvwmButtons crashes! To configure
       a second button bar with a different name, simply put '*new_name' in place of
       '*FvwmButtons' in your configuration file. If you are not familiar with the Swallow option
       or if you want to learn more about how 'swallowing' panels works, refer to the description
       of the Swallow option.

       Now that your panel basically works you will want to tune it a bit. You may not want a
       window title on the panel. To disable the title use the fvwm Style command. If your button
       bar is 'sticky' you may want to make the panel sticky too. And probably the panel window
       should have no icon in case it is iconified.

           Style name_of_panel_window NoTitle, Sitcky, NoIcon

       You may want your panel to stay open only until you select something in it. You can give
       FvwmButtons the -transientpanel option after the -g option in the command. FvwmPager has a
       similar option '-transient'.

       Last, but not least, you can now put an icon, a title or a small arrow in the button so
       that you can see what it is for. A title or icon can be specified as usual. To activate
       the arrow, just add '(indicator)' after the 'Panel' keyword in the example above and the
       Padding option to leave a few pixels between the arrow and the border of the button. An
       optional direction in which the panel is opened can be given too:

           *FvwmButtons: (Padding 2, Panel(down, indicator) my_first_panel \
             "Module FvwmButtons -g -30000-30000 -transientpanel my_first_panel")

       There are several more options to configure how your panel works, for example the speed
       and smoothness of the sliding animation. Please refer to the description of the Panel
       option for further details.

   CONVERTING OLD PANEL CONFIGURATIONS
       This section describes how to convert a pretty old syntax used in 2.2.x versions. You may
       skip it if your syntax is more recent.

       With the old panel feature you first had one or more lines defining panels in your main
       FvwmButtons configuration:

           ...
           *FvwmButtons(Title WinOps,Panel WinOps)
           *FvwmButtons(Title Tools ,Panel Tools)
           ...

       After the last configuration line for the main panel the configuration of the first panel
       followed, introduced with a line beginning with *FvwmButtonsPanel:

           *FvwmButtonsPanel WinOps
           *FvwmButtonsBack bisque2
           ...

           *FvwmButtonsPanel Tools
           *FvwmButtonsBack bisque2
           ...

       And perhaps you had style commands for you panels:

           Style FvwmButtonsPanel Title, NoHandles, BorderWidth 0
           Style FvwmButtonsPanel NoButton 2, NoButton 4, Sticky

       The new configuration looks much the same, but now the configuration of the main panel is
       independent of the configuration of the sub panels. The lines invoking the panels use the
       same syntax as the Swallow option, so you simply add the name of the window to use as a
       panel and the command to execute instead of the panel name. Note that you give the new
       instance of FvwmButtons a different name.

           *FvwmButtons: (Title WinOps, Panel WinOps \
             "Module FvwmButtons WinOps")
           *FvwmButtons: (Title Tools , Panel Tools \
             "Module FvwmButtons Tools")

       If you used something like 'Panel-d' you now have to use 'Panel(down)' instead. To make
       the new panel vanish as soon as a button was selected start FvwmButtons with the
       '-transientpanel' option:

           *FvwmButtons: (Title Tools , Panel(down) Tools \
             "Module FvwmButtons -transientpanel Tools")

       The rest of the configuration is very easy to change. Delete the lines '*FvwmButtonsPanel
       <name>' and add <name> to all of the following configuration lines for the panel instead.
       Use the same name in your Style commands:

           *WinOps: Back bisque2
           ...
           *Tools: Back bisque2
           ...
           Style "WinOps" Title, NoHandles, BorderWidth 0
           Style "WinOps" NoButton 2, NoButton 4, Sticky
           Style "Tools" Title, NoHandles, BorderWidth 0
           Style "Tools" NoButton 2, NoButton 4, Sticky

       That’s it. The new panels are much more flexible. Please refer to other parts of this
       documentation for details.

   WHY WAS THE PANEL FEATURE REWRITTEN?
       There are several reasons. The most important one is that the program code implementing
       the panels was very disruptive and caused a lot of problems. At the same time it made
       writing new features for FvwmButtons difficult at best. The second reason is that most
       users were simply unable to make it work - it was way too complicated. Even I (the author
       of the new code) had to spend several hours before I got it working the first time. The
       third reason is that the new panels are more versatile. Any application can be a panel in
       FvwmButtons, not just other instances of FvwmButtons itself. So I sincerely hope that
       nobody is angry about the change. Yes - you have to change your configuration, but the new
       feature is much easier to configure, especially if you already know how the Swallow option
       works.

ARRANGEMENT ALGORITHM

       FvwmButtons tries to arrange its buttons as best it can, by using recursively, on each
       container including the buttonbox itself, the following algorithm.

       Getting the size right
           First it calculates the number of button unit areas it will need, by adding the width
           times the height in buttons of each button. Containers are for the moment considered a
           normal button. Then it considers the given rows and columns arguments. If the number
           of rows is given, it will calculate how many columns are needed, and stick to that,
           unless columns is larger, in which case you will get some empty space at the bottom of
           the buttonbox. If the number of columns is given, it calculates how many rows it needs
           to fit all the buttons. If neither is given, it assumes you want two rows, and finds
           the number of columns from that. If the BoxSize option is set to smart at least the
           height/width of the tallest/widest button is used while the fixed value prevents the
           box from getting resized if both rows and columns have been set to non-zero.

       Shuffling buttons
           Now it has a large enough area to place the buttons in, all that is left is to place
           them right. There are two kinds of buttons: fixed and floating buttons. A fixed button
           is forced to a specific slot in the button box by a x/y geometry argument. All other
           buttons are considered floating. Fixed buttons are placed first. Should a fixed button
           overlap another one or shall be place outside the buttons window, FvwmButtons exits
           with an error message. After that the floating buttons are placed. The algorithm tries
           to place the buttons in a left to right, top to bottom western fashion. If a button
           fits at the suggested position it is placed there, if not the current slot stays empty
           and the slot to the right will be considered. After the button has been placed, the
           next button is tried to be placed in the next slot and so on until all buttons are
           placed. Additional rows are added below the bottom line of buttons until all buttons
           are placed if necessary if the BoxSize option smart is used.

       Containers
           Containers are arranged by the same algorithm, in fact they are shuffled recursively
           as the algorithm finds them.

       Clarifying example
           An example might be useful here: Suppose you have 6 buttons, all unit sized except
           number two, which is 2x2. This makes for 5 times 1 plus 1 times 4 equals 9 unit
           buttons total area. Assume you have requested 3 columns.

           1) +---+---+---+   2) +---+---+---+   3) +---+---+---+
              | 1 |       |      | 1 |       |      | 1 |       |
              +---+       +      +---+   2   +      +---+   2   +
              |           |      |   |       |      | 3 |       |
              +           +      +   +---+---+      +---+---+---+
              |           |      |           |      |   |   |   |
              +-----------+      +---+-------+      +---+---+---+

           4) +---+---+---+   5) +---+-------+   6) +---+-------+
              | 1 |       |      | 1 |       |      | 1 |       |
              +---+   2   +      +---+   2   |      +---+   2   |
              | 3 |       |      | 3 |       |      | 3 |       |
              +---+---+---+      +---+---+---+      +---+-------+
              | 4 |       |      | 4 | 5 |   |      | 4 | 5 | 6 |
              +---+---+---+      +---+---+---+      +---+---+---+

       What size will the buttons be?
           When FvwmButtons has read the icons and fonts that are required by its configuration,
           it can find out which size is needed for every non-swallowing button. The unit button
           size of a container is set to be large enough to hold the largest button in it without
           squeezing it. Swallowed windows are simply expected to be comfortable with the button
           size they get from this scheme. If a particular configuration requires more space for
           a swallowed window, it can be set in that button’s configuration line using the option
           "Size width height". This will tell FvwmButtons to give this button at least width by
           height pixels inside the relief and padding.

DYNAMICAL ACTIONS

       A running FvwmButtons instance may receive some commands at run time. This is achieved
       using the fvwm command

           SendToModule FvwmButtons-Alias <action> <params>

       Supported actions:

       ChangeButton button_id options
           can be used to change the title or icon of a button at run time. button_id is the id
           of the button to change as specified using the Id button option. It may also be a
           number, in this case the button with the given number is assumed. And finally,
           button_id may be in the form +x+y, where x and y are a column number and a row number
           of the button to be changed. It is possible to specify multiple option pairs (name
           with value) by delimiting them using comma. Currently options include Title,
           ActiveTitle, PressTitle, Colorset, Icon, ActiveIcon and PressIcon. These options work
           like the configuration options of the same name.

       ExpandButtonVars button_id command
           replaces variables present in the command exactly like in the Action button option and
           then sends the command back to fvwm. button_id has the same syntax as described in
           ChangeButton above.

       PressButton button_id [mouse_button]
           simulates a mouse click on a button. button_id is the id of the button to press as
           specified using the Id button option and mouse_button is the number of mouse button
           used to click on the button e.g "1" for the left mouse button etc. Quotes around the
           number are not necessary. If mouse_button option is omitted, mouse button 1 is
           assumed. This command behaves exactly as if the mouse button was pressed and released
           on the button on in question.

       Silent
           This prefix may be specified before other actions. It disables all possible error and
           warning messages.

           Example

           *FvwmButtons: (Id note1, Title "13:30 - Dinner", Icon clock1.xpm)

           SendToModule FvwmButtons Silent \
             ChangeButton note1 Icon clock2.xpm, Title "18:00 - Go Home"

SAMPLE CONFIGURATION

       The following are excerpts from a .fvwm2rc file which describe FvwmButtons initialization
       commands:

           ##########################################################
           # Load any modules which should be started during fvwm
           # initialization

           # Make sure FvwmButtons is always there.
           AddToFunc StartFunction  "I" Module FvwmButtons

           # Make it titlebar-less, sticky, and give it an icon
           Style "FvwmButtons"        Icon toolbox.xpm, NoTitle, Sticky

           # Make the menu/panel look like CDE
           Style "WinOps" Title, NoHandles, BorderWidth 0
           Style "WinOps" NoButton 2, NoButton 4, Sticky
           Style "Tools" Title, NoHandles, BorderWidth 0
           Style "Tools" NoButton 2, NoButton 4, Sticky

           ##########################################################
           DestroyModuleConfig FvwmButtons: *
           *FvwmButtons: Fore Black
           *FvwmButtons: Back rgb:90/80/90
           *FvwmButtons: Geometry -135-5
           *FvwmButtons: Rows 1
           *FvwmButtons: BoxSize smart
           *FvwmButtons: Font -*-helvetica-medium-r-*-*-12-*
           *FvwmButtons: Padding 2 2

           *FvwmButtons: (Title WinOps, Panel WinOps \
             "Module FvwmButtons -transientpanel WinOps")
           *FvwmButtons: (Title Tools, Panel Tools   \
             "Module FvwmButtons -transientpanel Tools")

           *FvwmButtons: (Title Resize, Icon resize.xpm,  Action Resize)
           *FvwmButtons: (Title Move,   Icon arrows2.xpm, Action Move  )
           *FvwmButtons: (Title Lower,  Icon Down,        Action Lower )
           *FvwmButtons: (Title Raise,  Icon Up,          Action Raise )
           *FvwmButtons: (Title Kill,   Icon bomb.xpm,    Action Destroy)

           *FvwmButtons: (1x1,Container(Rows 3,Frame 1))
           *FvwmButtons: (Title Dopey ,Action                          \
               `Exec "big_win" xterm -T big_win -geometry 80x50 &`)
           *FvwmButtons: (Title Snoopy, Font fixed, Action             \
               `Exec "small_win" xterm -T small_win &`)
           *FvwmButtons: (Title Smokin')
           *FvwmButtons: (End)

           *FvwmButtons: (Title Xcalc, Icon rcalc.xpm,                 \
                        Action `Exec "Calculator" xcalc &`)
           *FvwmButtons: (Title XMag, Icon magnifying_glass2.xpm,      \
                        Action `Exec "xmag" xmag &`)
           *FvwmButtons: (Title Mail, Icon mail2.xpm,                  \
                        Action `Exec "xmh" xmh &`)
           *FvwmButtons: (4x1, Swallow "FvwmPager" `FvwmPager 0 3`     \
                        Frame 3)

           *FvwmButtons: (Swallow(UseOld,NoKill) "xload15" `Exec xload \
                -title xload15 -nolabel -bg rgb:90/80/90 -update 15    \
                -geometry -3000-3000 &`)

       The last lines are a little tricky - one spawns an FvwmPager module, and captures it to
       display in a quadruple width button. is used, the Pager will be as big as possible within
       the button’s relief.

       The final line is even more magic. Note the combination of UseOld and NoKill, which will
       try to swallow an existing window with the name "xload15" when starting up (if failing:
       starting one with the specified command), which is un-swallowed when ending FvwmButtons.
       The swallowed application is started with "-geometry -3000-3000" so that it will not be
       visible until its swallowed.

       The other panels are specified after the root panel:

           ########## PANEL WinOps
           DestroyModuleConfig WinOps: *
           *WinOps: Back bisque2
           *WinOps: Geometry -3-3
           *WinOps: Columns 1

           *WinOps: (Title Resize, Icon resize.xpm,  Action Resize)
           *WinOps: (Title Move,   Icon arrows2.xpm, Action Move  )
           *WinOps: (Title Lower,  Icon Down,        Action Lower )
           *WinOps: (Title Raise,  Icon Up,          Action Raise )

           ########## PANEL Tools
           DestroyModuleConfig Tools: *
           *Tools: Back bisque2
           *Tools: Geometry -1-1
           *Tools: Columns 1

           *Tools: (Title Kill,    Icon bomb.xpm,    Action Destroy)

       The color specification rgb:90/80/90 is actually the most correct way of specifying
       independent colors in X, and should be used instead of the older #908090. If the latter
       specification is used in your configuration file, you should be sure to escape the hash in
       any of the commands which will be executed, or fvwm will consider the rest of the line a
       comment.

       Note that with the x/y geometry specs you can easily build button windows with gaps. Here
       is another example. You can not accomplish this without geometry specs for the buttons:

           ##########################################################
           # Another example
           ##########################################################

           # Make it titlebar-less, sticky, and give it an icon
           Style "FvwmButtons"        Icon toolbox.xpm, NoTitle, Sticky

           DestroyModuleConfig FvwmButtons: *
           *FvwmButtons: Font        5x7
           *FvwmButtons: Back rgb:90/80/90
           *FvwmButtons: Fore        black
           *FvwmButtons: Frame       1
           # 9x11 pixels per button, 4x4 pixels for the frame
           *FvwmButtons: Geometry    580x59+0-0
           *FvwmButtons: Rows        5
           *FvwmButtons: Columns     64
           *FvwmButtons: BoxSize     fixed
           *FvwmButtons: Padding     1 1

           # Pop up a module menu directly above the button.
           *FvwmButtons: (9x1+3+0, Padding 0, Title "Modules",   \
             Action `Menu Modulepopup rectangle \
             $widthx$height+$lleft+$top o+50 -100m`)

           # first row of buttons from left to right:
           *FvwmButtons: (3x2+0+1, Icon my_lock.xpm, Action `Exec xlock`)
           *FvwmButtons: (3x2+3+1, Icon my_recapture.xpm, Action Recapture)
           *FvwmButtons: (3x2+6+1, Icon my_resize.xpm, Action Resize)
           *FvwmButtons: (3x2+9+1, Icon my_move.xpm, Action Move)
           *FvwmButtons: (3x2+12+1, Icon my_fvwmconsole.xpm,     \
             Action 'Module FvwmConsole')

           # second row of buttons from left to right:
           *FvwmButtons: (3x2+0+3, Icon my_exit.xpm, Action QuitSave)
           *FvwmButtons: (3x2+3+3, Icon my_restart.xpm, Action Restart)
           *FvwmButtons: (3x2+6+3, Icon my_kill.xpm, Action Destroy)
           *FvwmButtons: (3x2+9+3, Icon my_shell.xpm, Action 'Exec rxvt')

           # big items
           *FvwmButtons: (10x5, Swallow (NoKill, NoCLose)        \
             "FvwmPager" 'FvwmPager * * -geometry 40x40-1024-1024')
           *FvwmButtons: (6x5, Swallow "FvwmXclock" `Exec xclock \
             -name FvwmXclock -geometry 40x40+0-3000 -padding 1  \
             -analog -chime -bg rgb:90/80/90`)
           *FvwmButtons: (13x5, Swallow (NoClose)                \
           "FvwmIconMan" 'Module FvwmIconMan')
           *FvwmButtons: (20x5, Padding 0, Swallow "xosview"     \
             `Exec /usr/X11R6/bin/xosview -cpu -int -page -net   \
             -geometry 100x50+0-3000 -font 5x7`)

BUGS

       The action part of the Swallow option must be quoted if it contains any whitespace
       character.

HISTORY

       The FvwmButtons program, and the concept for interfacing this module to the Window
       Manager, are all original work by Robert Nation.

       Originally, FvwmGoodStuff preceded FvwmButtons.

AUTHOR

       Robert Nation (1993). Somewhat enhanced by Jarl Totland (1996), Jui-Hsuan Joshua Feng,
       Scott Smedley.

                                            2022-10-07                             FVWMBUTTONS(1)