Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
FVWMBUTTONS(1)			  Fvwm Modules			  FVWMBUTTONS(1)

NAME
     FvwmButtons - the fvwm buttonbox module

SYNOPSIS
     Module  FvwmButtons [-g geometry] [-transient | -transientpanel] [name[con-
     figfile]]

     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. Fvwm-
     Buttons only works when fvwm is used as the window manager.

     The  buttonbox  can be of any configuration or geometry, and can have mono-
     chrome 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  configura-
     tion 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 use-
     ful 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 Op-
     tionalName' in the .fvwm2rc file. This should be placed in  the  StartFunc-
     tion 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",  in-
     stead of the default "*FvwmButtons".

CONFIGURATION OPTIONS
     The following commands are understood by FvwmButtons:

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

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

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

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

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

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

     *FvwmButtons: ActiveColorset colorset
	 Tells	the module to use colorset colorset for the background color/im-
	 age 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/im-
	 age 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	unspeci-
	 fied,	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  speci-
	 fied, 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 neg-
	 ative number, the relief is inverted. This makes the button sunken nor-
	 mally 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 pix-
	 els, 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 dou-
	 ble quotes) for a transparent background.

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

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

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

	 geometry
	     Specifies the size and position of the button within  the	FvwmBut-
	     tons  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  acti-
	     vated 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  in-
	     stead  (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 re-
	     placed 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  as-
	     signed  to a button that swallowed an application window (see Swal-
	     low 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 exe-
	     cuted 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 re-
	     lief 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  ap-
	     plication	and  a	simple	button.  To apply it to a button or con-
	     tainer, 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 applications does
	     not have this restriction but depends entirely on the swallowed ap-
	     plication. It may work as you wish, but since it involves	fiddling
	     with  other  applications'  windows  there is no guarantee for any-
	     thing. 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 back-
	     ground 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 swal-
	     lowed module. You should use the colorset in the module  configura-
	     tion.  If	the  swallowed	module	has a transparent colorset back-
	     ground, then the FvwmButtons background (and not  the  button  col-
	     orset)  is  seen by transparency of the background of the swallowed
	     module. Refer to the fvwm man page for details about colorsets.

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

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

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

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

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

	     Typically you will want to at least give the container a size  set-
	     ting widthx_height_.

	 End
	     Specifies	that  no  more	buttons are defined for the current con-
	     tainer, 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  dis-
	     play  on the button when the mouse is hovering above the button. If
	     no ActiveIcon is specified, the image specified  by  Icon	is  dis-
	     played (if there is one).

	 PressIcon filename
	     The  name	of an image file, containing an alternative icon to dis-
	     play 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" sec-
	     tion.

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

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

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

	 Panel [ (options) ] hangon command
	     Panels can be swallowed exactly like windows are swallowed by  but-
	     tons  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 ap-
	     plication)  opens	with a sliding animation. The options can be any
	     of the flags described for the Swallow command. In addition  a  di-
	     rection  '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 anima-
	     tion in milliseconds. Use zero for no delay. The maximum  delay  is
	     10  seconds (10000). It doesn't make any sense to use the delay op-
	     tion 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 No-
	     Hints.

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

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

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

	     The argument context-window can be one of: Button, Module or  Root.
	     The  context-window  is the window from which panel percentage off-
	     sets 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  de-
	     fines the vertical (sliding up and down) or the horizontal (sliding
	     left  and right) position of the Panel on the line segment. For ex-
	     ample, for a sliding up if you use a left pos, then the  left  bor-
	     ders 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  in-
	     terpreted as a percentage of the context window's width (height). A
	     trailing  "p" changes the interpretation to mean "pixels". All off-
	     set 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  op-
	     tion  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 pro-
	     gram 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 proto-
	     col. 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 it-
	     self with command. The hangon string may contain  wildcard  charac-
	     ters  ('*')  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 ac-
	     tion:

		   *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 simi-
	     lar  to  the option Title name. If the title field is "-", no title
	     is displayed. The icon field is similar to the  option  Icon  file-
	     name.  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	FvwmBut-
	     tons 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 per-
	     formed. The hangon string may  contain  wildcard  characters  ('*')
	     that match any substring. If the quoted portion contains no charac-
	     ters, 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 un-
	     touched. 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  pre-
	     processor 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 in-
     formation.

   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 applica-
     tion 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 but-
     ton. 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 ap-
     plications 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 '*FvwmBut-
     tons' 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 spec-
     ified 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  direc-
     tion 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 exam-
     ple  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 *FvwmBut-
     tonsPanel:

	 *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  sim-
     ply 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 FvwmBut-
     tons 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)'  in-
     stead.  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 configu-
     ration lines for the panel instead. Use the same name in  your  Style  com-
     mands:

	 *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 recur-
     sively, on each container including the buttonbox itself, the following al-
     gorithm.

     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 calcu-
	 lates 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  posi-
	 tion  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 op-
	 tion smart is used.

     Containers
	 Containers  are  arranged by the same algorithm, in fact they are shuf-
	 fled 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-swal-
	 lowing 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. but-
	 ton_id is the id of the button to change as specified using the Id but-
	 ton 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 PressI-
	 con. 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 pos-
	 sible 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 ap-
     plication 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)

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

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

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

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

     Originally, FvwmGoodStuff preceded FvwmButtons.

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

				   2026-06-27			  FVWMBUTTONS(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=FvwmButtons&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>

home | help