Provided by: fvwm_2.6.5.ds-4.1_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
              FvwmTheme 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: (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 man page of the FvwmTheme module 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
                     widthxheight.

              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 therefor
                     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.

                     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 dynamical actions.  This is achived using
       the fvwm command

       SendToModule FvwmButtons-Alias <action> <params>

       Supported actions:

       ChangeButton button_id options
              where 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, Icon, ActiveIcon and
              PressIcon.

       ExpandButtonVars button_id command
              where button_id has the same syntax as described in ChangeButton above. Command may
              be any fvwm command with variables $var that are expanded if supported.

       PressButton button_id [mouse_button]
              where  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  left  mouse  button  etc. Quotes around the number is not needed. If
              mouse_button option is omitted "1" assumed. This command behaves  exactly  like  if
              the button in question was pressed using the mouse.

       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.

COPYRIGHTS

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

       Copyright 1993, Robert Nation. No guarantees or warranties or  anything  are  provided  or
       implied  in  any way whatsoever. Use this program at your own risk. Permission to use this
       program for any purpose is given, as long as the copyright is kept intact.

       Further modifications and patching by Jarl Totland, copyright 1996.  The  statement  above
       still applies.

AUTHOR

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