FvwmIconMan(1)
Okay bestie, let's get into FvwmIconMan(1) ๐ฆ from the Fvwm Modules crew, and it is SO good ๐
โจ NAME โจ
FvwmIconMan is basically an icon manager for fvwm ๐
โจ SYNOPSIS โจ
FvwmIconMan is spawned by fvwm, so no command line invocation will work ๐ Don't even try typing it into your terminal, bestie.
โจ DESCRIPTION โจ
FvwmIconMan is an icon manager modeled after the TWM icon manager ๐ธ You can run multiple icon managers, and each one is set up with its own list of window types to manage. For example, you could have one manager that only shows emacs windows and another that shows everything else ๐
You can also choose what resolution each icon manager uses. One might manage windows on all desks, while another only handles the ones on the current desk, page or screen โจ
FvwmIconMan can display the miniature icons that fvwm provides for its managed windows ๐ง Managers can have a maximum number of columns (so they grow vertically), a maximum number of rows (so they grow horizontally), or a fixed size. They adjust the size of the window buttons to fit, kind of like the win95 Taskbar ๐ And if support for the X Shape extension was compiled in, the manager windows can be shaped ๐ฆ
You can attach actions to mouse or key events. For example, you could bind the first mouse button to iconify the selected window, and set up the arrow keys to navigate the manager window without touching the mouse ๐ซถ
FvwmIconMan can also show which window currently has the keyboard focus. If you bind the select event (see below) to the fvwm Focus function, you can copy the TWM icon manager's behavior. Iconic ๐ญ
โจ INITIALIZATION โจ
During initialization, FvwmIconMan searches through the fvwm configuration file for the options described below ๐ It's highly recommended that you make FvwmIconMan a sticky window ๐ If you want to use the followfocus option and/or bind an action to Focus, then you should make FvwmIconMan clicktofocus ๐
Also, when using the Shape option, it's recommended that the FvwmIconMan window not be decorated at all by fvwm. Trust me on this one ๐
โจ INVOCATION โจ
You can invoke FvwmIconMan by adding the line Module FvwmIconMan to your .fvwm2rc file ๐ If you want it spawned during fvwm's initialization, put that line in the StartFunction declarations. Or you can bind it to a menu, a mouse button, or a keystroke so it shows up later ๐
If you want to run FvwmIconMan in a transient mode, like the built-in window list, pass -Transient as an argument. This invocation will do nicely:
Module FvwmIconMan -Transient
In this mode, FvwmIconMan pops up one manager window directly under the cursor ๐ฑ๏ธ When you release the mouse button, it runs the appropriate action and then exits. It's a little complicated, because you can tell FvwmIconMan to create multiple manager windows, and that's unsuitable when running transiently. So when it's running transiently, FvwmIconMan only creates one manager window. To set options for that manager window, use the manager id transient ๐ฆ
FvwmIconMan may also accept an alias name as an argument. For example:
Module FvwmIconMan FvwmIconMan-Variant2
โจ CONFIGURATION OPTIONS REFERENCE CHART โจ
FvwmIconMan has collected quite a few options ๐ญ I'm guessing others share my dislike of paging through a long man page, so here's a terse cheat sheet. The next section has more detail on each one ๐
NumManagersโ number of managers (default1)Actionโ binds a command to an event (defaultMouse 0 N sendcommand Iconify)Backgroundโ default background (defaultgray)ButtonGeometryโ size of a button in pixelsColorsetโ default colorsetDontShowโ list of windows to ignoreDrawIconsโ use mini icons (defaultfalse)FocusAndSelectButtonโ (defaultflat grey black)FocusAndSelectColorsetFocusButtonโ style for focused buttons (defaultup grey black)FocusColorsetFollowFocusโ show which window has focus (defaultfalse)Fontโ (default8x13)Foregroundโ default text color (defaultwhite)Formatโ describes the button label (default"%c: %i")IconNameโ manager icon name (defaultFvwmIconMan)IconAndSelectButtonโ (defaultup black grey)IconAndSelectColorsetIconButtonโ style for icon buttons (defaultup black grey)IconColorsetManagerGeometryโ size of manager in buttons (default0x1)MaxButtonWidthโ max width of a buttonMaxButtonWidthByColumnsNoIconActionโ animate iconification (defaultNOP)PlainButtonโ style for normal buttons (defaultup black grey)PlainColorsetReliefThicknessโ size of button relief (default2)Resolutionโglobal/desk/page/screen(defaultpage)Reverseโnormal,iconornone(defaultnone)SelectButtonโ style for selected buttons (defaultflat black grey)SelectColorsetShapeโ use shape extension (defaultfalse)Showโ list of windows to showShowOnlyIconsโ only icons visible (defaultfalse)ShowNoIconsโ icons are not displayed (defaultfalse)ShowTransientโ transient windows visible (defaultfalse)ShowOnlyFocusedโ only focused visible (defaultfalse)Sortโ keep managers sorted (defaultname)SortWeightโ weight for sortingTipsโ Tool Tips mode (defaultnone)TipsDelaysโ Tool Tips mapping delays (default1000 300)TipsFontโ font for Tool Tips (defaultdefault fvwm font)TipsColorsetโ Tool Tips colorset (default0)TipsFormatโ describes the Tips label (default: theFormatvalue)TipsBorderWidthโ Tool Tips border size (default1)TipsPlacementโ Tips placement vs button (defaultupdown)TipsJustificationโ Tips justification vs button (defaultleftup)TipsOffsetsโ Tips placement offsets (default3 2)Titleโ manager title (defaultFvwmIconMan)TitleButtonโ style for title button (defaultraisededge black grey)TitleColorsetUseWinListโ honor WinListSkip? (defaulttrue)
โจ CONFIGURATION OPTIONS โจ
Every option except nummanagers can be set per manager ๐ So you could give your emacs manager a red foreground and your xterm manager a blue one ๐ A configuration line can take one of two forms:
*FvwmIconMan: OptionName OptionValue
Use this to set OptionName to OptionValue for all managers ๐ธ
*FvwmIconMan: ManagerId OptionName OptionValue
Use this to set OptionName to OptionValue for one specific manager. ManagerId can be a positive integer or the string transient. An integer id points to the managers FvwmIconMan creates when running normally, and the id transient points to the single manager it creates when running transiently ๐ฆ
The old syntax, which uses an asterisk instead of white spaces before ManagerId and OptionName, still works, but it's obsolete now ๐
The following options may be specified:
*FvwmIconMan: NumManagers numโnumis a positive integer for the total number of icon managers. FvwmIconMan needs to know how many managers there are before it handles any manager-specific options, so this one has to come first ๐ The default is1.*FvwmIconMan: [id] Action type bindingโ binds a FvwmIconMan command to an event.typecan beKey,Mouse, orSelect. Actions are covered in the ACTIONS section right after this one ๐*FvwmIconMan: [id] Background backgroundโ sets the default background color ๐ธ*FvwmIconMan: [id] ButtonGeometry geometryโ sets the initial geometry of an individual button in pixels. If the height is0, the button height comes from the font size. X and Y coordinates are ignored ๐*FvwmIconMan: [id] Colorset colorsetโ the default colorset. It overridesbackgroundandforeground๐*FvwmIconMan: [id] DrawIcons valueโ if your fvwm can use mini icons, this decides whether FvwmIconMan shows them. If it can't, you get an error message ๐ญtruemeans mini icons show for iconified windows,falsemeans they're never shown, andalwaysmeans they show for all windows โจ*FvwmIconMan: [id] FocusAndSelectButton style [forecolor backcolor]โ same asplainbutton, but for buttons that are both selected and have the keyboard focus ๐*FvwmIconMan: [id] FocusAndSelectColorset colorsetโ works likefocusandselectbuttonbut with colorsets instead. The style can still only be applied withfocusandselectbutton๐ซถ*FvwmIconMan: [id] FocusButton style [forecolor backcolor]โ same asplainbutton, but for buttons whose windows have the keyboard focus ๐*FvwmIconMan: [id] FocusColorset colorsetโ works likefocusbuttonbut with colorsets instead. The style can still only be applied withfocusbutton๐*FvwmIconMan: [id] FollowFocus booleanโ iftrue, the button appearance shows which window currently has focus. The default isfalse๐*FvwmIconMan: [id] Font fontโ the font for button labels. The default is8x13๐ค*FvwmIconMan: [id] Foreground foregroundโ sets the default foreground color ๐จ*FvwmIconMan: [id] Format formatstringโ a printf-style format string describing the text printed in the manager window for each managed window. The flags are%t,%i,%c, and%r, which stand for the window's title, icon title, class, or resource name. The default is"%c: %i"๐
Warning: m4 reserves the word format, so if you use m4, take appropriate action ๐
*FvwmIconMan: [id] IconName iconstringโ sets the window icon name for that manager window.iconstringcan be a single word or a string in quotes. The default is"FvwmIconMan"๐ฆ*FvwmIconMan: [id] IconAndSelectButton style [forecolor backcolor]โ same asplainbutton, but for buttons whose windows are iconified and selected ๐*FvwmIconMan: [id] IconButton style [forecolor backcolor]โ same asplainbutton, but for buttons whose windows are iconified ๐ง*FvwmIconMan: [id] IconAndSelectColorset colorsetโ works likeIconAndSelectButtonbut with colorsets instead. The style can still only be applied withiconbuttonโจ*FvwmIconMan: [id] IconColorset colorsetโ ๐จ Works just likeiconbutton, but it uses colorsets instead of plain colours. Thestylesetting can still only be applied withiconbutton, so don't go looking for it here ๐*FvwmIconMan: [id] ManagerGeometry geometryโ ๐ Sets the starting size of the manager, measured in buttons. If height is0, the manager uses width columns and grows vertically once it has more than width windows. If width is0, it uses height rows and grows horizontally instead. If both are nonzero, the manager window is locked at exactly that size and stays that way. As columns get created, the buttons shrink to fit. If the geometry has a negative y coordinate, the window manager grows upwards. Otherwise it grows downwards โจ*FvwmIconMan: [id] MaxButtonWidth widthโ ๐ Sets a cap on how wide a button can be, in pixels. There's no cap by default, and0resets things back to that default. This only matters for a non-growing manager, which is one whereManagerGeometrygives a nonzero width and height ๐ซถ*FvwmIconMan: [id] MaxButtonWidthByColumns colโ ๐งฎ Another way to set button width, bestie. col is how many columns of icons you want, and the button width comes from dividing the total width of FvwmIconMan by that number. For example, if the manager is 1024 wide andMaxButtonWidthByColumnsis4, thenMaxButtonWidthworks out to256. This is super handy when you don't know the manager's width at config time, like with a swallowed FvwmIconMan ๐ธ*FvwmIconMan: [id] NoIconAction actionโ ๐ฌ Tells FvwmIconMan to run action whenever aNoIconstyle window gets iconified or de-iconified. The relevant coordinates get tacked onto the end of action so the icon can be traced back to its FvwmIconMan button. An example is*FvwwmIconMan: NoIconAction SendToModule FvwmAnimate animate. A blank or null action switches the whole feature off ๐
๐ Quick heads up: the example above is copied exactly from the original, so it has a double w in FvwwmIconMan. I kept it that way so it matches the source.
*FvwmIconMan: [id] PlainButton style [forecolor backcolor]โ ๐ฆ Decides how normal buttons look. style can beflat,up,down,raisededge, orsunkedge, and it controls how the button gets drawn. Both colour options are optional, and if you skip them the default colours kick in. On a monochrome screen the style gets ignored, but you still have to set it ๐ค*FvwmIconMan: [id] PlainColorset colorsetโ ๐ Works likeplainbuttonbut uses colorsets. The style setting can still only be applied withplainbutton๐*FvwmIconMan: [id] ReliefThickness numโ ๐งฑ num is an integer that sets how many pixels thick the relief along the edge of non-flat buttons is. Setting it to0gives you flat buttons, same as ifFocusAndSelectButton,FocusButton,IconAndSelectButton,IconButton,PlainButton,SelectButton, andTitleButtonwere all set toflat. A negative num flips the button, like you'd usedReversefor every class ๐*FvwmIconMan: [id] Resolution resolutionโ ๐ Decides when the manager shows an entry for a certain window. resolution can beglobal,desk,page,screen,!desk,!page, or!screen. Withglobal, every window of the right type (seeshowanddontshowbelow) gets shown. Withdesk, only windows on the current desk show up. Withpage, only windows on the current page. Withscreen, only windows on the current Xinerama screen. The!versions flip it around:!deskshows only windows not on the current desk, and!pageand!screenwork the same way for their own thing. The default ispage. If Xinerama isn't active or you're only using a single screen,pageandscreenact the same ๐ฅ๏ธ
This config line still gets respected while FvwmIconMan is running, and the resolution changes on the fly โก
*FvwmIconMan: [id] Reverse classโ ๐ Makes certain classes of buttons have their relief lines reversed, so up and down styles swap places. It has no effect on flat buttons. The class can beicon,normal, ornone, and the default isnone๐ซ*FvwmIconMan: [id] SelectButton style [forecolor backcolor]โ ๐ฑ๏ธ Same asplainbutton, but this one sets how buttons look when your mouse is hovering over them ๐*FvwmIconMan: [id] SelectColorset colorsetโ ๐ Works likeselectbuttonbut uses colorsets. The style setting can still only be applied withselectbutton๐*FvwmIconMan: [id] Shape booleanโ ๐ท IfTrue, the window gets shaped. This is probably only useful if you've got multiple columns or rows. If FvwmIconMan wasn't compiled with support for the Shape extension, you'll get an error message instead ๐ค When you use shaped windows, it's recommended that you make a fvwm style for FvwmIconMan with no borders, or fvwm gets confused and that's not the vibe ๐ โโ๏ธ*FvwmIconMan: [id] Sort valueโ ๐ Decides how the manager list gets sorted.namesorts by name.namewithcasesorts by name and is case sensitive.idsorts by window id, which never changes after the window is created.weightedsorts by weight (more on that withsortweightbelow).nonemeans no sorting at all. The default isname๐*FvwmIconMan: [id] SortWeight weight pattern-listโ โ๏ธ Gives the specified weight to windows that match the pattern-list. The list is made of patterns that look liketype=pattern, where type is one ofclass,resource,title, oricon. The pattern uses the same format as the fvwmstylecommand, which is minimalistic shell pattern matching. You can give multiple sort weights. Each window gets checked against the list in order, and it takes the weight from the first match it finds. Lower-weighted windows go first in the manager list ๐ฅ
Here's an example, bestie:
*FvwmIconMan: Sort weighted
*FvwmIconMan: SortWeight 1 class=XTerm title=special*
*FvwmIconMan: SortWeight 10 class=XTerm
*FvwmIconMan: SortWeight 5
In this example, xterm windows whose titles start with "special" (weight 1) get listed first, then everything except the other xterms (weight 5), and the other xterms (weight 10) come last ๐ง If you don't give a default weight (an empty pattern list), the default weight is 0. This only matters if the sort type is set to weighted ๐
*FvwmIconMan: [id] Title title-stringโ ๐ท๏ธ Sets the window title for that manager window. title-string can be a single word or a string wrapped in quotes. The default is"FvwmIconMan". It gets drawn in the title bar of the manager window, if there is one, and also in the title button, which is the button that shows up when the manager is empty ๐*FvwmIconMan: [id] TitleButton style [forecolor backcolor]โ ๐ชง Same asplainbutton, but this one controls the look of the title button (the one drawn when the manager is empty). The manager's title gets drawn right inside the title button โจ*FvwmIconMan: [id] UseWinList booleanโ ๐ซง If true, FvwmIconMan honours theWinListSkipstyle flag. If not, every window is up for management according to theshowanddontshowlists ๐
Two options control which windows get handled by which managers, so pay attention, bestie ๐ A manager can get two lists: one of windows to show, and one of windows to ignore. If you only give it a Show list, that manager shows only the windows in that list. If you only give it a DontShow list, it shows every window except the ones in that list. If you give it both, a window gets shown only if it's not in the DontShow list and it is in the Show list. And if you give it neither, the manager handles all windows ๐ธ Each list is made up of patterns that look like type=pattern, where type is one of class, resource, title, or icon, and the pattern uses the same format as the fvwm style command (minimalistic shell pattern matching). Quotes around the pattern are treated as part of the expression, so don't put them there by accident ๐ If a window could be handled by more than one manager, 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 this manager may handle it ๐ซถ*FvwmIconMan: [id] DontShow pattern listโ ๐ซ If a window matches one of the patterns in the list, then this manager may not handle it ๐*FvwmIconMan: [id] ShowTransient booleanโ ๐ช Shows transient windows in the list. The default isfalse๐ฆ*FvwmIconMan: [id] ShowOnlyIcons booleanโ ๐ง Ifbooleanis true, only iconified windows get shown โจ*FvwmIconMan: [id] ShowNoIcons booleanโ ๐ Ifbooleanis true, only windows that aren't iconified get shown ๐*FvwmIconMan: [id] ShowOnlyFocused booleanโ ๐ฆ Ifbooleanis true, only the window that has the focus gets shown. Main character energy ๐
Two options control tips, so let's get into it ๐ฌ
*FvwmIconMan: [id] Tips valueโ ๐ก value can bealways,needed, orfalse. The default isfalse, which means no tips get displayed. Withalways, tips are enabled. Withneeded, a tip only shows up if the button string is truncated or if the tip string isn't equal to the button string. This config line is still respected while FvwmIconMan is running too ๐*FvwmIconMan: [id] TipsDelays delay [mappeddelay]โ โฑ๏ธ delay and mappeddelay are timeout values in milliseconds. If you don't give a mappeddelay, then delay is assumed. The default is1000 300. When the cursor lands on a button, FvwmIconMan waits delay milliseconds before showing the tip. If a tip is already on screen and the cursor moves to another button, FvwmIconMan waits mappeddelay milliseconds before showing the new tip ๐ซง*FvwmIconMan: [id] TipsFont fontnameโ ๐ค Sets the font used for tips. The default is the default fvwm font ๐*FvwmIconMan: [id] TipsColorset colorsetโ ๐จ Sets the colours for the tips window. The default is colorset0๐*FvwmIconMan: [id] TipsFormat formatstringโ ๐งพ Works like theFormatoption, but for the tips window. The default is the format string from theFormatoption ๐*FvwmIconMan: [id] TipsBorderWidth pixelsโ this one sets the border width (in pixels) of the tips window ๐ Default is1.*FvwmIconMan: [id] TipsPlacement valueโvaluecan beup,down,right,left,updownorleftright๐ฆ This is where the tips window lands relative to its button. Default isupdown, which means buttons on the top half of the screen get their tips below the button, and everything else gets tips above it ๐ฅ*FvwmIconMan: [id] TipsJustification valueโvaluecan beleftup,rightdownorcenter๐ This sets the justification (direction) of the tips window relative to its button after the tip has been placed. Default isleftup, which means if a tip sits above or below its button, the left borders of the tip and the button line up. If the tip sits on the left or right of its button,leftuplines up the top borders instead.rightdownandcenterwork likeleftup, just in different directions ๐ The alignment gets nudged by theTipsOffsetoption (see the next one, obviously โจ).*FvwmIconMan: [id] TipsOffsets placementoffset justoffsetโplacementoffsetandjustoffsetare offsets in pixels for theTipsPlacementandTipsJustificationconfiguration options ๐ง Default is3 2.
โจ ACTIONS โจ
Okay so actions are commands you can bind to an event. That event can be a key press, a mouse click, or the mouse entering a window manager button ๐ These are denoted by the action types Key, Mouse, and Select.
๐ฑ๏ธ When actions fire
Normally, actions bound to a mouse click run when the button is pressed. In transient mode, the action runs when the button is released, since it's assumed that FvwmIconMan was bound to some mouse event ๐ซถ
โ ๏ธ Tip/warning:FvwmIconManstill keeps track of the mouse button and any modifier keys in this case. So if you bindFvwmIconManto say,meta-button3, then it would be wise to make sure the action you want to run actually runs when themeta-button3event occurs (which would be the button release, assuming you kept your finger on the meta key) ๐ญ
๐ Syntax
The syntax for actions goes like this:
- Key actions โ
Key Keysym Modifiers FunctionList๐KeysymandModifiersare exactly the same as for the fvwmKeycommand. - Mouse actions โ
Mouse Button Modifiers FunctionList๐ญButtonandModifiersare exactly the same as for the fvwmMousecommand. - Select actions โ
Select FunctionList๐
๐งบ FunctionLists
A FunctionList is a sequence of commands separated by commas. They run left to right, all in one shared context, which right now only holds a pointer to the "current" button โจ If a button is selected (usually because the mouse pointer is sitting on it) when the action runs, then the current button gets set to that button. If not, it points to nothing ๐ธ
Most of the commands then modify this "current" button, either by moving it around, making it the selected button, or sending commands to fvwm that act on the window represented by that button ๐ Heads up: even though the current button starts out as the selected button, the selected button does not follow it around. That's the magic bit, because you can send commands to various windows without changing which button is selected ๐
Commands take five types of arguments: Integer, Manager, Window, Button, and String. A String is written exactly the way fvwm wants it, either in quotes or as a single word with no quotes ๐ And again, you can bind a whole sequence of commands to an event by listing them separated by commas.
๐ช Window and Button types
Window and Button types look exactly the same in the .fvwm2rc file, but they get interpreted as either a managed window or a FvwmIconMan button representing a window ๐ฆ They can be an integer (which gets interpreted module N, where N is the number of buttons, so 0 is the first and -1 is the last), or one of these strings: Select, Focus, Up, Down, Right, Left, Next, Prev ๐
SelectandFocusโ refer to the currently selected or focused button or window ๐ซถUp,Down,Right,Leftโ refer to the button or window above, below, to the right of, or to the left of the current button in the manager window, so you can navigate around the manager window ๐งNextandPrevโ designate the window, button, or manager after or before the current button, so you can move through the one-dimensional list of windows drawn in the manager window ๐ฅ If the manager is sorted,NextandPrevmove through the windows in sorted order ๐
๐๏ธ Manager type
The Manager type can be an integer, Next, or Prev. The meaning is analogous to the Button type, but it's in terms of the integral index of the managers, and it's restricted to managers that are nonempty โจ
๐ ๏ธ Functions
The following functions are currently defined, bestie ๐ธ
bif Button Integer/Stringโ a relative branch instruction. IfButtonisSelectorFocus, then take the branch if there's a selected button or a focused button. IfButtonis an integer, then branch if it's nonzero. If it's one ofUp,Down,Right,Left,Next,Prev, then the branch is taken when the current button can move in that direction. If the branch is taken, thenIntegercommands get skipped. No backwards branches allowed ๐ซbifn Button Integer/Stringโ the complement ofbif. The branch is taken ifButtonevaluates to false, using the criteria listed forbif๐gotobutton Buttonโ sets the current button toButton. IfButtonis an integer, then the current button is set toButtonmodulo the number of buttons, in whichever manager contains the selected button, if any ๐gotomanager Managerโ sets the button to button0ofManager. This will only go to a visible, nonempty manager, so an integral argument is taken modulo the number of such managers ๐jmp Integer/Stringโ executes a relative jump ofIntegerinstructions. Backwards jumps are not allowed. The jump is computed relative to the instruction following thejmp๐ฆlabel Stringโ provides a label that previous instructions can jump to. It won't be visible to subsequent jump instructions, and the same label can be used multiple times in the same instruction list (though it would be perverse to do so) ๐print Stringโ printsStringto the console. Useful for debugging actions ๐printdebugโ prints defined actions to the console. Should only be used by developers ๐งโ๐ป To enable this command, setCONFIGandFUNCTIONSvariables to'1'in themodules/FvwmIconMan/debug.hfile and recompile this module ๐quitโ quits FvwmIconMan ๐refreshโ causes all manager windows to redraw themselves ๐retโ stops executing the entire action ๐searchback Stringโ sets the button to the button before the current one whose printed string in the manager window matches the specifiedString, which may contain wildcards ๐searchforward Stringโ sets the button to the button after the current one whose printed string in the manager window matches the specifiedString, which may contain wildcards ๐selectโ selects the current button, if any. If a select action has been specified, it'll then be run. Therefore, it is considered unwise to set the select button in the select action ๐ โโ๏ธsendcommand Commandโ sends the fvwm commandCommandto the window represented by the current button, if any ๐จwarpโ warps the cursor to the current button, if any ๐ง
๐ Examples
Here's where it gets iconic ๐ฅ
gotobutton select, gotobutton Down, select
Selects the button below the currently selected button. Since the current button is already initialized to the selected button, this may be shortened to "gotobutton Down, select" ๐
gotobutton Up, select
Selects the button above the currently selected button โฌ๏ธ
gotobutton 0, select
Selects the first button of the current manager. If there is no current manager, which is the case when no button is selected, then this does nothing ๐ธ
gotobutton -1, select
Selects the last button of the current manager ๐
gotobutton focus, select
Selects the button corresponding to the focused window ๐ฆ
gotobutton focus, Iconify
Sends the fvwm command Iconify to the focused window. Note that this does not change the selected button ๐ซถ
bif Next 3, gotobutton 0, select, ret, gotobutton Next, select
If a button is selected and it's the last button, go to button 0. If it's not the last button, go to the next button. Otherwise, do nothing. Basically, this action cycles through all buttons in the current manager ๐
bif select 7, bif focus 3, gotomanager 0, select, ret, gotobutton focus, \
select, ret, gotobutton down, select
This is good for sending to FvwmIconMan with a SendToModule command. If there is a selected button, it moves down. Otherwise, if there is a focused button, it is selected. Otherwise, button 0 of manager 0 gets selected ๐
bif select Select, bif focus Focus, gotomanager 0, select, ret, label Focus, \
gotobutton focus, select, ret, label Select, gotobutton down, select
Same as the previous one, but using the label instruction โจ
In addition to being bound to keys and mice, actions can be sent from fvwm to FvwmIconMan via the SendToModule command ๐ฌ Don't quote the command when using SendToModule. Also, due to a bug in the current version of fvwm, don't quote FvwmIconMan either.
๐ Heads up, bestie: the quoting rules above are there because of that fvwm bug. Keep the command and FvwmIconMan unquoted, or things won't behave ๐
โจ SAMPLE CONFIGURATIONS โจ
okay bestie, let's look at some configs ๐ The first one is the most basic setup ever: FvwmIconMan with just one manager that handles every window ๐ฆ It loads the module, makes the icon manager title-bar-less and sticky, and gives it an icon ๐
##############################################################
# 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: ButtonGeometry 100x0
*FvwmIconMan: ManagerGeometry 1x0-0+0
Next up is the condensed version of my personal config ๐ This one has two managers: one for emacs, and one for everything else, minus anything with no icon title ๐ Only windows on the current page get shown โจ Heads up: the drawicons and shape options only work if fvwm and FvwmIconMan were compiled with the correct options ๐ Also notice how the geometry and show options are set per manager, while everything else is shared by all of them:
Style "FvwmIconMan" NoTitle, Sticky, WindowListSkip, BorderWidth 0
Style "FvwmIconMan" HandleWidth 0
Key F8 A N SendToModule FvwmIconMan bif select Select, bif focus Focus, \
gotomanager 0, select, sendcommand WarpToWindow, ret, label Focus, \
gotobutton focus, select, sendcommand WarpToWindow, ret, label Select, \
gotobutton prev, select, sendcommand WarpToWindow
Key F9 A N SendToModule FvwmIconMan bif select Select, bif focus Focus, \
gotomanager 0, select, sendcommand WarpToWindow, ret, label Focus, \
gotobutton focus, select, sendcommand WarpToWindow, ret, label Select, \
gotobutton next, select, sendcommand WarpToWindow
*FvwmIconMan: NumManagers 2
*FvwmIconMan: Resolution page
*FvwmIconMan: Background steelblue
*FvwmIconMan: Foreground white
*FvwmIconMan: Font 7x13
*FvwmIconMan: UseWinList true
*FvwmIconMan: DrawIcons true
*FvwmIconMan: Shape true
*FvwmIconMan: FollowFocus true
*FvwmIconMan: Sort name
*FvwmIconMan: PlainButton up white steelblue
*FvwmIconMan: SelectButton down white steelblue
*FvwmIconMan: FocusButton up white brown
*FvwmIconMan: FocusAndSelectButton down white brown
*FvwmIconMan: TitleButton raisededge white steelblue
*FvwmIconMan: NoIconAction "SendToModule FvwmAnimate animate"
*FvwmIconMan: 1 Title "Emacs windows"
*FvwmIconMan: 1 IconName "FvwmIconMan: Emacs"
*FvwmIconMan: 1 Format "%i"
*FvwmIconMan: 1 Show resource=emacs resource=gemacs
*FvwmIconMan: 1 ManagerGeometry 1x0-400+0
*FvwmIconMan: 1 ButtonGeometry 200x0
*FvwmIconMan: 2 Title "All windows"
*FvwmIconMan: 2 IconName "FvwmIconMan: all"
*FvwmIconMan: 2 Format "%c: %i"
*FvwmIconMan: 2 DontShow icon=Untitled
*FvwmIconMan: 2 ManagerGeometry 2x4-0+0
*FvwmIconMan: 2 ButtonGeometry 200x0
*FvwmIconMan: transient Geometry 194x100
*FvwmIconMan: transient DontShow icon=Untitled
*FvwmIconMan: transient Action Mouse 0 A sendcommand select select Iconify
*FvwmIconMan: Action Mouse 1 N sendcommand Iconify
*FvwmIconMan: Action Mouse 2 N sendcommand WarpToWindow
*FvwmIconMan: Action Mouse 3 N sendcommand "Module FvwmIdent FvwmIdent"
*FvwmIconMan: Action Key Left N gotobutton Left, select
*FvwmIconMan: Action Key Right N gotobutton Right, select
*FvwmIconMan: Action Key Up N gotobutton Up, select
*FvwmIconMan: Action Key Down N gotobutton Down, select
*FvwmIconMan: Action Key q N quit
๐ง UNFINISHED BUSINESS ๐ง
there's one bug I know about, and I'd really love an honest to goodness solution ๐ When an icon manager is set to grow upwards or leftwards, it may wander occasionally on some machines ๐ญ
Heads up: that wandering only shows up on some machines, so it's not every setup, but it's still a real bug.
It also doesn't handle windows without resource names as gracefully as it should ๐
๐ฆ AUTHOR ๐ฆ
This queen who made the whole thing is Brady Montz (bradym@cs.arizona.edu) ๐
๐ซถ THANKS ๐ซถ
Big thank-yous to these legends for contributing either code or truly keen ideas:
David Berson <berson@cs.pitt.edu>Gren Klanderman <greg@alphatech.com>David Goldberg <dsg@mitre.org>Pete Forman <gsez020@compo.bedford.waii.com>Neil Moore <amethyst@maxwell.ml.org>Josh M. Osborne <stripes@va.pubnix.com,Adam Rice <wysiwyg@glympton.airtime.co.uk>Chris Siebenmann <cks@hawkwind.utcs.toronto.edu>Bjorn Victor <victor@delial.docs.uu.se>
And that's a wrap, bestie ๐ธ This page came from the 3rd Berkeley Distribution, version 2.7.0, dated 19 October 2022 ๐ Stay iconic ๐๐ฆ
๐ฆ where this page comes from
- debian bookworm: fvwm 1:2.7.0-2 ยท GPL-2.0-only
- debian trixie: fvwm 1:2.7.0-3 ยท GPL-2.0-or-later
- ubuntu noble: fvwm 1:2.7.0-2build2 ยท GPL-2.0-only
- ubuntu questing: fvwm 1:2.7.0-3
- ubuntu resolute: fvwm 1:2.7.0-3build1 ยท GPL-2.0-or-later
- ubuntu stonking: fvwm 1:2.7.0-3build1 ยท GPL-2.0-or-later
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms