## NAME

FvwmIconMan - an Fvwm Icon Manager

## SYNOPSIS

FvwmIconMan is spawned by fvwm, so no command line invocation will work.

## DESCRIPTION

FvwmIconMan is an icon manager modeled after the TWM icon manager. The user may have multiple icon managers, each of which are armed with a list of window types which it manages. For example, the user may have one manager which lists only emacs windows, and another which lists everything else. You may also specify what resolution each icon manager uses, for example, one icon manager may manage windows on all desks, and another may manage only those on the current desk, or page.

Unlike the TWM icon manager, FvwmIconMan is limited in only having the icons listed vertically. Also unlike the TWM icon manager, it sports a three dimensional look (when the display depth is sufficient).

You may bind fvwm functions to mouse buttondown events, and to the event where the mouse enters one of the buttons. For example, you could bind the first mouse button to the Iconify function, and the second mouse button to the Identify function.

FvwmIconMan can be set to display which window currently has the keyboard focus, and by binding the select event (see below) to the fvwm Focus function, you can emulate the TWM icon manager's behavior. Unfortunately, the Focus function warps the cursor to the target window. This FvwmIconMan distribution includes a patch to fvwm 2.0.41 which modifes the behavior of Focus so that it takes an argmument to control whether or not it warps the cursor.

## INITIALIZATION

During initialization, FvwmIconMan searches though the fvwm configuration file for the options which are described below. It is highly recommended that you make FvwmIconMan be a sticky window. And if you want to make use of the followfocus option, and/or binding an action to Focus, then you should make FvwmIconMan clicktofocus.

## INVOCATION

FvwmIconMan can be invoked by inserting the line 'Module FvwmIconMan' in the .fvwmrc file. If FvwmIconMan is to be spawned during fvwm's initialization, then this line should be placed in the InitFunction and ResetFunction declarations, or it can be bound to a menu, mouse button, or keystroke to invoke it later. FvwmIconMan should be placed in the ModulePath (defined in the .fvwmrc file) in order for fvwm to find it.

## CONFIGURATION OPTIONS

With the exception of the nummanagers option, all of the options may be defined on a per-manager basis. So, for example, the user may have his emacs manager with a red foreground, and his xterm manager with a blue one. A configuration line may therefore have one of two forms:

*FvwmIconMan*optionname optionvalue
  To specify that the optionname takes the value optionvalue for all managers.
*FvwmIconMan*managerid*optionname optionvalue
  To specify that the option optionname takes the value optionvalue for manager managerid.

  The following options may be specified:

*FvwmIconMan*nummanagers num
  num is a positive integer specifying the total number of icon managers. Since FvwmIconMan would like to know how many managers there are before handling any manager specific options, this should come first. Default is 1.

*FvwmIconMan*[id*]resolution resolution
  Specifies when the manager will display an entry for a certain window. resolution may take one of the following values: global, desk, or page. If global, then all windows of the appropriate type (see the show and dontshow options below) will be shown. If desk, then only those windows on the current desk will be down. And if page, then only those windows on the current page will be shown. Default is global.

*FvwmIconMan*[id*]showtitle boolean
  If true, then print the window title names in the manager, if false, then print the icon names. Default is false.

*FvwmIconMan*[id*]font font
  Specifies the font to be used for labeling the buttons.

*FvwmIconMan*[id*]geometry geometry
  Specified the geometry of the manager. If the geometry is specified with a negative y coordinate, then the window manager will grow upwards. Otherwise, it will shrink downwards.

*FvwmIconMan*[id*]foreground foreground
  Specifies the default foreground color.

*FvwmIconMan*[id*]background background
  Specifies the default background color.

*FvwmIconMan*[id*]plainbutton style [forecolor backcolor]
  Specifies how normal buttons look. style may be one of flat, up, or down, and describes how the button is drawn. The color options are both optional, and if not set, then the default colors are used. If on a monochrome screen, then the style option is ignored, but must still be set.

*FvwmIconMan*[id*]selectbutton style [forecolor backcolor]
  Same as the plainbutton option, but specifies the look of buttons when the mouse is over them.

*FvwmIconMan*[id*]focusbutton style [forecolor backcolor]
  Same as the plainbutton option, but specifies the look of buttons whose windows have the keyboard focus.

*FvwmIconMan*[id*]focusandselectbutton style [forecolor backcolor]
  Same as the plainbutton option, but specifies the look of buttons which are both selected, and have the keyboard focus.

*FvwmIconMan*[id*]action event response[,response...]
  Tells FvwmIconMan to send the commands in response to fvwm when event is done. Event may take on one of the values: select, click1, click2, or click3. Default is iconify for all three buttons and nop for select. Select refers to the cursor entering a button in the manager.

  The two following options control which windows get handled by which managers. A manager can get two lists, one of windows to show, and one of windows to ignore. If only the show list is given, then that manager will show only the windows in the list. If only the dontshow list is given, then the manager will show all windows except those in the list. If both lists are given, then a window will be shown if it is not in the dontshow list, and in the show list. And finally, if neither list is given, then the manager will handle all windows. Each list is made up of patterns of the form type=pattern, where type is one of class, resource, title, or icon, and pattern is a regular expression of the same format used in the fvwm style command. Quotes around the pattern will be taken as part of the regular expression. If a window could be handled by more than one manager, then the manager with the lowest id gets it.

*FvwmIconMan*[id*]show pattern list
  If a window matches one of the patterns in the list, then it may be handled by this manager.

*FvwmIconMan*[id*]dontshow pattern list
  If a window matches one of the patterns in the list, then it may not be handled by this manager.

*FvwmIconMan*[id*]followfocus boolean
  If boolean is true, then the button appearance reflects which window currently has focus. Default is false.

*FvwmIconMan*[id*]sort boolean
  If boolean is true, then the icon manager is kept sorted. Default is true.

## SAMPLE CONFIGURATION

This first example is of a the simplest invocation of FvwmIconMan, which only has one manager, and handles all windows:

    ##############################################################

    # Load any modules which should be started during

    # fvwm initialization

    ModulePath /usr/lib/X11/fvwm:/usr/bin/X11

    Module FvwmIconMan

    # Make FvwmIconMan title-bar-less, sticky, and give it an icon

    Style "Fvwm*"      Icon toolbox.xpm,NoTitle,NoHandles,Sticky

    Style "FvwmIconMan" HandleWidth 5, Handles, BorderWidth 5

    ##############################################################

    ##############################################################

    #Definitions used by the modules

    *FvwmIconMan*nummanagers 1

    *FvwmIconMan*resolution  global

    *FvwmIconMan*background  slategrey

    *FvwmIconMan*foreground  white

    *FvwmIconMan*font        7x13

    *FvwmIconMan*geometry    194x100-0+73

This example is my personal configuration. It has two managers, one for emacs and one for everything else, minus things with no icon title. Only windows on the current page are displayed. Notice the argument to Focus in the select action. This only works if you apply the included patch for fvwm. A nonzero argument to focus, or no argument results in Focus warping the cursor to the target window, and the value of 0 makes Focus not warp the cursor. Note how the geometry and show options are specified per manager, and the others are common to all:

    *FvwmIconMan*numManagers 2

    *FvwmIconMan*Resolution  page

    *FvwmIconMan*background  steelblue

    *FvwmIconMan*foreground  white

    *FvwmIconMan*font        7x13

    *FvwmIconMan*action      click1 Iconify

    *FvwmIconMan*action      click2 Iconify

    *FvwmIconMan*action      click3 Module "FvwmIdent" FvwmIdent

    *FvwmIconMan*action      select Focus 0

    *FvwmIconMan*showtitle   false

    *FvwmIconMan*followfocus true

    *FvwmIconMan*sort        true

    *FvwmIconMan*plainbutton          up white steelblue

    *FvwmIconMan*selectbutton         down white steelblue

    *FvwmIconMan*focusbutton          up white brown

    *FvwmIconMan*focusandselectButton down white brown

    *FvwmIconMan*1*geometry   194x100-204-90

    *FvwmIconMan*1*show       resource=emacs resource=gemacs

    *FvwmIconMan*2*geometry   194x100-0-90

    *FvwmIconMan*2*dontshow   icon=Untitled

## UNFINISHED BUSINESS

There is one bug that I know of. A honest to goodness solution to this would be appreciated. When an icon manager is set to grow upwards, on some machines it may wander occasionally.

When a manager is in page resolution, and the page is switched, the manager updates the windows after every fvwm event comes in, causing it to rapidly grow and shrink until it finally settles into the new configuration. This doesn't happen when in desk resolution.

It doesn't handle windows without resource names as gracefully as it should.

## AUTHOR

Brady Montz (bradym@cs.arizona.edu).

## THANKS

Thanks to David Berson (berson@cs.pitt.edu).