I've had a desire for some time for an improved syntax for matching windows using the Style, Next, Current, etc. commands.
Right now, I can say: Next ("xterm") Focus I can even use wildcards: Next ("*term*") Focus This is all well and good when your terminal windows all have "term" somewhere in their name/iconname/class/resource. However, I have a few applications that give terminal windows: Powershell Konsole xterm gnome-terminal There isn't one wildcard expression that will capture all of those. Add to this the ability of some applications to change their window title due to state (xterm has an escape sequence that most terminal windows accept, Netscape is another application that comes to mind that does this), and it gets difficult to map a "hot key" that will traverse through a related set of windows. Do you think it might be a good time now to add some functionality to the window matching feature to allow for alternates and/or more specific matching? My thought is that we could create "conditions" in a way similar to that of Functions, Menus, Decors, etc: DestroyCondition "ConditionName" AddToCondition "ConditionName" + ConditionTerm ConditionPhrase + ConditionTerm ConditionPhrase Each condition line is parsed one at a time. At first, the condition will select no windows, and each successive line will narrow or widen the windows selected. ConditionTerm may be: All Select all windows Widen Term Add to the selected windows those that match the Term (boolean OR) Narrow Term Restrict the currently selected windows to those that match the ConditionPhrase (boolean AND) Term may be one of the following: WindowName="xxx" Wildcard match on window name IconName="xxx" Wildcard match on icon name Resource="xxx" Wildcard match on resource name Class="xxx" Wildcard match on window class Match="xxx" Wildcard match on title, icon, resource, or class CirculateHit Override CirculateSkip Style attribute CirculateHitIcon Override CirculateSkipIcon Style attribute CirculateHitShaded Override CirculateSkipshaded Style attribute CurrentDesk All windows on current desktop CurrentPage All windows on current page and desktop CurrentPageAnyDesk All windows on current page on any desktop Iconic All windows that are iconified Layer[=n] All windows on layer "n" (defaults to layer of currently focused window) Maximized All maximized windows PlacedByButton3 True if last interative move ended with button 3 Raised All windows that are raised Shaded All shaded windows Sticky All sticky windows Transient All transient windows Visible All windows that are visible Any Term can be negated by prefixing with "!": + Narrow !WindowName="*Netscape*" This would narrow the selection to windows that do NOT have "Netscape" within their window names. The Syntax to use these conditions could be something like: DestroyCondition "Terminal" AddToCondition "Terminal" + Widen Resource="XTerm" # xterm + Widen Resource="Powershell" # powershell + Widen Resource="Konsole" # konsole + Widen Resource="Terminal" # gnome-terminal DestroyFunc "CycleTerminals" AddToFunc "CycleTerminals" \ "I" Next (Condition=Terminal) Focus + "I" None (Condition=Terminal) Exec powershell This example would cycle through all my terminal windows or, if no terminal window was found, would spawn a new powershell. DestroyFunc "IconifyTerminals" AddToFunc "IconifyTerminals" \ "I" All (Condition=Terminal) Iconify 1 This example also seems to be able to produce the If/Then/Else logic that has been discussed on this list (although there may be hidden caveats here!). Not only is this useful for cycling through windows, but it can be used to group Style attributes to a common set of windows: Style Condition=Terminal some-special-styles-for-term-windows I've been sitting on this idea for a while (ever since 2.3 was originally announced to be in "feature freeze" quite a while ago), and figured that this might be a good time to make this suggestion. -- Larry Gensch [EMAIL PROTECTED] Working for COMPAQ for over a twentieth of a century -- Visit the official FVWM web page at <URL:http://www.fvwm.org/>. To unsubscribe from the list, send "unsubscribe fvwm-workers" in the body of a message to [EMAIL PROTECTED] To report problems, send mail to [EMAIL PROTECTED]