elisp: Remapping Commands

 
 21.13 Remapping Commands
 ========================
 
 A special kind of key binding can be used to “remap” one command to
 another, without having to refer to the key sequence(s) bound to the
 original command.  To use this feature, make a key binding for a key
 sequence that starts with the dummy event ‘remap’, followed by the
 command name you want to remap; for the binding, specify the new
 definition (usually a command name, but possibly any other valid
 definition for a key binding).
 
    For example, suppose My mode provides a special command
 ‘my-kill-line’, which should be invoked instead of ‘kill-line’.  To
 establish this, its mode keymap should contain the following remapping:
 
      (define-key my-mode-map [remap kill-line] 'my-kill-line)
 
 Then, whenever ‘my-mode-map’ is active, if the user types ‘C-k’ (the
 default global key sequence for ‘kill-line’) Emacs will instead run
 ‘my-kill-line’.
 
    Note that remapping only takes place through active keymaps; for
 example, putting a remapping in a prefix keymap like ‘ctl-x-map’
 typically has no effect, as such keymaps are not themselves active.  In
 addition, remapping only works through a single level; in the following
 example,
 
      (define-key my-mode-map [remap kill-line] 'my-kill-line)
      (define-key my-mode-map [remap my-kill-line] 'my-other-kill-line)
 
 ‘kill-line’ is _not_ remapped to ‘my-other-kill-line’.  Instead, if an
 ordinary key binding specifies ‘kill-line’, it is remapped to
 ‘my-kill-line’; if an ordinary binding specifies ‘my-kill-line’, it is
 remapped to ‘my-other-kill-line’.
 
    To undo the remapping of a command, remap it to ‘nil’; e.g.,
 
      (define-key my-mode-map [remap kill-line] nil)
 
  -- Function: command-remapping command &optional position keymaps
      This function returns the remapping for COMMAND (a symbol), given
      the current active keymaps.  If COMMAND is not remapped (which is
      the usual situation), or not a symbol, the function returns ‘nil’.
      ‘position’ can optionally specify a buffer position or an event
      position to determine the keymaps to use, as in ‘key-binding’.
 
      If the optional argument ‘keymaps’ is non-‘nil’, it specifies a
      list of keymaps to search in.  This argument is ignored if
      ‘position’ is non-‘nil’.