FvwmProxy - the fvwm proxy module
FvwmProxy is spawned by fvwm, so no command line invocation will work.
The FvwmProxy allows the user to locate and control windows obscured by other
windows by using small non-overlapping proxy windows. The default capabilities
include raising and lowering the proxied windows.
Using the sample configuration, pressing Alt-Tab cycles through the windows and
allows the use of 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. An additional mapping can have the proxies automatically appear
by just holding the Alt key.
Proxy windows are always on top and try to center on the regular window they
proxy. A simple collision algorithm tweaks the positions of the proxy windows
to prevent them from overlapping.
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.
FvwmProxy can be invoked by inserting the line 'Module FvwmProxy' in the
.fvwm2rc file. This can be placed on a line by itself, if FvwmProxy is to be
spawned during fvwm's initialization, or can be bound to a menu or mouse
button or keystroke to invoke it later. Fvwm will search directory specified
in the ModulePath configuration option to attempt to locate FvwmProxy.
- *FvwmProxy: Colorset n
- Specifies the color theme for unselected proxy windows.
- *FvwmProxy: SelectColorset n
- Specifies the color theme for the selected proxy window.
- *FvwmProxy: IconifiedColorset n
- Specifies the color theme for proxy windows of iconified
windows. This is only meaningful in conjunction with the ProxyIconified
option on.
- *FvwmProxy: Font font
- Specifies the font used for large proxy window text. This
usually contains the icon string and is nearly vertically centered in the
proxy. If there is no icon string, the title bar string is used. If this
text exceeds the width of the proxy, it is cropped on the right. If no
Font is specified, a default is used.
- *FvwmProxy: SmallFont font
- Specifies the font used for the auxiliary proxy window
text. This usually contains the title bar string, but is omitted if it is
identical to the icon string and that text was not cropped. The text is
drawn close to the bottom of the proxy and should probably be the smallest
legible font available. If this text exceeds the width of the proxy, it is
cropped on the left. If no SmallFont is specified, this text is never
drawn.
- *FvwmProxy: Width w
- Specifies the size in X of each proxy window. The default
is 180.
- *FvwmProxy: Height h
- Specifies the size in Y of each proxy window. The default
is 60.
- *FvwmProxy: Separation d
- Specifies the minimum distance between proxy windows when
adjusting for collisions. The default is 10.
- *FvwmProxy: ShowMiniIcons bool
- If true, proxy windows show the mini icon for the window
they represent, if it has a mini icon. The default is true.
- *FvwmProxy: EnterSelect bool
- If true, a proxy is automatically selected when the mouse
is moved over the proxy, even if no mouse buttons are pressed. The default
is false.
- *FvwmProxy: ProxyMove bool
- If true, moving a proxy window will move the window it
represents. Currently, the proxied window doesn't recognize snap effects
during this operation. The default is false.
- *FvwmProxy: ProxyIconified bool
- If true, continue to show proxy windows when they are
iconified. In addition, consider adding click actions that Iconify on and
off, such as on the middlemouse button. The default is false.
- *FvwmProxy: ShowOnly mode
- Limits the appearance of proxy windows during the Show
action. The supported modes are Selected, Covered, Grouped, and All. The
default is All which shows every proxy window on the current desk. Select
mode will only show the proxy window for the selected window. If no window
is selected, the currently focused window is treated as the select window
for ShowOnly filtering. Covered mode extends Select mode to add proxy
windows that overlap the select real window. Just using Selected mode can
result in untouchable proxy windows that disappear before you can reach
them. Grouped mode extends Covered mode to show proxy windows in the same
window group as the selected window. In all cases, iconified proxy windows
never appear if ProxyIconified is false.
- *FvwmProxy: Action mouseaction response
- Tells FvwmProxy to do the specified response when
the given action is done. The currently supported mouse actions
are: Click1, Click2, Click3 and so on, representing mouse clicks with
various buttons. By default, the module supports 3 mouse buttons, but it
can be compiled to support more. The default responses are Raise, Nop, and
Lower for Click1, Click2, and Click3, respectively.
- *FvwmProxy: Action Select command
- This selects an fvwm function to be called during a
FvwmProxy Hide command for the window whose proxy was selected. The
default is WindowListFunc. WindowListFunc is predefined by the fvwm
install. You can replace it, add to it, or supply an independent function.
- *FvwmProxy: Action Show command
- This selects an fvwm function to be called during a
FvwmProxy Show command. The default is Nop.
- *FvwmProxy: Action Hide command
- This selects an fvwm function to be called during a
FvwmProxy Hide command. The default is Nop.
- *FvwmProxy: Action Abort command
- This selects an fvwm function to be called during a
FvwmProxy Abort command. The default is Nop.
- *FvwmProxy: Action Mark command
- This selects an fvwm function to be called on a window
after it is marked. The default is Nop.
- *FvwmProxy: Action Unmark command
- This selects an fvwm function to be called on a marked
window just after another window gets the mark. The default is Nop.
- *FvwmProxy: Action ModifierRelease modifiers
command
- This selects an fvwm function to be called while proxies
are shown and the specified modifiers are all released. The modifiers are
specified using the same syntax as in the Mouse command. The default is
Nop.
- *FvwmProxy: Group groupname command
pattern
- For the given named group, adjust inclusion of the windows
matching the pattern. The groupname is a string identifier used to
associate windows. The window pattern uses the same format as the Style
command. The supported commands are Include, SoftInclude, WeakInclude,
WeakSoftInclude, and Exclude. The commands ending in Include identify a
pattern to add windows to the group. Exclude identifies pattern to
counteract inclusion pattern or auto-inclusion (see flags below). All
exclusion checks follow all inclusion checks. Soft inclusion limits the
windows in that pattern to only move when an non-soft window in the group
moves. Moving or resizing these windows does not affect any other windows.
They are also immune to edge effects. Soft inclusion also affects
provocation effects (see below). Weak inclusion prevents inclusion purely
on name, instead relying on X11 leader or process id matching. Weakly
included names will not start a group, but will join a group in the same
known process or with the same leader. Once the window has joined, the
name is just used to determine if the inclusion is soft.
- *FvwmProxy: Group groupname flag
- For the given named group, activate the given flag. The
supported flags are AutoInclude, AutoSoft, and IgnoreIDs. All window
grouping is normally checked to only group windows that are in the same
process or that have the same X11 client leader. IgnoreIDs deactivates
this mechanism. AutoInclude automatically includes any window that matches
the same process or client leader, without having to name them
specifically. AutoSoft makes all AutoInclusions soft (see inclusion
description above).
- *FvwmProxy: Group groupname provocation
pattern
- The provocation flags allow you to customize whether
grouped windows provoke each other in response to a raise/lower, desk
move, drag, or iconification change. The compound provocation flag is of
the form (No|Inherit)(Hard|Soft)(Raise|Desk|Drag|Icon|All). The pattern is
optional and should already have been included. The pattern limits the
change to only affect that part of the group. The first element of the
flag is optional and can turn off the effect, or, with a pattern, can
dynamically inherit the setting for the group. The default is to turn the
effect on. The second element can be used to only apply the change to
windows with the soft state either on or off. The default is to change
both. The third element specifies what provoking effect is being changed:
window raise/lower, moving to another desk, dragging windows together,
toggling iconification, or all of these. If either the provoking window or
a potentially provoked window has an effect turned off, the provocation
does not occur.
- *FvwmProxy: SlotWidth w
- This specifies the width of the icons used in slots. The
default is 16.
- *FvwmProxy: SlotHeight h
- This specifies the height of the icons used in slots. The
default is 16.
- *FvwmProxy: SlotSpace d
- This specifies the space between icons used in slots. The
default is 4.
- *FvwmProxy: GroupSlot n
- This specifies the first slot that represent a colored
group. Group slots don't need icons as the are drawn by predetermined
means. The default is 2.
- *FvwmProxy: GroupCount n
- This specifies the number of group slots. The default is 6.
- *FvwmProxy: SlotStyle n style
- For non-group slots, this defines the appears of the
indicated slot. The style format matches ButtonStyle command. The default
is nothing.
- *FvwmProxy: SlotAction n mouseaction
response
- For non-group slots, this defines the behavior of the
indicated slot. The mouse action and response is used the same as the
FvwmProxy Action configuration. The default is Nop.
- *FvwmProxy: UndoLimit n
- This specifies the number of entries in the undo buffer.
this limits how far back you can undo. The default is 8.
- SendToModule FvwmProxy Show
- Activate proxy windows for all windows on the current desk
that do not use the WindowListSkip option. If the desk is switched, new
proxies are automatically generated.
- SendToModule FvwmProxy Hide
- Deactivate all proxy windows. If a proxy is selected (such
as with the Next and Prev commands), the Select Action is call on the
window that the proxy represents. The default action includes raising the
window and warping the mouse to a position over that window.
- SendToModule FvwmProxy ShowToggle
- If shown, hide. If hidden, show.
- SendToModule FvwmProxy Abort
- Deactivate all proxy windows. This differs from the Hide
command in that no action is taken on any selected window.
- SendToModule FvwmProxy Circulate command
- Tell FvwmProxy to run a conditional command and mark the
result. The imbedded command SendToModule FvwmProxy Mark is
automatically appended after the optional condition, so supplying your own
imbedded command will probably fail. An example argument to Circulate is
ScanForWindow East South (CurrentPage). If the proxies aren't
already shown (such as with the Show command), any Circulate command will
automatically show the proxies.
- SendToModule FvwmProxy Next (obsolete)
- If a proxy window is selected, the next proxy is selected.
Windows with the WindowListSkip option are 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 is
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)
- If a proxy window is selected, the previous proxy is
selected. The starting point is the same as with the Next command, except
that the choice with no recent selection is the rightmost proxy. This
nearly duplicates the functionality of Circulate ScanForWindow West North
(CurrentPage).
- SendToModule FvwmProxy SoftToggle
- Toggle the soft group inclusion setting for the selected
window. This setting is the same that can be activated using the
SoftInclude and AutoSoft commands inside the FvwmProxy Group
configuration.
- SendToModule FvwmProxy IsolateToggle
- Toggle the isolation setting for the selected window's
group. Isolated groups only allow one member to not be iconified at a
time. The members are also coerced to the same position and size,
constrained by their size increment.
- SendToModule FvwmProxy PrevIsolated
- If focused on a member of a isolating group, deiconify the
member higher on list. If no member is higher, deiconify the last member.
- SendToModule FvwmProxy NextIsolated
- If focused on a member of a isolating group, deiconify the
member lower on list. If no member is higher, deiconify the first member.
- SendToModule FvwmProxy Undo
- Attempt to undo the last window move and/or resize.
- SendToModule FvwmProxy Redo
- Attempt to redo the most recent Undo. If another move or
resize occurs since the previous undo, the redo buffer will be cleared.
The following are excerpts from a .fvwm2rc file which 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 becoming
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 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 fairly 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. 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 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.
Jason Weber