[SOLVED] Do action on all windows with current window state

I would like to perform actions / commands on all windows which have the same state as the current window (even if I don’t know what those states are).

In essence I want a function that contains the condition “Same State as Current Window”:

[code]AddToFunc MoveGroupToPage

  • I All (SameStateAsCurrentWindow) MoveToPage 0 1[/code]

I know how to “hard code” states into functions, IE All (State 2) Close but I would like to be able to do it the other way too.

Can anybody help?

For anyone who is interested, here is my current solution for running commands on groups of windows that have the same state as the currently focused window:

  1. Group windows by using states, IE…
  2. Add window to group (give it a state)
  3. Add that state to InfoStore as “CurrentGroupNumber”
  4. Use $[infostore.CurrentGroupNumber] as a condition for group-wide commands
  5. Update “CurrentGroupNumber” whenever adding to a new group, or focusing a window in a different group.
  6. Call dynamic group menu with keybinding, passing $[infostore.CurrentGroupNumber] to menu / functions as argument.

[code]DestroyFunc AddToGroupFunc
AddToFunc AddToGroupFunc

  • I ThisWindow State $0
  • I InfoStoreAdd CurrentGroupNumber $0

DestroyFunc RemoveFromGroupFunc
AddToFunc RemoveFromGroupFunc

  • I ThisWindow State $0 False
  • I InfoStoreRemove CurrentGroupNumber

DestroyFunc EmptyGroupFunc
AddToFunc EmptyGroupFunc

  • I All (State $0) State $0 False
  • I InfoStoreRemove CurrentGroupNumber

DestroyFunc FocusNextInGroupFunc
AddToFunc FocusNextInGroupFunc

  • I Next (State $0) FocusWindowFunc
  • I InfoStoreAdd CurrentGroupNumber $0[/code]
    Here is the key binding:
Key g A 4 DynamicGroupMenuFunc $[infostore.CurrentGroupNumber]

I use the following menu to handle the groups:

[code]DestroyFunc DynamicGroupMenuFunc
AddToFunc DynamicGroupMenuFunc

  • I DestroyMenu DynamicGroupMenu Recreate DynamicGroupMenu
  • I AddToMenu DynamicGroupMenu “Group Menu” Title
  • I AddToMenu DynamicGroupMenu “Add” PopUp AddToGroupMenu
  • I AddToMenu DynamicGroupMenu “Remove” Popup RemoveFromGroupMenu
  • I AddToMenu DynamicGroupMenu “Empty” Function EmptyGroupFunc $0
  • I AddToMenu DynamicGroupMenu “” Nop
  • I AddToMenu DynamicGroupMenu “Next” Function FocusNextInGroupFunc $0
  • I AddToMenu DynamicGroupMenu “Previous” FocusPreviousInGroupFunc $0
  • I AddToMenu DynamicGroupMenu “” Nop
  • I AddToMenu DynamicGroupMenu “List” WindowList (State $0) Root c c $0
  • I AddToMenu DynamicGroupMenu “” Nop
  • I AddToMenu DynamicGroupMenu “Close” All (State $0) Close
  • I AddToMenu DynamicGroupMenu “Gather” Function BringGroupToCurrentPageAndTileFunc $0
  • I AddToMenu DynamicGroupMenu “Grow” All (State $0) Maximize growonwindowlayer grow grow
  • I AddToMenu DynamicGroupMenu “Iconify” All (State $0) Iconify True
  • I AddToMenu DynamicGroupMenu “Maximize” All (State $0) Maximize
  • I AddToMenu DynamicGroupMenu “UnIconify” All (State $0) Iconify False
  • I AddToMenu DynamicGroupMenu “H Tile” Function HTileGroupFunc $0
  • I AddToMenu DynamicGroupMenu “V Tile” Function VTileGroupFunc $0
  • I AddToMenu DynamicGroupMenu “Yank” Function YankFunc $0
  • I AddToMenu DynamicGroupMenu “Move To…” Title
  • I AddToMenu DynamicGroupMenu “&1 Page One” All (State $0) MoveToPage 0 0
  • I AddToMenu DynamicGroupMenu “&2 Page Two” All (State $0) MoveToPage 1 0
  • I AddToMenu DynamicGroupMenu “&3 Page Three” All (State $0) MoveToPage 2 0
  • I AddToMenu DynamicGroupMenu “&4 Page Four” All (State $0) MoveToPage 0 1
  • I AddToMenu DynamicGroupMenu “&5 Page Five” All (State $0) MoveToPage 1 1
  • I AddToMenu DynamicGroupMenu “&6 Page Six” All (State $0) MoveToPage 2 1
  • I AddToMenu DynamicGroupMenu “&7 Page Seven” All (State $0) MoveToPage 0 2
  • I AddToMenu DynamicGroupMenu “&8 Page Eight” All (State $0) MoveToPage 1 2
  • I AddToMenu DynamicGroupMenu “&9 Page Nine” All (State $0) MoveToPage 2 2
  • I PopUp DynamicGroupMenu[/code]
    There is one major downside to this approach though: the “CurrentGroupNumber” doesn’t get updated if I change focused window via another method, EG Alt+TAb, or my “FocusNextWindowFunc”.

[code]DestroyFunc FocusWindowFunc
AddToFunc FocusWindowFunc

  • I Iconify False
  • I FlipFocus
  • I Raise
  • I WarpToWindow 10 10

quick Alt+tab - current page only

DestroyFunc AltTabPageFunc
AddToFunc AltTabPageFunc

  • I Next (CurrentPage, AcceptsFocus, !Iconic, !Sticky) Function FocusWindowFunc

focus next window - all pages, all desks

DestroyFunc FocusNextWindowFunc
AddToFunc FocusNextWindowFunc

  • I Next (AcceptsFocus, !Iconic, !Sticky) Function FocusWindowFunc[/code]
    Apart from that, it is more or less what I was going for. Will mark as solved.