STANNIX Solutions for the Real World


Manual: Fvwm2Buttons

FvwmButtons(1)					Fvwm Modules				      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 rep‐
       resent 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 tran‐
       sient 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	 se‐
       lected.

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	ini‐
       tialization. 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 "*Fvwm‐
       Buttons".

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 ex‐
	      actly 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	 un‐
	      til  all	buttons are placed. For the best tolerance of configuration errors use the smart op‐
	      tion.

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

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

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

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

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

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

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

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

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

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

       *FvwmButtons: ButtonGeometry geometry
	      This option works like the Geometry option except that the size is the size of a	single	but‐
	      ton.   The size of the whole FvwmButtons window is calculated by multiplying the button dimen‐
	      sion 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 trans‐
	      parent 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	com‐
	      mas or whitespace, can be given a button:

	      geometry
		     Specifies	the  size  and	position of the button within the FvwmButtons window or con‐
		     tainer. 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 val‐
		     ues 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	 re‐
		     turn  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	but‐
		     ton  pressed. $-left, $-right, $-top and $-bottom are substituted likewise, but the co‐
		     ordinates 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	con‐
		     tainers  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 applica‐
		     tions 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'	win‐
		     dows  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  back‐
		     ground, then the FvwmButtons background (and not the button colorset) is seen by trans‐
		     parency  of  the background of the swallowed module. Refer to the fvwm man page for de‐
		     tails 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	but‐
		     ton,  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 configura‐
		     tion 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 but‐
		     tons 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 speci‐
		     fied 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 al‐
		     phabetic.	See also the "DYNAMICAL ACTIONS" section.

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

	      NoSize This  option  specifies  that this button will not be considered at all when making the
		     initial calculations of button sizes. Useful for the odd button that gets just a couple
		     of pixels too large to keep in line, and therefore blows up your whole buttonbox.	"No‐
		     Size" 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	 de‐
		     scribed  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 dis‐
		     play  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  calcu‐
		     lating  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 posi‐
		     tion. 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 con‐
		     tents 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	 re‐
		     places  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 argu‐
		     ment  "-geometry -3000-3000" is used so that the window is first drawn out of sight be‐
		     fore 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 legiti‐
		     mate 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	let‐
		     ters 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 ti‐
		     tle 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	win‐
		     dow,  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 com‐
		     mands 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 charac‐
		     ters; 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 CON‐
       FIGURATIONS" 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	mod‐
       ule, 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	but‐
       ton when it starts up but instead hidden from view.  When you press the button for the panel the win‐
       dow  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 an‐
       other 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 '-tran‐
       sient'.

       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 '(in‐
       dicator)' 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  smooth‐
       ness  of	 the  sliding animation. Please refer to the description of the Panel option for further de‐
       tails.

   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  '
       and  add	  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 op‐
       tion works.

ARRANGEMENT ALGORITHM
       FvwmButtons tries to arrange its buttons as best it can, by using recursively, on each container	 in‐
       cluding 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	but‐
	      ton.  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 but‐
	      ton 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	con‐
	      tainer  is set to be large enough to hold the largest button in it without squeezing it. Swal‐
	      lowed 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  

       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 Pres‐
	      sIcon.  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 swal‐
       low 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	col‐
       ors  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	 ap‐
       plies.

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

3rd Berkeley Distribution		   19 October 2022 (2.7.0)			      FvwmButtons(1)