Mercurial > hg > xemacs-beta
diff lisp/help.el @ 5679:a81a739181dc
Add command remapping, a more robust alternative to #'substitute-key-definition
src/ChangeLog addition:
2012-09-02 Aidan Kehoe <kehoea@parhasard.net>
* keymap.c:
Add command remapping, a more robust equivalent to
#'substitute-key-definition.
* keymap.c (CHECK_REMAPPING_POSITION): New.
* keymap.c (keymap_equal): Correct a comment here.
* keymap.c (Fdefine_key): Document the command remapping syntax.
* keymap.c (Fremap_command): New.
* keymap.c (command_remapping): New.
* keymap.c (Fcommand_remapping): New.
* keymap.c (commands_remapped_to_mapper): New.
* keymap.c (commands_remapped_to_traverser): New.
* keymap.c (Fcommands_remapped_to): New.
* keymap.c (get_relevant_keymaps): Take a new POSITION argument.
* keymap.c (Fcurrent_keymaps, event_binding):
Supply the new POSITION argument to get_relevant_keymaps.
* keymap.c (Fkey_binding):
Add new arguments, NO-REMAP and POSITION.
* keymap.c (map_keymap_mapper):
* keymap.c (Fwhere_is_internal):
* keymap.c (where_is_to_char):
* keymap.c (where_is_recursive_mapper):
Don't expose the key remapping in these functions. This conflicts
with GNU, but is more sane for our callers. Access to command
remapping is with the functions #'command-remapping,
#'commands-remapped-to, and #'remap-command, not with the general
keymap functions, apart from the compatibility hack in #'define-key.
* keymap.c (syms_of_keymap):
* keymap.c (vars_of_keymap):
* keymap.c (complex_vars_of_keymap):
* lisp.h: New CHECK_COMMAND macro.
man/ChangeLog addition:
2012-09-02 Aidan Kehoe <kehoea@parhasard.net>
* lispref/keymaps.texi (Keymaps):
* lispref/keymaps.texi (Changing Key Bindings):
* lispref/keymaps.texi (Scanning Keymaps):
* lispref/keymaps.texi (Remapping commands):
* lispref/keymaps.texi (XEmacs): New.
* lispref/keymaps.texi (Other Keymap Functions):
Document the new command remapping functionality in this file.
lisp/ChangeLog addition:
2012-09-02 Aidan Kehoe <kehoea@parhasard.net>
* help.el (describe-function-1):
Document any command remapping that has been done in this function.
tests/ChangeLog addition:
2012-09-02 Aidan Kehoe <kehoea@parhasard.net>
* automated/keymap-tests.el:
Test the new command remapping functionality.
author | Aidan Kehoe <kehoea@parhasard.net> |
---|---|
date | Sun, 02 Sep 2012 14:31:40 +0100 |
parents | cc8ea7ed4286 |
children | 7371081ce8f7 |
line wrap: on
line diff
--- a/lisp/help.el Sun Aug 12 11:32:36 2012 +0100 +++ b/lisp/help.el Sun Sep 02 14:31:40 2012 +0100 @@ -1497,7 +1497,9 @@ (global-tty-binding (where-is-internal function global-tty-map)) (global-window-system-binding - (where-is-internal function global-window-system-map))) + (where-is-internal function global-window-system-map)) + (command-remapping (command-remapping function)) + (commands-remapped-to (commands-remapped-to function))) (if (or global-binding global-tty-binding global-window-system-binding) (if (and (equal global-binding @@ -1531,11 +1533,23 @@ "\n%s\n -- generally (that is, unless\ overridden by TTY- or window-system-specific mappings)\n" - (mapconcat #'key-description - global-binding + (mapconcat #'key-description global-binding ", "))))) - (princ (substitute-command-keys - (format "\n\\[%s]" function)))))))))))) + (if command-remapping + (progn + (princ "Its keys are remapped to `") + (princ (symbol-name command-remapping)) + (princ "'.\n")) + (princ (substitute-command-keys + (format "\n\\[%s]" function)))) + (when commands-remapped-to + (if (cdr commands-remapped-to) + (princ (format "The following functions are \ +remapped to it:\n`%s'" (mapconcat #'prin1-to-string commands-remapped-to + "', `"))) + (princ (format "`%s' is remapped to it.\n" + (car + commands-remapped-to)))))))))))))) ;;; [Obnoxious, whining people who complain very LOUDLY on Usenet ;;; are binding this to keys.]