diff tests/automated/keymap-tests.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
children cf0201de66df
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/automated/keymap-tests.el	Sun Sep 02 14:31:40 2012 +0100
@@ -0,0 +1,104 @@
+;; Copyright (C) 2012 Free Software Foundation, Inc.
+
+;; Author: Aidan Kehoe <kehoea@parhasard.net>
+;; Maintainers: Aidan Kehoe <kehoea@parhasard.net>
+;; Created: 2012
+;; Keywords: tests
+
+;; This file is part of XEmacs.
+
+;; XEmacs is free software: you can redistribute it and/or modify it
+;; under the terms of the GNU General Public License as published by the
+;; Free Software Foundation, either version 3 of the License, or (at your
+;; option) any later version.
+
+;; XEmacs is distributed in the hope that it will be useful, but WITHOUT
+;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+;; FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+;; for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with XEmacs.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Synched up with: Not in FSF.
+
+(let* ((map (make-keymap 'help-map-copy))
+       (parent-map (make-keymap 'help-map-copy-parent))
+       (help-map-copy t)
+       (minor-mode-map-alist (acons 'help-map-copy map minor-mode-map-alist)))
+  (set-keymap-parent map parent-map)
+  (loop for (keys def) on '((shift tab) help-prev-symbol tab
+                            help-next-symbol c customize-variable V
+                            find-variable-at-point q
+                            help-mode-quit f find-function-at-point d
+                            describe-function-at-point v
+                            describe-variable-at-point i Info-elisp-ref F
+                            find-function-at-point Q help-mode-bury button2
+                            help-mouse-find-source-or-track p
+                            help-prev-section n help-next-section return
+                            help-find-source-or-scroll-up)
+        by #'cddr
+        do (define-key map (vector keys) def))
+  (loop for (keys def) on '(u view-scroll-some-lines-down % view-goto-percent
+                            \2 digit-argument p view-goto-percent \? 
+                            view-search-backward - negative-argument k
+                            view-scroll-lines-down backspace scroll-down G
+                            view-last-windowful f scroll-up \5
+                            digit-argument s view-repeat-search \0
+                            digit-argument n view-repeat-search = what-line
+                            \\ view-search-backward delete scroll-down \8
+                            digit-argument E view-file d
+                            view-scroll-some-lines-up \3 digit-argument q
+                            view-quit ! shell-command (control j)
+                            view-scroll-lines-up (control m)
+                            view-scroll-lines-up y view-scroll-lines-down
+                            linefeed view-scroll-lines-up g view-goto-line
+                            \6 digit-argument t toggle-truncate-lines C
+                            view-cleanup-backspaces b scroll-down \1
+                            digit-argument P view-buffer return
+                            view-scroll-lines-up | shell-command-on-region j
+                            view-scroll-lines-up \9 digit-argument \'
+                            register-to-point e view-scroll-lines-up \4
+                            digit-argument r recenter space scroll-up /
+                            view-search-forward N view-buffer m
+                            point-to-register h view-mode-describe \7
+                            digit-argument
+                            find-function-at-point view-mode-describe)
+        by #'cddr
+        do (define-key parent-map (vector keys) def))
+  (Assert (eq (key-binding [F]) 'find-function-at-point)
+          "checking normal key lookup works, F")
+  (Assert (eq (key-binding [c]) 'customize-variable)
+          "checking normal key lookup works, c")
+  (Assert (eq (key-binding [\2]) 'digit-argument)
+          "checking normal key parent lookup works, \\2")
+  (Assert (eq (key-binding [|]) 'shell-command-on-region)
+          "checking normal key parent lookup works, |")
+  (define-key map [remap find-function-at-point] #'find-file)
+  (Assert (eq (key-binding [F]) 'find-file)
+          "checking remapped key lookup works, F")
+  (Assert (eq (key-binding [f]) 'find-file)
+          "checking remapped key lookup works, f")
+  (Assert (eq (key-binding [\2]) 'digit-argument)
+          "checking normal key parent lookup works, \\2")
+  (Assert (eq (key-binding [|]) 'shell-command-on-region)
+          "checking normal key parent lookup works, |")
+  (Assert (eq (key-binding [find-function-at-point]) 'view-mode-describe)
+          "checking remapped function doesn't affect key name mapping")
+  (define-key parent-map [remap help-next-symbol] #'find-file)
+  (Assert (eq (key-binding [tab]) 'find-file)
+          "checking remapping in parent extends to child")
+  (Assert (equal (commands-remapped-to 'find-file)
+		 '(help-next-symbol find-function-at-point))
+	  "checking #'commands-remapped-to is sane")
+  (Check-Error wrong-type-argument (commands-remapped-to pi))
+  (Check-Error wrong-type-argument (commands-remapped-to 'find-file pi))
+  (Check-Error wrong-type-argument (commands-remapped-to 'find-file nil pi))
+  (Assert (eq (command-remapping 'find-function-at-point) 'find-file)
+	  "checking #'command-remapping is sane")
+  (Check-Error wrong-type-argument (command-remapping pi))
+  (Check-Error wrong-type-argument (command-remapping 'find-function-at-point
+						      pi))
+  (Check-Error wrong-type-argument (command-remapping 'find-function-at-point
+						      nil pi)))
+