FvwmButtons(1)


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

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.





Opportunity


Personal Opportunity - Free software gives you access to billions of dollars of software at no cost. Use this software for your business, personal use or to develop a profitable skill. Access to source code provides access to a level of capabilities/information that companies protect though copyrights. Open source is a core component of the Internet and it is available to you. Leverage the billions of dollars in resources and capabilities to build a career, establish a business or change the world. The potential is endless for those who understand the opportunity.

Business Opportunity - Goldman Sachs, IBM and countless large corporations are leveraging open source to reduce costs, develop products and increase their bottom lines. Learn what these companies know about open source and how open source can give you the advantage.





Free Software


Free Software provides computer programs and capabilities at no cost but more importantly, it provides the freedom to run, edit, contribute to, and share the software. The importance of free software is a matter of access, not price. Software at no cost is a benefit but ownership rights to the software and source code is far more significant.


Free Office Software - The Libre Office suite provides top desktop productivity tools for free. This includes, a word processor, spreadsheet, presentation engine, drawing and flowcharting, database and math applications. Libre Office is available for Linux or Windows.





Free Books


The Free Books Library is a collection of thousands of the most popular public domain books in an online readable format. The collection includes great classical literature and more recent works where the U.S. copyright has expired. These books are yours to read and use without restrictions.


Source Code - Want to change a program or know how it works? Open Source provides the source code for its programs so that anyone can use, modify or learn how to write those programs themselves. Visit the GNU source code repositories to download the source.





Education


Study at Harvard, Stanford or MIT - Open edX provides free online courses from Harvard, MIT, Columbia, UC Berkeley and other top Universities. Hundreds of courses for almost all major subjects and course levels. Open edx also offers some paid courses and selected certifications.


Linux Manual Pages - A man or manual page is a form of software documentation found on Linux/Unix operating systems. Topics covered include computer programs (including library and system calls), formal standards and conventions, and even abstract concepts.