[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Proposal: Remap interactive commands via keymaps
From: |
Kim F. Storm |
Subject: |
Re: Proposal: Remap interactive commands via keymaps |
Date: |
04 Jan 2002 12:25:32 +0100 |
User-agent: |
Gnus/5.09 (Gnus v5.9.0) Emacs/21.1 |
"Eli Zaretskii" <address@hidden> writes:
> > From: address@hidden (Kim F. Storm)
> > Date: 03 Jan 2002 23:56:41 +0100
> >
> > Suppose that in the x-mode minor mode, I want all keys bound to
> > self-insert-command to insert the typed character followed by an `x',
> > i.e. to execute the following command instead:
> >
> > (defun x-self-insert-command ()
> > (interactive)
> > (insert (this-command-keys) "x"))
> >
> > Rather than rebinding all the self-insert-command keys in x-mode's
> > minor mode keymap, we can achieve exactly the same functionality
> > with a single binding:
> >
> > (define-key x-mode-map [self-insert-command] 'x-self-insert-command)
>
> How is this different from substitute-key-definition? What am I
> missing?
I suppose you ask how is this different from
(substitute-key-definition 'self-insert-command
'x-self-insert-command x-mode-map global-map)
Well, firstly it is different in the sense that the x-mode minor mode
keymap only need to have *one* entry mapping self-insert-command to
x-self-insert-command. With substitute-key-definition, the keymap
need to have bindings for *all* keys which are already bound to
self-insert-command.
Secondly, substitute-key-definition depends on being able to specify
the OLDMAP - so rather than being a logical mapping which works
no matter what keys are used to execute a given command, it only
works for the keys which invoke that command in that specific OLDMAP.
Suppose you have a minor mode y-mode active which - say - binds \r
to self-insert-command (just for the example), and y-mode is active,
then you don't get the x-mode behaviour when you hit RET.
Also, with my proposal, M-x self-insert-command will also be
remapped.
As another example, suppose you want to `advice' the command
View-scroll-page-forward (normally run by SPC in view-mode).
With substitute-key-definition, I would do something like
(substitute-key-definition 'View-scroll-page-forward
'x-View-scroll-page-forward x-mode-map view-mode-map)
However, doing this means that if x-mode is active in a buffer
but view-mode is not active, SPC will still run x-View-scroll-page-forward,
whereas with my proposal SPC will not be explicitly mapped in x-mode-map,
so it will run its normal binding.
So where substitute-key-definition makes explicit - and possibly
incomplete - bindings, my proposal makes *logical* bindings
which will honour other minor mode maps.
--
Kim F. Storm <address@hidden> http://www.cua.dk
- Proposal: Remap interactive commands via keymaps, Kim F. Storm, 2002/01/03
- Re: Proposal: Remap interactive commands via keymaps, Eli Zaretskii, 2002/01/04
- Re: Proposal: Remap interactive commands via keymaps,
Kim F. Storm <=
- Re: Proposal: Remap interactive commands via keymaps, Richard Stallman, 2002/01/04
- Re: Proposal: Remap interactive commands via keymaps, Tak Ota, 2002/01/04
- Re: Proposal: Remap interactive commands via keymaps, Kim F. Storm, 2002/01/04
- Re: Proposal: Remap interactive commands via keymaps, Miles Bader, 2002/01/05
- Re: Proposal: Remap interactive commands via keymaps, Richard Stallman, 2002/01/06
- Re: Proposal: Remap interactive commands via keymaps, Kim F. Storm, 2002/01/07
- Re: Proposal: Remap interactive commands via keymaps, Kim F. Storm, 2002/01/05
- Re: Proposal: Remap interactive commands via keymaps, Jason Rumney, 2002/01/06
- Re: Proposal: Remap interactive commands via keymaps, Kim F. Storm, 2002/01/06
- Re: Proposal: Remap interactive commands via keymaps, Jason Rumney, 2002/01/06