FVWMICONMAN(1)
πΈ FVWMICONMAN(1) β the fvwm icon manager, bestie edition πΈ
okay so this is FvwmIconMan from the Fvwm Modules manual, and it's literally an fvwm icon manager. Iconic. Let's get into it β¨
β¨ NAME β¨
FvwmIconMan β an fvwm icon manager π
π SYNOPSIS π
FvwmIconMan is spawned by fvwm, so no command line invocation will work.
okay so real talk: you can't just run this from your shell, bestie. FvwmIconMan gets spawned by fvwm, so no command line invocation will work. fvwm runs the show, periodt. π
π¦ DESCRIPTION π¦
FvwmIconMan is an icon manager modeled after the TWM icon manager. And the way that you can have multiple icon managers? Obsessed. Each one gets armed with a list of window types that it manages. So like, you could have one manager that lists only emacs windows, and another manager that lists everything else. Slay, honestly.
You can also specify what resolution each icon manager uses, too. For example, one icon manager might manage windows on all desks, and another might manage only those on the current desk, page or screen. Chef's kiss.
FvwmIconMan can display the miniature icons that fvwm provides for its managed windows. Cute right?? π₯Ί
And the managers can be shaped however you want:
- a maximum number of columns (so it grows vertically),
- a maximum number of rows (so then it grows horizontally),
- or stay at a fixed size, and adjust the size of the window buttons to fit β think win95's Taskbar, iykyk.
And when support is compiled in for the X Shape extension, then the manager windows may be shaped. It's giving custom silhouette. π
You can specify actions to be run when mouse or key events are received. For example, you could bind the first mouse button to iconify the selected window, and make bindings for the arrow keys to navigate the manager window without the mouse. Accessibility queen. π«Ά
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. Retro but make it cunt. π
π INITIALIZATION π
During initialization, FvwmIconMan searches through the fvwm configuration file for the options described below. π
β οΈ Highly recommended, bestie: makeFvwmIconMana sticky window. And if you want to make use of thefollowfocusoption, and/or you're binding an action toFocus, then you should makeFvwmIconManclicktofocus. Also β when using theShapeoption, it's recommended that theFvwmIconManwindow not be decorated at all by fvwm. No cap.
π INVOCATION π
FvwmIconMan gets invoked by inserting this line in the .fvwm2rc file:
Module FvwmIconMan
If FvwmIconMan is to be spawned during fvwm's initialization, then this line should be placed in the StartFunction declarations. Or, it can be bound to a menu, mouse button, or keystroke to invoke it later. Your call, main character. π
okay so if you want to run FvwmIconMan in a transient mode β like with the built in window list β then pass -Transient as an argument. The invocation
Module FvwmIconMan -Transient
will do nicely. β¨ In this mode, FvwmIconMan will pop up one manager window directly under the cursor. When the mouse button is released, it will execute the appropriate action, and then exit. π¦
Things get somewhat complicated by the fact that you can specify that FvwmIconMan creates multiple manager windows β behavior which is unsuitable when running transiently. So when running transiently, FvwmIconMan will only create one manager window. Use the manager id transient to specify options for this manager window. Note it down bestie, it's important. π
FvwmIconMan may also accept an alias name as an argument. For example:
Module FvwmIconMan FvwmIconMan-Variant2
Two of them?? Greedy. Love that for us. π
β¨ CONFIGURATION OPTIONS REFERENCE CHART β¨
okay bestie, real talk: FvwmIconMan has β¨acquiredβ¨ quite a few options over the years. and I assume you share my absolute hatred of paging through a sixty-mile man page just to find one setting, so here's a terse lil reference chart of everything available π
every one of these gets the full detail treatment in the next section β this is just the vibe check so you know what exists π¦
each bullet here is: name β what it does β default, fr fr.
NumManagersβ number of managers. default:1Actionβ binds a command to an event. default:Mouse 0 N sendcommand IconifyBackgroundβ default background. default:grayButtonGeometryβ size of a button, in pixels. (no default)Colorsetβ default colorset. (no default)DontShowβ list of windows to ignore. (no default)DrawIconsβ use mini icons. default:falseFocusAndSelectButtonβ (no blurb given). default:flat grey blackFocusAndSelectColorsetβ (no blurb given). (no default)FocusButtonβ style for focused buttons. default:up grey blackFocusColorsetβ (no blurb given). (no default)FollowFocusβ show which window has focus. default:falseFontβ (no blurb given). default:8x13Foregroundβ default text color. default:whiteFormatβ describes the button label. default:"%c: %i"IconNameβ manager icon name. default:FvwmIconManIconAndSelectButtonβ (no blurb given). default:up black greyIconAndSelectColorsetβ (no blurb given). (no default)IconButtonβ style for icon buttons. default:up black greyIconColorsetβ (no blurb given). (no default)ManagerGeometryβ size of the manager, in buttons. default:0x1MaxButtonWidthβ max width of a button. (no default)MaxButtonWidthByColumnsβ (no blurb given). (no default)NoIconActionβ animate iconification. default:NOPPlainButtonβ style for normal buttons. default:up black grey
okay bestie the chart keeps going, here's the rest of it π (option β what it does β default, same as always):
PlainColorsetβ chart left this one blank on both description and default πReliefThicknessβ size of button relief β default2Resolutionβ window filters β defaultdesk pageReverseβ can benormal,iconornoneβ defaultnoneSelectButtonβ the style for selected buttons β defaultflat black greySelectColorsetβ no description, no default in the chart β¨Shapeβ use shape extension β defaultfalseShowβ list of windows to showShowOnlyIconsβ only icons visible β defaultfalseShowNoIconsβ icons are not displayed β defaultfalseShowTransientβ transient windows visible β defaultfalseShowOnlyFocusedβ only focused visible β defaultfalseSortβ keep managers sorted β defaultnameSortWeightβ weight for sortingTipsβ Tool Tips mode β defaultnoneTipsDelaysβ Tool Tips mapping delays β default1000 300TipsFontβ Font for Tool Tips β default is the default fvwm fontTipsColorsetβ Tool Tips Colorset β default0TipsFormatβ describes the Tips label β default is theFormatvalueTipsBorderWidthβ Tool Tips border size β default1TipsPlacementβ Tips placement vs button β defaultupdownTipsJustificationβ Tips Just vs button β defaultleftupTipsOffsetsβ Tips placement Offsets β default3 2Titleβ manager title β defaultFvwmIconManTitleButtonβ style for title button β defaultraisededge black greyTitleColorsetβ also blank in the chart, no shame πUseWinListβ honorWinListSkip? β defaulttrue
π CONFIGURATION OPTIONS π
okay so here's the moment you've been waiting for, the actual options section, let's go π«Ά
Literally every single one of these options except for nummanagers can be set per-manager. Which means?? it means you can have one vibe per manager, no cap. So for example the user can have their emacs manager rocking a red foreground, and their xterm manager living in blue. Two managers, two completely different aesthetics, both valid, both slaying π
Because of that, a configuration line can take one of two forms:
β¨ hold that thought bestie, the actual two forms are coming right up in the next part β¨
Okay so now the slot syntax β how you actually tell FvwmIconMan stuff in your config π
*FvwmIconMan: OptionName OptionValueβ setsOptionNametoOptionValuefor every single manager. All of them. The whole squad. π«Ά*FvwmIconMan: ManagerId OptionName OptionValueβ setsOptionNametoOptionValuefor one specific manager,ManagerId. AndManagerIdcan be either a positive integer, or the literal string"transient". An integer id points at the managers FvwmIconMan creates when it's running normally, and"transient"points at the one single manager it creates when it's running transiently. β¨
The old-school syntax that uses an asterisk instead of white spaces beforeManagerIdandOptionNameis still supported too, bestie β but it's obsolete now. It's giving legacy code energy. Let it go. π
Now the moment you've been waiting for β
π The Options Themselves π
*FvwmIconMan: NumManagers numβnumis a positive integer, and it's the total number of icon managers. FvwmIconMan rly wants to know how many managers exist before it starts handling any manager-specific options, so put this one first. The default is1.*FvwmIconMan: [id] Action type bindingβ binds an FvwmIconMan command to an event.typecan be one of:Key,Mouse, orSelect. The actions themselves live in the section coming up later,ACTIONS. π*FvwmIconMan: [id] Background backgroundβ sets the default background color. Iconic. π*FvwmIconMan: [id] ButtonGeometry geometryβ sets the initial geometry of one individual button, in pixels. If the height you give it is0, then the button height gets figured out from the font size instead. And the X and Y coordinates? Ignored. Completely. π*FvwmIconMan: [id] Colorset colorsetβ the default colorset used. This one overridesbackgroundandforeground, so watch out, it's got main character energy. π*FvwmIconMan: [id] DrawIcons valueβ this controls the behavior of the space placed before each button label. Default is"false", which means there's an empty space before every label, and a relief button gets drawn in there next to all iconified windows β provided'ReliefThickness'isn't zero. If you set it to"true", a mini icon gets drawn in place of that relief button, next to all iconified windows. If you set it to"always", a mini icon gets drawn for all windows, periodt. Quick note tho: iconified windows that don't have mini icons will still show a relief button unless'ReliefThickness'is zero. And last but not least, if it's"none", the space before the label is gone completely β no mini icons, no relief buttons, nothing. π¦*FvwmIconMan: [id] FocusAndSelectButton style [forecolor backcolor]β same as theplainbuttonoption, but it describes the look of buttons that are both selected and have the keyboard focus. Double threat. π₯*FvwmIconMan: [id] FocusAndSelectColorset colorsetβ works likefocusandselectbuttonbut uses colorsets instead. Thestylesetting still can only be applied withfocusandselectbuttontho, no cap.*FvwmIconMan: [id] FocusButton style [forecolor backcolor]β same as theplainbuttonoption, but describes the look of buttons whose windows have the keyboard focus.*FvwmIconMan: [id] FocusColorset colorsetβ works likefocusbuttonbut uses colorsets instead. Thestylesetting can still only be applied withfocusbutton.*FvwmIconMan: [id] FollowFocus booleanβ if true, then the button appearance reflects which window currently has focus. Default isfalse.*FvwmIconMan: [id] Font fontβ the font used for labeling the buttons. The default is8x13. β¨*FvwmIconMan: [id] Foreground foregroundβ sets the default foreground color. π*FvwmIconMan: [id] Format formatstringβ aprintf-like format string that describes the string printed in the manager window for each managed window. The possible flags are:%t,%i,%c,%r, and%sβ for the window's title, icon title, class, resource name, or screen respectively. The default is"%c: %i". Obsessed with a good format string ngl. π*FvwmIconMan: [id] IconName iconstringβ the window icon name for that manager window.Iconstringcan be either a single word, or a string wrapped in quotes. The default is"FvwmIconMan".*FvwmIconMan: [id] IconAndSelectButton style [forecolor backcolor]β same as theplainbuttonoption, but describes the look of buttons whose windows are iconified and the button is selected.*FvwmIconMan: [id] IconButton style [forecolor backcolor]β same as theplainbuttonoption, but describes the look of buttons whose windows are iconified.*FvwmIconMan: [id] IconAndSelectColorset colorsetβ works likeIconAndSelectButtonbut uses colorsets instead. Thestylesetting can still only be applied withiconbutton.*FvwmIconMan: [id] IconColorset colorsetβ works likeiconbuttonbut uses colorsets instead. Thestylesetting can still only be applied withiconbutton.*FvwmIconMan: [id] ManagerGeometry geometryβ the initial geometry of the manager, measured in units of buttons. If height is0, the manager useswidthcolumns and grows vertically once it's got more thanwidthwindows. Same deal the other way: if width is0, it usesheightrows and grows horizontally. If both are nonzero, then the manager window is exactly that size and stays that way, no growing, no nonsense. As columns get created, the buttons narrow to accommodate. And if the geometry has a negative y coordinate, then the window manager grows upwards. Otherwise it grows downwards. π*FvwmIconMan: [id] MaxButtonWidth widthβ defines a maximum for the width of a button, in pixels. By default there's no maximum at all. A value of0resets it back to the default. Heads up: this maximum is only used with a non growing manager β the kind where theManagerGeometryoption specifies a non zero width and height. π*FvwmIconMan: [id] MaxButtonWidthByColumns colβ another way to set the button width.colis the number of columns of icons, and the button width gets determined by dividing the total width of FvwmIconMan by the number of columns. For example, if the width of the FvwmIconMan manager is1024andMaxButtonWidthByColumnsis4, thenMaxButtonWidthis256. Super useful when you don't know the width of the manager at config time β say, for a swallowed FvwmIconMan. iykyk π§*FvwmIconMan: [id] NoIconAction actionβ tells FvwmIconMan to doactionwhen aNoIconstyle window gets iconified or de-iconified. The relevant coordinates get appended toactionso the icon can be traced back to an FvwmIconMan button. An example action is"*FvwwmIconMan: NoIconAction SendToModule FvwmAnimate animate". And a blank or null action turns this whole feature off. β¨*FvwmIconMan: [id] PlainButton style [forecolor backcolor]β describes how normal buttons look.stylecan be one offlat,up,down,raisededge, orsunkedge, and it describes how the button is drawn. Both color options are optional, and if you don't set them, the default colors get used. And if you're on a monochrome screen, thestyleoption is ignored β but you still have to set it. Annoying? Yeah. True? Also yeah. π*FvwmIconMan: [id] PlainColorset colorsetβ works likeplainbuttonbut uses colorsets instead. Thestylesetting can still only be applied withplainbutton.*FvwmIconMan: [id] ReliefThickness numβnumis an integer for how many pixels thick the relief at the edge of non-flat buttons should be. Setting it to0produces flat buttons, just as if you'd set the values forFocusAndSelectButton,FocusButton,IconAndSelectButton,IconButton,PlainButton,SelectButton, andTitleButtonall toflat. And ifnumis negative, the button gets inverted, as if you'd usedReversefor all classes. π*FvwmIconMan: [id] Resolution [filter(s)]β a list of filters, separated by spaces, that configures which windows get displayed. If you give it no filters, then all windows of the appropriate type are shown (check theshowanddontshowoptions below for that). Each filter then limits which windows are displayed, and can take one of these values:desk,page,screen,!desk,!page,!screen, orinvert.deskonly shows windows on the current desk, andpageonly shows windows on the current page.!deskand!pageonly show windows not on the current desk or page respectively. Andinvertreverses the filter, displaying the windows that did not match. π
Notes, bestie, and these ones actually matter:pageanddeskare independent. If the only filter ispage, then you'll see windows on the current page on all desks. To only see windows on the current page and desk (which is the default), you need both filters:'desk page'. You can only have one ofdesk/!desk,page/!page, orscreen/!screenβ the last one issued takes precedence. Theinvertfilter reverses the whole filter, so'invert desk page'is not the same as'!desk !page'. And sticky windows are visible on all pages and desks, so they match all page and desk filters β but they won't match the inverted filter. π«Ά
The filters can also take additional parameters to state which desk, page, or screen to show (or not show). [!]desk [n] can take the desk number, which will only show windows (not) on the stated desk. [!]page [x] [y] can take the horizontal x and vertical y page numbers, which will only show windows (not) on the stated page.
[!]screen [S] shows windows (not) on monitor S, which can be:
NAME: the"NAME"of the specific RandR monitor. πc: the current RandR monitor (containing the pointer)p: the primary RandR monitorg: the global monitor
Since all windows are on the global monitor, screen g effectively does nothing β iconic behavior honestly. c is the current monitor at the time resolution is issued, and once it's set it will not change. So this filter is best used with a RandR NAME. π
Also: this configuration line is respected while FvwmIconMan is running as well β the resolution gets changed dynamically when sent to fvwm. π
*FvwmIconMan: [id] Reverse classβ causes certain classes of buttons to have their relief lines reversed, so thatupanddownstyles get swapped. This has no affect on flat buttons.classcan beicon,normalornone. The default isnone. π*FvwmIconMan: [id] SelectButton style [forecolor backcolor]β same as theplainbuttonoption, but describes the look of buttons when the mouse is over them. π±οΈ*FvwmIconMan: [id] SelectColorset colorsetβ works likeselectbuttonbut uses colorsets instead. Thestylesetting can still only be applied withselectbutton. π*FvwmIconMan: [id] Shapeboolean β bestie if this is True, the window gets shaped π . Ngl it's probably only useful if you've got multiple columns or rows going on. So here's the tea: if FvwmIconMan wasn't compiled with support for the Shape extension, this just throws an error message at you. And when you are using shaped windows, pls pls make a fvwm style for FvwmIconMan that has no borders β otherwise fvwm gets confused and that's not the vibe π«*FvwmIconMan: [id] Sortvalue β sorts the manager list, iconic behavior honestly. Your options:nameβ sorts by name β¨namewithcaseβ sorts by name, but case-sensitive this time πidβ sorts by the window id, which fr never changes once the window is created, no capweightedβ sorts by weight (go read thesortweightdescription below, it's right there)noneβ no sorting at all, chaotic but valid π
Default is name.
*FvwmIconMan: [id] SortWeightweight pattern-list β gives the specified weight to windows that match pattern-list. The list is made up of patterns of the formtype=pattern, wheretypeis one ofclass,resource,title,icon, orscreenπ and pattern is an expression in the same format used in the fvwmstylecommand (that's minimalistic shell pattern matching, iykyk). You can give multiple sort weights. Every window gets matched against the list of sort weights in order, and gets the weight from the first match. Lower-weighted windows go first in the manager list. Example time:
*FvwmIconMan: Sort weighted
*FvwmIconMan: SortWeight 1 class=XTerm title=special*
*FvwmIconMan: SortWeight 10 class=XTerm
*FvwmIconMan: SortWeight 5
So in this example: xterm windows whose titles start with "special" (weight 1) are listed first π, then everything that isn't an xterm (weight 5), and the other xterms (weight 10) are dead last. If no default weight (empty pattern list) is given, the default weight is 0. This is only relevant if the sort type is set to weighted, so don't come crying if it does nothing otherwise.
*FvwmIconMan: [id] Titletitle-string β sets the window title string for that manager window. Titlestring can be a single word, or a string wrapped in quotes. Default is"FvwmIconMan". It gets drawn in the title bar of the manager window (if there is one) and in the title button, which is the button drawn when the manager is empty π*FvwmIconMan: [id] TitleButtonstyle [forecolor backcolor] β literally the same as the plainbutton option, but it specifies the look of the title button (the button drawn when the manager is empty). The manager's title is drawn in the title button, cute right?*FvwmIconMan: [id] UseWinListboolean β if true, then it honors theWinListSkipstyle flag β¨. Otherwise, all windows are subject to possible management according to the show and dontshow lists.
Okay so the next two 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. Here's the breakdown bestie:
- If only the show list is given, then that manager shows only the windows in the list.
- If only the DontShow list is given, then the manager shows all windows except those in the list.
- If both lists are given, then a window is shown if it is not in the DontShow list, and it's in the Show list.
- And finally, if neither list is given, the manager handles all windows, slay π
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 an expression of the same format used in the fvwm style command (minimalistic shell pattern matching, again). Quotes around the pattern will be taken as part of the expression, so watch out for that π. And if a window could be handled by more than one manager? Then the manager with the lowest id gets it. Periodt.
*FvwmIconMan: [id] Showpattern list β if a window matches one of the patterns in the list, then it may be handled by this manager π«Ά*FvwmIconMan: [id] DontShowpattern list β if a window matches one of the patterns in the list, then it may not be handled by this manager π*FvwmIconMan: [id] ShowTransientboolean β show transient windows in the list (defaultfalse).*FvwmIconMan: [id] ShowOnlyIconsboolean β only iconified windows are shown if boolean is true.*FvwmIconMan: [id] ShowNoIconsboolean β only windows that are not iconified are shown if boolean is true.*FvwmIconMan: [id] ShowOnlyFocusedboolean β only the window with the focus is shown if boolean is true πΈ
The following two options control tips, and honestly? They're the main character energy of this whole page.
*FvwmIconMan: [id] Tipsvalue β where value can bealways,neededorfalse. Default isfalse, meaning no tips are displayed. Withalways, tips are enabled, periodt. Withneeded, a tip is displayed only if either the button string is truncated or the tip string is not equal to the button string. And get this β this configuration line is respected when FvwmIconMan is running as well, so no restart needed π*FvwmIconMan: [id] TipsDelaysdelay [mappeddelay] β where delay and mappeddelay are time out values in milliseconds. If no mappeddelay is given, delay is assumed. Default is1000 300. So when the cursor is on a button, FvwmIconMan waits delay milliseconds before displaying the tip β¨. And in the case where a tip is already mapped and the cursor goes to another button, FvwmIconMan waits mappeddelay milliseconds before displaying the new tip.*FvwmIconMan: [id] TipsFontfontname β specifies the font to be used for tips. Default is the default fvwm font.*FvwmIconMan: [id] TipsColorsetcolorset β specifies the colors for the tips window. Default is colorset0.*FvwmIconMan: [id] TipsFormatformatstring β similar to the Format option, but for the tips window. The default is the format string from the Format option π*FvwmIconMan: [id] TipsBorderWidthpixels β specifies the border width (in pixels) of the tips window. Default is1.*FvwmIconMan: [id] TipsPlacementvalue β where value can beup,down,right,left,updownorleftright. This value specifies the position of the tips window relative to its button π¦. Default isupdown, where buttons on the top half of the screen get tips below the button, otherwise the tips are above the button.*FvwmIconMan: [id] TipsJustificationvalue β where value can beleftup,rightdownorcenter. Specifies the justification (direction) of the tips window relative to its button after the tips window has been placed β¨. Default isleftup, which means that if a tip is placed above or below its button, then the left border of the tip and of the button are aligned. If the tip is placed on the left or on the right of its button,leftupaligns the top borders.rightdownandcenterwork likeleftupbut in different directions. And the alignment is adjusted by the TipsOffset option β see the next option, it's right there π*FvwmIconMan: [id] TipsOffsetsplacementoffset justoffset β where placementoffset and justoffset are offsets in pixels for theTipsPlacementandTipsJustificationconfiguration option. Default is3 2.
π ACTIONS π
Okay bestie, this is the part where it gets fun. Actions are literally just commands you can bind to an event. And there are three flavors of event: a key press, a mouse click, or the mouse entering a window manager button β those are called action types Key, Mouse, and Select. Slay.
Normally, actions bound to a mouse click run the instant the button goes down. But in transient mode? The action runs when the button is released, because the assumption is that FvwmIconMan got bound to some mouse event. And here's a tip slash warning, pay attention: FvwmIconMan is still keeping track of the mouse button and any modifier keys in this case. So if you bind FvwmIconMan to, say, meta-button3, then it would be wise for you to make sure that the action you want executed will actually fire when the meta-button3 event occurs (which would be the button release, assuming you kept your finger on the meta key). Don't say I didn't warn you π
The syntax for actions are:
Key actions: Key Keysym Modifiers FunctionList
Mouse actions: Mouse Button Modifiers FunctionList
Select actions: Select FunctionList
- For Key actions, Keysym and Modifiers are exactly the same as for the fvwm
Keycommand. - For Mouse actions, Button and Modifiers are exactly the same as for the fvwm
Mousecommand.
And a FunctionList? That's a sequence of commands separated by commas. They get executed in left to right order, all in one shared context β which, currently, only contains a pointer to the "current" button. Here's the tea: if a button is selected (typically because the mouse pointer is sitting on it) when the action is executed, then the current button gets initialized to that button. Otherwise, it points to nothing. Rough, I know. π«
Most of the available commands then modify this "current" button β either by moving it around, making it become the selected button, or sending commands to fvwm acting on the window represented by that button. Important note, bestie: while this current button is initialized to be the selected button, the selected button does not implicitly follow it around. That's a feature, not a bug! It means the user can send commands to all kinds of windows without changing which button is selected. Iconic behavior honestly.
Commands take five types of arguments: Integer, Manager, Window, Button, and String. A String is a string specified exactly as for fvwm β either in quotes or as a single word not in quotes. And again, you may bind a sequence of commands to an event by listing them separated by commas.
So here's the confusing bit. Window and Button types look exactly the same in the .fvwm2rc file, but they're interpreted as either specifying a managed window, or a FvwmIconMan button representing a window. They can either be:
- an integer β which gets interpreted modulo N where N is the number of buttons, so
0is the first andN-1is the last, or - one of these strings:
Select,Focus,Up,Down,Right,Left,Next,Prev.
Let's break those down:
SelectandFocusrefer to the currently selected or focused button or window.Up,Down,Right, andLeftrefer to the button or window above, below, to the right of, or to the left of the current button in the manager window β allowing you to navigate around the manager window. It's giving β¨directionalβ¨.NextandPrevdesignate the window, button, or manager after or before the current button, allowing navigation of the one dimensional list of windows which is drawn in the manager window. And if the manager is sorted,NextandPrevmove through the windows in the sorted order. Keep that in mind.
Now the Manager type can either be an integer, Next, or Prev. The meaning is analogous to that of the Button type, but in terms of the integral index of the managers, restricted to managers which are nonempty.
The following functions are currently defined:
bif Button Integer/Stringβ a relative branch instruction, bestie. If Button isSelectorFocus, then take the branch if there is a selected button or a focused button. If Button is an integer, then branch if 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, then Integer commands are skipped. And no backwards branches are allowed. Periodt.bifn Button Integer/Stringβ the complement ofbif. The branch is taken if Button evaluates to false, by the criteria listed forbif.gotobutton Buttonβ sets current button to Button. If Button is an integer, then the current button is set to Button modulo the number of buttons, in whichever manager contains the selected button, if any.gotomanager Managerβ sets button to button0of Manager. 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 of Integer instructions. 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 will not 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, and honestly? respect the chaos π).print Stringβ prints String to 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.hand recompile this module.quitβ quits FvwmIconMan.refreshβ causes all manager windows to redraw themselves.retβ stop executing the entire action.searchback Stringβ sets button to button before the current one whose printed string in the manager window matches specified String, which may contain wildcards.searchforward Stringβ sets button to button after the current one whose printed string in the manager window matches specified String, which may contain wildcards.selectβ selects the current button, if any. If a select action has been specified, it will then be run. Therefore, it is considered unwise to set the select button in the select action. (Not me warning you twice. π«Ά)sendcommand Commandβ sends the fvwm command Command to the window represented by the current button, if any.warpβ warps cursor to current button, if any.
πΈ Examples πΈ
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 previous, 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. π Yeah. That's just how it is right now.
π SAMPLE CONFIGURATIONS π
Okay bestie, here's where it gets fun. First up: the absolute bare-minimum baby invocation of FvwmIconMan β one single manager, handling literally every window. Simplest possible slay β¨
##############################################################
# 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 Reader's Digest version of the author's personal config β like, the β¨condensedβ¨ cut. It's got two managers: one just for emacs, and one for everything else, minus the stuff that has no icon title. Only windows on the current page get shown. Heads up though, using the drawicons and shape options means fvwm and FvwmIconMan both have to be compiled with the right options, no cap π«Ά. And peep how geometry and show options are set per manager, while all the others are shared across everybody:
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 π§
Okay so there's one bug the author knows about, and honestly a real actual fix for it would be so appreciated π. Here's the tea: when an icon manager is set to grow upwards or leftwards, on some machines it might justβ¦ wander occasionally. It's giving lost in the sauce. Not iconic behavior, we know π
Also, it doesn't handle windows without resource names as gracefully as it should. Like, it tries, but bestieβ¦ it could do better π
π AUTHOR π
Brady Montz (bradym@cs.arizona.edu). Legend behavior, fr fr π
π THANKS π
Major shoutout to everyone who contributed either code or truly keen ideas (their words, and honestly? iconic phrasing):
- 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 the whole page, bestie!! π This one's from the FVWMICONMAN(1) manual, dated 2026-07-31 β so go forth, configure your icon managers, and absolutely slay the geometry π β¨ π¦ πΈ π
π¦ where this page comes from
- ubuntu stonking: fvwm3 1.1.5+ds-2 Β· GPL-2.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms