FvwmProxy(1)
β¨ FvwmProxy(1) β Fvwm Modules π
Okay bestie, let's get into FvwmProxy(1) π¦ (it's the fvwm proxy module, and yes, it's giving main character energy π ).
πΈ NAME
FvwmProxy - the fvwm proxy module π
π§ SYNOPSIS
Okay so FvwmProxy is spawned by fvwm, which means no command line invocation will work π don't even try it, bestie.
π DESCRIPTION
Okay so FvwmProxy lets you find and control windows that are hiding behind other windows π It does this with small, non-overlapping proxy windows π¦ The default vibe includes raising and lowering the proxied windows, and that's it, no cap π
Using the sample config, pressing Alt-Tab cycles through the windows and lets you use assignable click actions on the proxies β¨ Releasing the Alt key deactivates the proxy windows π«Ά By default, pressing the left or right mouse buttons on a proxy window raises or lowers the associated proxied window, respectively π₯ There's also an extra mapping where the proxies automatically pop up just by holding the Alt key, which is lowkey iconic π
Proxy windows are always on top, and they try to center on the regular window they proxy πΈ There's a simple collision algorithm that nudges the proxy windows around so they don't overlap, and honestly, it's so satisfying π₯Ήβ¨
π COPYRIGHTS
The FvwmProxy program is original work by Jason Weber π
Copyright 2002, Jason Weber. No guarantees or warranties or anything are provided or implied in any way whatsoever. Use this program at your own risk π I'm not saying it's dangerous, I'm just saying read the fine print, bestie π
π INVOCATION
Okay so FvwmProxy can be invoked by putting the line Module FvwmProxy in your .fvwm2rc file π That line can sit on its own if you want FvwmProxy spawned during fvwm's initialization, or you can bind it to a menu, mouse button, or keystroke to invoke it later on β¨ Fvwm will search the directory specified in the ModulePath configuration option to try to find FvwmProxy π§
Part 1 of 3 β more coming, so stay tuned, bestie π
β¨ CONFIGURATION OPTIONS β¨
okay so this is where the real styling happens π
every line starts with *FvwmProxy: and the bold part is the setting, the rest is what it does. let's go π«Ά
*FvwmProxy: Colorset nπ¨ β this picks the color theme for unselected proxy windows, so the everyday look π*FvwmProxy: SelectColorset nβ¨ β this is the color theme for the selected proxy window, the main character of the moment π*FvwmProxy: IconifiedColorset nπ§ β this is the color theme for proxies of iconified windows. it only matters ifProxyIconifiedis on, so keep that in mind π
*FvwmProxy: Font fontπ€ β the font for the big proxy text. this usually holds the icon string and sits nearly vertically centered π if there's no icon string, it uses the title bar string instead. if the text is too wide it gets cropped on the right βοΈ and if you don't set a Font, a default steps in πΈ*FvwmProxy: SmallFont fontπ‘ β the font for the little auxiliary text. this usually has the title bar string, but it gets skipped if it matches the icon string and that text wasn't cropped. it's drawn near the bottom, so go for the smallest font that's still legible π¦ if the text is too wide it gets cropped on the left, and if you don't set a SmallFont, this text never shows up at all π
*FvwmProxy: Width wπ β the size in X of each proxy window. the default is180π*FvwmProxy: Height hπ β the size in Y of each proxy window. the default is60π*FvwmProxy: Separation dπ§ β the minimum distance between proxy windows when they're adjusting for collisions. the default is10π«§*FvwmProxy: ShowMiniIcons boolπΌοΈ β iftrue, proxies show the mini icon of the window they represent, as long as that window actually has one. the default istrueβ¨*FvwmProxy: EnterSelect boolπ±οΈ β iftrue, a proxy gets selected just by hovering over it, even with no mouse buttons pressed. the default isfalseπ ββοΈ
*FvwmProxy: ProxyMove boolπ β iftrue, moving a proxy window also moves the window it represents. the default isfalseπ
ngl this one has a catch π the proxied window doesn't recognize snap effects during this operation, so it won't snap along with it.
*FvwmProxy: ProxyIconified boolπͺ β iftrue, proxies keep showing up even when their windows are iconified. bonus tip from the original: add click actions that Iconify on and off, like on the middle mouse button π±οΈ the default isfalseπ«Ά*FvwmProxy: ShowOnly modeπ β this limits which proxies show up during the Show action. the supported modes areSelected,Covered,Grouped, andAll. the default isAll, which shows every proxy on the current desk πSelectedonly shows the proxy for the selected window. if nothing is selected, the currently focused window counts as the select window for ShowOnly filtering π―CoveredisSelectedplus any proxies that overlap the select real window π«£GroupedisCoveredplus proxies in the same window group as the selected window π―ββοΈ- in every mode, iconified proxies never appear if
ProxyIconifiedisfalseπ - heads up: using just
Selectedcan leave you with untouchable proxies that vanish before you can reach them, which is whyCoveredexists π
*FvwmProxy: Action mouseaction responseπ±οΈ β tells FvwmProxy to do the response you pick whenever the given mouse action happens. the supported mouse actions areClick1,Click2,Click3, and so on, one for each button π by default the module handles 3 mouse buttons, but it can be compiled to handle more π οΈ the default responses areRaiseforClick1,NopforClick2, andLowerforClick3π*FvwmProxy: Action Select commandπ― β picks an fvwm function to run during a FvwmProxy Hide command, for the window whose proxy was selected. the default isWindowListFunc, which the fvwm install already predefines. you can replace it, add to it, or bring in a totally independent function π*FvwmProxy: Action Show commandπ€οΈ β picks an fvwm function to run during a FvwmProxy Show command. the default isNopπ*FvwmProxy: Action Hide commandπ β picks an fvwm function to run during a FvwmProxy Hide command. the default isNopπ*FvwmProxy: Action Abort commandπ β picks an fvwm function to run during a FvwmProxy Abort command. the default isNopπ*FvwmProxy: Action Mark commandπ β picks an fvwm function to run on a window right after it gets marked. the default isNopπ*FvwmProxy: Action Unmark commandπ β picks an fvwm function to run on a marked window just after another window takes the mark. the default isNopπ*FvwmProxy: Action ModifierRelease modifiers commandβ¨οΈ β picks an fvwm function to run while proxies are showing and the specified modifiers are all released. the modifiers use the same syntax as the Mouse command π«Ά the default isNopπ
*FvwmProxy: Group groupname command patternπ― β for the named group, this adjusts whether windows matching the pattern are included. thegroupnameis just a string you use to link windows together π the window pattern uses the same format as the Style command π the supported commands areInclude,SoftInclude,WeakInclude,WeakSoftInclude, andExclude. here's the tea π΅- the ones ending in
Includeadd windows to the group π Excludecounteracts an inclusion pattern or auto-inclusion (see the flags below) π« all exclusion checks run after all the inclusion checks, so exclusion always gets the final word π- soft inclusion means those windows only move when a non-soft window in the group moves π«§ moving or resizing them doesn't affect any other windows, and they're immune to edge effects π‘οΈ soft inclusion also affects provocation effects (see below) πΈ
- weak inclusion stops a window from being included purely by name π ββοΈ it relies on X11 leader or process ID matching instead. weakly included names won't start a group, but they can join one in the same known process or with the same leader π€ once they've joined, the name is only used to figure out whether the inclusion is soft π¦
- the ones ending in
*FvwmProxy: Group groupname flagπ³οΈβπ β for the named group, this turns on the given flag. the supported flags areAutoInclude,AutoSoft, andIgnoreIDsβ¨ by default, all window grouping only groups windows in the same process or with the same X11 client leader.IgnoreIDsturns that check off πAutoIncludeautomatically includes any window that matches the same process or client leader, so you don't have to name them one by one π«ΆAutoSoftmakes all AutoInclusions soft (see the inclusion description above) π§Έ*FvwmProxy: Group groupname provocation patternπ₯ β the provocation flags let you decide whether grouped windows set off each other when you raise or lower one, move to another desk, drag windows together, or change iconification π the compound flag looks like(No|Inherit)(Hard|Soft)(Raise|Desk|Drag|Icon|All). the pattern is optional and should already have been included, and it limits the change to just that part of the group π―- the first element is optional. it can switch the effect off, or, when there's a pattern, it can inherit the setting for the group dynamically π the default is to turn the effect on π‘
- the second element lets you apply the change only to windows whose soft state is on or off π«§ the default is to change both π
- the third element picks which provoking effect you're changing: window raise/lower, moving to another desk, dragging windows together, toggling iconification, or all of them π
- if either the provoking window or a potentially provoked window has an effect turned off, the provocation just doesn't happen π«
*FvwmProxy: SlotWidth wπ§© β the width of the icons used in slots. the default is16π*FvwmProxy: SlotHeight hπ β the height of the icons used in slots. the default is16π*FvwmProxy: SlotSpace dπ«§ β the space between icons used in slots. the default is4β¨*FvwmProxy: GroupSlot nπ β the first slot that represents a colored group. group slots don't need icons, since they get drawn by predetermined means π¨ the default is2π*FvwmProxy: GroupCount nπ’ β the number of group slots. the default is6π*FvwmProxy: SlotStyle n styleπ β for non-group slots, this defines the appearance of the indicated slot. the style format matches the ButtonStyle command π the default is nothing π«₯*FvwmProxy: SlotAction n mouseaction responseπ±οΈ β for non-group slots, this defines how the indicated slot behaves. the mouse action and response work exactly like the FvwmProxy Action configuration π«Ά the default isNopπ*FvwmProxy: UndoLimit nβͺ β the number of entries in the undo buffer, which also limits how far back you can undo π the default is8π¦
β¨ COMMANDS β¨
π¦ SendToModule FvwmProxy Show
Okay so this one activates proxy windows for every window on the current desk that doesn't use the WindowListSkip option π
If you switch desks, new proxies are automatically generated for you β¨
πΈ SendToModule FvwmProxy Hide
This one deactivates all proxy windows π But if a proxy is selected (like with Next and Prev), the Select Action gets called on the window that proxy represents. The default action is raising that window and warping the mouse to a spot over it π«Ά
π SendToModule FvwmProxy ShowToggle
If it's shown, hide it. If it's hidden, show it π₯
π SendToModule FvwmProxy Abort
Deactivates all proxy windows too, but unlike Hide, no action gets taken on any selected window. Totally different energy π
π§ SendToModule FvwmProxy Circulate command
This tells FvwmProxy to run a conditional command and mark the result. The embedded command SendToModule FvwmProxy Mark is automatically appended after the optional condition, so supplying your own embedded command will probably fail π
π¨ Heads up, bestie: because SendToModule FvwmProxy Mark gets tacked on automatically, adding your own embedded command will probably fail.
An example argument to Circulate is ScanForWindow East South (CurrentPage). If the proxies aren't already shown (like with the Show command), any Circulate command will automatically show the proxies π¦
π SendToModule FvwmProxy Next (obsolete)
β οΈ This one is obsolete, so it's giving old-school vibes π°οΈ
If a proxy window is selected, the next proxy gets selected. Windows with the WindowListSkip option get ignored. The proxies are sorted left to right during the Show command. If no proxy is currently selected, but a proxy on this desk was selected on a recent show, that proxy gets selected. If no proxy on this desk was recently selected, the leftmost proxy is used. This nearly duplicates the functionality of Circulate ScanForWindow East South (CurrentPage) β¨
π SendToModule FvwmProxy Prev (obsolete)
β οΈ Also obsolete, so keep that in mind π
If a proxy window is selected, the previous proxy gets selected. The starting point is the same as with the Next command, except that with no recent selection, the rightmost proxy is chosen instead. This nearly duplicates the functionality of Circulate ScanForWindow West North (CurrentPage) π
π SendToModule FvwmProxy SoftToggle
This toggles the soft group inclusion setting for the selected window. It's the same setting you can activate using the SoftInclude and AutoSoft commands inside the FvwmProxy Group configuration π
π«§ SendToModule FvwmProxy IsolateToggle
This toggles the isolation setting for the selected window's group. Isolated groups only let one member be un-iconified at a time π«§ The members also get coerced to the same position and size, constrained by their size increment.
π SendToModule FvwmProxy PrevIsolated
If you're focused on a member of an isolating group, this deiconifies the member higher on the list. If no member is higher, it deiconifies the last member β
π« SendToModule FvwmProxy NextIsolated
If you're focused on a member of an isolating group, this deiconifies the member lower on the list. If no member is higher, it deiconifies the first member π«
β©οΈ SendToModule FvwmProxy Undo
This attempts to undo the last window move and/or resize π
βͺοΈ SendToModule FvwmProxy Redo
This attempts to redo the most recent Undo. If another move or resize happens after the previous undo, the redo buffer gets cleared π§Ή
π SAMPLE CONFIGURATION π
The following are excerpts from a .fvwm2rc file that describe FvwmProxy initialization commands π
Key Tab A M SendToModule FvwmProxy Circulate \
ScanForWindow East South (CurrentPage)
Key Tab A SM SendToModule FvwmProxy Circulate \
ScanForWindow West North (CurrentPage)
*FvwmProxy: Action ModifierRelease M SendToModule FvwmProxy Hide
But Meta-Shift-Tab can be awkward, so Meta-Q may be a better alternative π«Ά
Key Q A M SendToModule FvwmProxy Circulate \
ScanForWindow West North (CurrentPage)
You might consider adding !Sticky to the (CurrentPage) conditional if you use Sticky for low-interactivity programs, like load meters and music players π΅
To have the proxies immediately pop up when you hold the Alt key, add π
Key Meta_L A N SendToModule FvwmProxy Show
If that's too intrusive, you can assign Alt-Esc to switch the proxies on and off by adding π¦
Key Escape A M SendToModule FvwmProxy ShowToggle
π¨ Some platforms have problems where general Alt key combinations become otherwise dysfunctional after defining these mappings. If this happens, it might be difficult to take full advantage of this module π
To have the mouse jump to the center instead of the upper left corner, try adding π―
AddToFunc WindowListFunc
+ I WarpToWindow 50 50
or just make your own list function from scratch, for example π§
DestroyFunc WindowListFunc
AddToFunc WindowListFunc
+ I WindowId $[w.id] Raise
+ I WindowId $[w.id] WarpToWindow 50 50
Note that the default configuration does not activate any Next/Prev operations for Alt-Tab, since that sequence is, by default, used by another module. Adding appropriate key mappings to your .fvwm2rc will switch this responsibility over to FvwmProxy π
If you use ProxyIconified, you might consider adding Iconify actions π
AddToFunc WindowListFunc
+ I WindowId $[w.id] Iconify Off
AddToFunc Raise-and-Deiconify
+ I WindowId $[w.id] Raise
+ I WindowId $[w.id] Iconify Off
*FvwmProxy: Action Click1 Raise-and-Deiconify
*FvwmProxy: Action Click2 Iconify
You can set up some basic slots pretty easily π
*FvwmProxy: GroupSlot 2
*FvwmProxy: GroupCount 5
*FvwmProxy: SlotStyle 1 MiniIcon
*FvwmProxy: SlotStyle 7 Pixmap "squeeze.xpm"
*FvwmProxy: SlotStyle 8 Pixmap "mini-up.xpm"
*FvwmProxy: SlotStyle 9 Pixmap "mini-bball.xpm"
*FvwmProxy: SlotStyle 10 Pixmap "mini-cross.xpm"
*FvwmProxy: SlotAction 1 Click1 Popup WindowMenu
*FvwmProxy: SlotAction 7 Click1 SendToModule FvwmProxy IsolateToggle
*FvwmProxy: SlotAction 8 Click1 SendToModule FvwmProxy SoftToggle
*FvwmProxy: SlotAction 9 Click1 Iconify
*FvwmProxy: SlotAction 10 Click1 Delete
In this example, WindowMenu is something you would have to define yourself. If your proxy width is too small, some slots can get cut off π
Undo and redo can be easily mapped to any keys β©οΈ
Key Z A 3 SendToModule FvwmProxy Undo
Key R A 3 SendToModule FvwmProxy Redo
You can rotate through an isolated group using any keys. For example, meta cursor-up and cursor-down could traverse the group π
Key Up A 3 SendToModule FvwmProxy PrevIsolated
Key Down A 3 SendToModule FvwmProxy NextIsolated
A somewhat impractical example of a group definition using GIMP is as follows π¨
*FvwmProxy: Group "GIMP" Include "The GIMP"
*FvwmProxy: Group "GIMP" Include "Module Manager"
*FvwmProxy: Group "GIMP" SoftInclude "Unit Editor"
*FvwmProxy: Group "GIMP" AutoInclude
*FvwmProxy: Group "GIMP" AutoSoft
*FvwmProxy: Group "GIMP" Exclude "Preferences"
This sets up a hard attachment between the windows "The GIMP" and "Module Manager". The "Unit Editor" is also in the group, but it only responds to movement of one of the hard inclusions. Any window in the same process or with the same client leader is also associated, but they default to soft inclusion, except "Preferences", which is explicitly excluded π«Ά
Note that in this case, the explicit soft inclusion of "Unit Editor" is redundant with the combination of AutoInclude and AutoSoft. However, if AutoSoft was not specified, the explicit SoftInclude would distinguish that pattern from the otherwise hard inclusion under just AutoInclude π
π«Ά AUTHOR π«Ά
Jason Weber π
Okay bestie, that's the whole thing! π This page was written up for FvwmProxy version 2.7.0, from the 3rd Berkeley Distribution, dated 19 October 2022, and it lives on as FvwmProxy(1) πΈβ¨ Slay the window manager, periodt ππ¦
π¦ 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