[implementations-list] partially function application and prefix keys for Vi commands that take movement commands as arguments
I saw that in July, people were talking about alternative ways to program commands like "d" that take other commands (like "w") as arguments. Here's another proposal; make "d" a prefix key, and bind "d"->"w" to a partially applied "delete-cmd" function, with its first argument fixed to 'viper-forward-word. Use Elisp functions to create these bindings en masse, to remove the tedium of explicitly writing out bindings for each pair of movement command and movement-argument-taking command. Attached is elisp code that demonstrates this. The advantage is that you work within emacs's keymap system rather than replacing it. Apologies if this has already been discussed.
On Tue, Oct 13, 2009 at 01:15:03AM -0700, Bayle Shanks wrote:
I saw that in July, people were talking about alternative ways to program commands like "d" that take other commands (like "w") as arguments. Here's another proposal; make "d" a prefix key, and bind "d"->"w" to a partially applied "delete-cmd" function, with its first argument fixed to 'viper-forward-word. Use Elisp functions to create these bindings en masse, to remove the tedium of explicitly writing out bindings for each pair of movement command and movement-argument-taking command.
Attached is elisp code that demonstrates this.
The advantage is that you work within emacs's keymap system rather than replacing it. Apologies if this has already been discussed.
If you want to take a look at how I approached this problem in modal-mode, I think I ended up with an elegant solution. http://jjfoerch.com/git/modal-mode/modal-mode.el First, there are "text object" modes. A text object mode's job is to install a keymap which remaps movement commands to special commands which create "text objects". To take the `d' key as an example: * in command mode, the d key is bound to enable a mode called 1off-kill-mode * 1off-kill-mode does two things: * enable text-object-mode * register a post-command-hook to disable self * now the user can hit any movement key. because command-remaps were used instead of explicit bindings, modal-mode does not even need to be concerned with what keys the user prefers to use for giving text objects. * after the user has hit a text-object key, the post-command-hook that we registered earlier carries out its action (deletion in this case) on the text-object, and disables 1off-kill-mode. If any of that wasn't clear, read the source. ;) Cheers -- John Foerch
participants (2)
-
Bayle Shanks -
John J. Foerch