Found this on the mailing list, at http://icculus.org/cgi-bin/ezmlm/ezmlm-cgi?24:mss:4088:200606:fdoclgfnfgmipgknmjdi
From: Clay Barnes <clay.barnes@gmail.com>
Date: Sat, 24 Jun 2006 15:27:21 -0700
In relation to this thread, I see that OB3 supports Emacs-style
bindings. I wonder how hard it would be to add a related bit of code
and some XML syntax.
My idea is a "locked into binding" mode. There would be the possibility
of having a keybinding that starts like an Emacs binding (say Mod4+Scrol
Lock), but instead of terminating when the competing key combination is
pressed or with a timout, it would continue to parse keybindings until
ended by re-pressing the initiating combination.
One comment: it would be useful to end the chroot with a key combination different from the one that started the chroot. In that way, the chrooting can be used for quoting, including the start-chroot key combination. See also the 'keymode' feature of fluxbox.
""
This patch implements temporary chrooting of the keychain tree.
Example config file snippetry:
<keybind key="C-A-v">
<action name="chroot"/>
<keybind key="C-A-r">
<action name="unchroot"/>
</keybind>
<keybind key="C-A-x">
<action name="toggledecor"/>
</keybind>
</keybind>
The effect should be obvious: when you press C-A-v, until you press C-A-r, the only keybinding in effect is "C-A-x".
Previously, ob refused keybindings $x if it already knew of a keybinding $y such that $x was as prefix of $y or $y was a prefix of $x. Now, assuming $y=$x.$z, when you input $x, the action(s) of $x are performed. If you then input $z (within the timeout), the actions of $y are performed.
In other words, ob traverses the tree, executing actions when it runs into them, and restarting the traversal when (and only when) it runs out of children.
""
I added chrooting to openbox. Hurrah. Thanks for your ideas !
syntax goes like:
<keybind key="W-A-S-m" chroot="true">
</keybind>
<keybind key="W-A-m" chroot="true">
<keybind key="W-A-m" chroot="true">
<keybind key="Up"><action name="MaximizeVert"/></keybind>
<keybind key="Down"><action name="UnmaximizeVert"/></keybind>
<keybind key="Right"><action name="MaximizeHorz"/></keybind>
<keybind key="Left"><action name="UnmaximizeHorz"/></keybind>
<keybind key="Escape"><action name="BreakChroot"/></keybind>
</keybind>
<keybind key="Escape"><action name="BreakChroot"/></keybind>
</keybind>
Use the BreakChroot action to break out of a chroot. Or the global quitChainKey to break out of everything.
Created attachment 1240 [details] implements temporary chrooting"" This patch implements temporary chrooting of the keychain tree. Example config file snippetry: <keybind key="C-A-v"> <action name="chroot"/> <keybind key="C-A-r"> <action name="unchroot"/> </keybind> <keybind key="C-A-x"> <action name="toggledecor"/> </keybind> </keybind> The effect should be obvious: when you press C-A-v, until you press C-A-r, the only keybinding in effect is "C-A-x". Previously, ob refused keybindings $x if it already knew of a keybinding $y such that $x was as prefix of $y or $y was a prefix of $x. Now, assuming $y=$x.$z, when you input $x, the action(s) of $x are performed. If you then input $z (within the timeout), the actions of $y are performed. In other words, ob traverses the tree, executing actions when it runs into them, and restarting the traversal when (and only when) it runs out of children. ""Created attachment 1316 [details] Chrooting (again) You broke my patch, I unbroke it. Please apply it Real Soon Now :)I added chrooting to openbox. Hurrah. Thanks for your ideas ! syntax goes like: <keybind key="W-A-S-m" chroot="true"> </keybind> <keybind key="W-A-m" chroot="true"> <keybind key="W-A-m" chroot="true"> <keybind key="Up"><action name="MaximizeVert"/></keybind> <keybind key="Down"><action name="UnmaximizeVert"/></keybind> <keybind key="Right"><action name="MaximizeHorz"/></keybind> <keybind key="Left"><action name="UnmaximizeHorz"/></keybind> <keybind key="Escape"><action name="BreakChroot"/></keybind> </keybind> <keybind key="Escape"><action name="BreakChroot"/></keybind> </keybind> Use the BreakChroot action to break out of a chroot. Or the global quitChainKey to break out of everything.