So, after some thinking I made a first go at a window ring that behaves like a stack.
Based on the following observations: - The difference between a window ring and a stack is effective at the moment the modifier key is released. - at modifier-down time, we remember the "top of the stack". - at modifier-up time, we move window we moved to (if any) to the top of the stack. - So if we can do some administrative work both when the modifier is pressed and when it is released, we can make a ring into a stack. - We can already make bindings for pure modifier keys. - All current bindings are for key-down events. - We can make bindings for key-up events if we pretend this is a new modifier. # This makes bindings for the usual window ring: "Tab" = m4 : all : f.warpring "next" "Tab" = m4 | s : all : f.warpring "prev" "Return" = m4 : all : f.ring # This turns the window ring behaviour into a stack behaviour: # Note that the Super key corresponds to modifier 4. "Super_L" = : all : f.warpring "startstack" "Super_L" = up | m4 : all : f.warpring "finishstack" You can find a branch at https://code.launchpad.net/~ctwm/ctwm/windowstack (lp:~ctwm/ctwm/windowstack). I guess that's a "ctwm" more than needed but I had to try a few times to get the syntax right and I didn't want to overwrite trunk. There are some things in it that I'm not so happy about yet. - Names of things. startstack and finishstack aren't the best names, but the code in f.warpring looks at the first letter only right now to decide, so I wanted distinct first letters. - I factored out some code to manipulate the window ring (add and remove a window) and I'm not sure in which source file that belongs. - There are probably some edge cases that this code doesn't handle. I tested it lightly and that seemed to work though. -Olaf. -- Olaf 'Rhialto' Seibert -- rhialto at falu dot nl ___ Anyone who is capable of getting themselves made President should on \X/ no account be allowed to do the job. --Douglas Adams, "THGTTG"
signature.asc
Description: PGP signature