annotate lisp/keymap.el @ 5576:071b810ceb18

Declare labels as line where appropriate; use #'labels, not #'flet, tests. lisp/ChangeLog addition: 2011-10-03 Aidan Kehoe <kehoea@parhasard.net> * simple.el (handle-pre-motion-command-current-command-is-motion): Implement #'keysyms-equal with #'labels + (declare (inline ...)), instead of abusing macrolet to the same end. * specifier.el (let-specifier): * mule/mule-cmds.el (describe-language-environment): * mule/mule-cmds.el (set-language-environment-coding-systems): * mule/mule-x-init.el (x-use-halfwidth-roman-font): * faces.el (Face-frob-property): * keymap.el (key-sequence-list-description): * lisp-mode.el (construct-lisp-mode-menu): * loadhist.el (unload-feature): * mouse.el (default-mouse-track-check-for-activation): Declare various labels inline in dumped files when that reduces the size of the dumped image. Declaring labels inline is normally only worthwhile for inner loops and so on, but it's reasonable exercise of the related code to have these changes in core. tests/ChangeLog addition: 2011-10-03 Aidan Kehoe <kehoea@parhasard.net> * automated/case-tests.el (uni-mappings): * automated/database-tests.el (delete-database-files): * automated/hash-table-tests.el (iterations): * automated/lisp-tests.el (test1): * automated/lisp-tests.el (a): * automated/lisp-tests.el (cl-floor): * automated/lisp-tests.el (foo): * automated/lisp-tests.el (list-nreverse): * automated/lisp-tests.el (needs-lexical-context): * automated/mule-tests.el (featurep): * automated/os-tests.el (original-string): * automated/os-tests.el (with): * automated/symbol-tests.el (check-weak-list-unique): Replace #'flet with #'labels where appropriate in these tests, following my own advice on style in the docstrings of those functions.
author Aidan Kehoe <kehoea@parhasard.net>
date Mon, 03 Oct 2011 20:16:14 +0100
parents 3bc58dc9d688
children f9e4d44504a4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 ;; keymap.el --- Keymap functions for XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3 ;; Copyright (C) 1993-4, 1997 Free Software Foundation, Inc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4 ;; Copyright (C) 1995 Tinker Systems and INS Engineering Corp.
1333
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
5 ;; Copyright (C) 2003 Ben Wing.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 ;; Maintainer: XEmacs Development Team
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 ;; Keywords: internals, dumped
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10 ;; This file is part of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 2828
diff changeset
12 ;; XEmacs is free software: you can redistribute it and/or modify it
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 2828
diff changeset
13 ;; under the terms of the GNU General Public License as published by the
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 2828
diff changeset
14 ;; Free Software Foundation, either version 3 of the License, or (at your
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 2828
diff changeset
15 ;; option) any later version.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 2828
diff changeset
17 ;; XEmacs is distributed in the hope that it will be useful, but WITHOUT
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 2828
diff changeset
18 ;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 2828
diff changeset
19 ;; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 2828
diff changeset
20 ;; for more details.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22 ;; You should have received a copy of the GNU General Public License
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 2828
diff changeset
23 ;; along with XEmacs. If not, see <http://www.gnu.org/licenses/>.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25 ;;; Synched up with: FSF 19.28.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27 ;;; Commentary:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29 ;; This file is dumped with XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31 ;;; Note: FSF does not have a file keymap.el. This stuff is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32 ;;; in keymap.c.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34 ;Prevent the \{...} documentation construct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35 ;from mentioning keys that run this command.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37 ;;; Code:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38
1333
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
39 ;; BEGIN SYNCHED WITH FSF 21.2.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41 (defun undefined ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42 (interactive)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43 (ding))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44
1333
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
45 ;Prevent the \{...} documentation construct
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
46 ;from mentioning keys that run this command.
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
47 (put 'undefined 'suppress-keymap t)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49 (defun suppress-keymap (map &optional nodigits)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 "Make MAP override all normally self-inserting keys to be undefined.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51 Normally, as an exception, digits and minus-sign are set to make prefix args,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52 but optional second arg NODIGITS non-nil treats them like other chars."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53 (substitute-key-definition 'self-insert-command 'undefined map global-map)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 (or nodigits
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 (let ((string (make-string 1 ?0)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 (define-key map "-" 'negative-argument)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 ;; Make plain numbers do numeric args.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 (while (<= (aref string 0) ?9)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59 (define-key map string 'digit-argument)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60 (incf (aref string 0))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61
1333
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
62 ;Unneeded in XEmacs (defvar key-substitution-in-progress nil
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
63
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64 (defun substitute-key-definition (olddef newdef keymap &optional oldmap prefix)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65 "Replace OLDDEF with NEWDEF for any keys in KEYMAP now defined as OLDDEF.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 In other words, OLDDEF is replaced with NEWDEF wherever it appears.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67 Prefix keymaps are checked recursively. If optional fourth argument OLDMAP
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68 is specified, we redefine in KEYMAP as NEWDEF those chars which are defined
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
69 as OLDDEF in OLDMAP, unless that keybinding is already present in KEYMAP.
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
70 If optional fifth argument PREFIX is non-nil, then only those occurrences of
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 OLDDEF found in keymaps accessible through the keymap bound to PREFIX in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72 KEYMAP are redefined. See also `accessible-keymaps'."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73 (let ((maps (accessible-keymaps (or oldmap keymap) prefix))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74 (shadowing (not (null oldmap)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 prefix map)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 (while maps
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77 (setq prefix (car (car maps))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78 map (cdr (car maps))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79 maps (cdr maps))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80 ;; Substitute in this keymap
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81 (map-keymap #'(lambda (key binding)
1333
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
82 (if (or (eq binding olddef)
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
83 ;; Compare with equal if definition is a key
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
84 ;; sequence. That is useful for operating on
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
85 ;; function-key-map.
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
86 (and (or (stringp binding) (vectorp binding))
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
87 (equal binding olddef)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88 ;; The new bindings always go in KEYMAP even if we
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 ;; found them in OLDMAP or one of its children.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90 ;; If KEYMAP will be shadowing OLDMAP, then do not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91 ;; redefine the key if there is another binding
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92 ;; in KEYMAP that will shadow OLDDEF.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
93 (or (and shadowing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94 (lookup-key keymap key))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95 ;; define-key will give an error if a prefix
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 ;; of the key is already defined. Otherwise
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97 ;; it will define the key in the map.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98 ;; #### - Perhaps this should be protected?
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99 (define-key
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100 keymap
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101 (vconcat prefix (list key))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102 newdef))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103 map)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104 )))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105
1333
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
106 ;; FSF garbage. They misguidedly tried to put menu entries into keymaps,
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
107 ;; and needed stuff like the following. Eventually they admitted defeat
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
108 ;; and switched to our method.
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
109
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
110 ; (defun define-key-after (keymap key definition &optional after)
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
111 ; "Add binding in KEYMAP for KEY => DEFINITION, right after AFTER's binding.
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
112 ; This is like `define-key' except that the binding for KEY is placed
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
113 ; just after the binding for the event AFTER, instead of at the beginning
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
114 ; of the map. Note that AFTER must be an event type (like KEY), NOT a command
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
115 ; \(like DEFINITION).
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
116 ;
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
117 ; If AFTER is t or omitted, the new binding goes at the end of the keymap.
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
118 ;
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
119 ; KEY must contain just one event type--that is to say, it must be a
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
120 ; string or vector of length 1, but AFTER should be a single event
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
121 ; type--a symbol or a character, not a sequence.
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
122 ;
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
123 ; Bindings are always added before any inherited map.
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
124 ;
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
125 ; The order of bindings in a keymap matters when it is used as a menu."
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
126
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
127 (defmacro kbd (keys)
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
128 "Convert KEYS to the internal Emacs key representation.
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
129 KEYS should be a string constant in the format used for
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
130 saving keyboard macros (see `insert-kbd-macro')."
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
131 (if (or (stringp keys)
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
132 (vectorp keys))
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
133 ;; #### need to move xemacs-base into the core!!!!!!
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
134 (declare-fboundp (read-kbd-macro keys))
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
135 `(declare-fboundp (read-kbd-macro ,keys))))
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
136
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 776
diff changeset
137 ;; END SYNCHED WITH FSF 21.2.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
138
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
139 ;; This used to wrap forms into an interactive lambda. It is unclear
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
140 ;; to me why this is needed in this function. Anyway,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
141 ;; `key-or-menu-binding' doesn't do it, so this function no longer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
142 ;; does it, either.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
143 (defun insert-key-binding (key) ; modeled after describe-key
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
144 "Insert the command bound to KEY."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
145 (interactive "kInsert command bound to key: ")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
146 (let ((defn (key-or-menu-binding key)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
147 (if (or (null defn) (integerp defn))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
148 (error "%s is undefined" (key-description key))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
149 (if (or (stringp defn) (vectorp defn))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
150 (setq defn (key-binding defn))) ;; a keyboard macro
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
151 (insert (format "%s" defn)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
152
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
153 (defun read-command-or-command-sexp (prompt)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
154 "Read a command symbol or command sexp.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155 A command sexp is wrapped in an interactive lambda if needed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
156 Prompts with PROMPT."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157 ;; Todo: it would be better if we could reject symbols that are not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158 ;; commandp (as does 'read-command') but that is not easy to do
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159 ;; because we must supply arg4 = require-match = nil for sexp case.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160 (let ((result (car (read-from-string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161 (completing-read prompt obarray 'commandp)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162 (if (and (consp result)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163 (not (eq (car result) 'lambda)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164 `(lambda ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 (interactive)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
166 ,result)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167 result)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
169 (defun local-key-binding (keys &optional accept-defaults)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
170 "Return the binding for command KEYS in current local keymap only.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 KEYS is a string, a vector of events, or a vector of key-description lists
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172 as described in the documentation for the `define-key' function.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173 The binding is probably a symbol with a function definition; see
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174 the documentation for `lookup-key' for more information."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175 (let ((map (current-local-map)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176 (if map
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
177 (lookup-key map keys accept-defaults)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178 nil)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
180 (defun global-key-binding (keys &optional accept-defaults)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181 "Return the binding for command KEYS in current global keymap only.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182 KEYS is a string or vector of events, a sequence of keystrokes.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183 The binding is probably a symbol with a function definition; see
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184 the documentation for `lookup-key' for more information."
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
185 (lookup-key (current-global-map) keys accept-defaults))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
186
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187 (defun global-set-key (key command)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188 "Give KEY a global binding as COMMAND.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189 COMMAND is a symbol naming an interactively-callable function.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 KEY is a string, a vector of events, or a vector of key-description lists
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191 as described in the documentation for the `define-key' function.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192 Note that if KEY has a local binding in the current buffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193 that local binding will continue to shadow any global binding."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 ;;(interactive "KSet key globally: \nCSet key %s to command: ")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195 (interactive (list (setq key (read-key-sequence "Set key globally: "))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196 ;; Command sexps are allowed here so that this arg
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197 ;; may be supplied interactively via insert-key-binding.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198 (read-command-or-command-sexp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
199 (format "Set key %s to command: "
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
200 (key-description key)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201 (define-key (current-global-map) key command)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
202 nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
204 (defun local-set-key (key command)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205 "Give KEY a local binding as COMMAND.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206 COMMAND is a symbol naming an interactively-callable function.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207 KEY is a string, a vector of events, or a vector of key-description lists
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208 as described in the documentation for the `define-key' function.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209 The binding goes in the current buffer's local map,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210 which is shared with other buffers in the same major mode."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
211 ;;(interactive "KSet key locally: \nCSet key %s locally to command: ")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
212 (interactive (list (setq key (read-key-sequence "Set key locally: "))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
213 ;; Command sexps are allowed here so that this arg
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214 ;; may be supplied interactively via insert-key-binding.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215 (read-command-or-command-sexp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
216 (format "Set key %s locally to command: "
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217 (key-description key)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218 (if (null (current-local-map))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219 (use-local-map (make-sparse-keymap)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220 (define-key (current-local-map) key command)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221 nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223 (defun global-unset-key (key)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224 "Remove global binding of KEY.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
225 KEY is a string, a vector of events, or a vector of key-description lists
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226 as described in the documentation for the `define-key' function."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
227 (interactive "kUnset key globally: ")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228 (global-set-key key nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
230 (defun local-unset-key (key)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
231 "Remove local binding of KEY.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
232 KEY is a string, a vector of events, or a vector of key-description lists
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233 as described in the documentation for the `define-key' function."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
234 (interactive "kUnset key locally: ")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
235 (if (current-local-map)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
236 (define-key (current-local-map) key nil)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
237
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
238
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
239 ;; FSF-inherited brain-death.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
240 (defun minor-mode-key-binding (key &optional accept-default)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
241 "Find the visible minor mode bindings of KEY.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
242 Return an alist of pairs (MODENAME . BINDING), where MODENAME is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243 the symbol which names the minor mode binding KEY, and BINDING is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
244 KEY's definition in that mode. In particular, if KEY has no
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
245 minor-mode bindings, return nil. If the first binding is a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
246 non-prefix, all subsequent bindings will be omitted, since they would
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
247 be ignored. Similarly, the list doesn't include non-prefix bindings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
248 that come after prefix bindings.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
249
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
250 If optional argument ACCEPT-DEFAULT is non-nil, recognize default
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
251 bindings; see the description of `lookup-key' for more details about this."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
252 (let ((tail minor-mode-map-alist)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
253 a s v)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
254 (while tail
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255 (setq a (car tail)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256 tail (cdr tail))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
257 (and (consp a)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
258 (symbolp (setq s (car a)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
259 (boundp s)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
260 (symbol-value s)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
261 ;; indirect-function deals with autoloadable keymaps
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
262 (setq v (indirect-function (cdr a)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
263 (setq v (lookup-key v key accept-default))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
264 ;; Terminate loop, with v set to non-nil value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
265 (setq tail nil)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266 v))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
269 (defun current-minor-mode-maps ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
270 "Return a list of keymaps for the minor modes of the current buffer."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
271 (let ((l '())
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
272 (tail minor-mode-map-alist)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
273 a s v)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274 (while tail
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
275 (setq a (car tail)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
276 tail (cdr tail))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
277 (and (consp a)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
278 (symbolp (setq s (car a)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
279 (boundp s)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
280 (symbol-value s)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
281 ;; indirect-function deals with autoloadable keymaps
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
282 (setq v (indirect-function (cdr a)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
283 (setq l (cons v l))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
284 (nreverse l)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
285
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
286
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
287 ;;#### What a crock
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
288 (defun define-prefix-command (name &optional mapvar)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
289 "Define COMMAND as a prefix command.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
290 A new sparse keymap is stored as COMMAND's function definition.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
291 If second optional argument MAPVAR is not specified,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
292 COMMAND's value (as well as its function definition) is set to the keymap.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
293 If a second optional argument MAPVAR is given and is not `t',
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
294 the map is stored as its value.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
295 Regardless of MAPVAR, COMMAND's function-value is always set to the keymap."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
296 (let ((map (make-sparse-keymap name)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
297 (fset name map)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
298 (cond ((not mapvar)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
299 (set name map))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
300 ((eq mapvar 't)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
301 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
302 (t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
303 (set mapvar map)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
304 name))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
305
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
306
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
307 ;;; Converting vectors of events to a read-equivalent form.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
308 ;;; This is used both by call-interactively (for the command history)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
309 ;;; and by macros.el (for saving keyboard macros to a file).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
310
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
311 ;; #### why does (events-to-keys [backspace]) return "\C-h"?
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
312 ;; BTW, this function is a mess, and macros.el does *not* use it, in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
313 ;; spite of the above comment. `format-kbd-macro' is used to save
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
314 ;; keyboard macros to a file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
315 (defun events-to-keys (events &optional no-mice)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
316 "Given a vector of event objects, returns a vector of key descriptors,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
317 or a string (if they all fit in the ASCII range).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
318 Optional arg NO-MICE means that button events are not allowed."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
319 (if (and events (symbolp events)) (setq events (vector events)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
320 (cond ((stringp events)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
321 events)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
322 ((not (vectorp events))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
323 (signal 'wrong-type-argument (list 'vectorp events)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
324 ((let* ((length (length events))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
325 (string (make-string length 0))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
326 c ce
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
327 (i 0))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
328 (while (< i length)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
329 (setq ce (aref events i))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
330 (or (eventp ce) (setq ce (character-to-event ce)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
331 ;; Normalize `c' to `?c' and `(control k)' to `?\C-k'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
332 ;; By passing t for the `allow-meta' arg we could get kbd macros
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
333 ;; with meta in them to translate to the string form instead of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
334 ;; the list/symbol form; but I expect that would cause confusion,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
335 ;; so let's use the list/symbol form whenever there's
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
336 ;; any ambiguity.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
337 (setq c (event-to-character ce))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
338 (if (and c
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
339 (key-press-event-p ce))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
340 (cond ((symbolp (event-key ce))
2828
a25c824ed558 [xemacs-hg @ 2005-06-26 18:04:49 by aidan]
aidan
parents: 1333
diff changeset
341 (if (get (event-key ce) 'character-of-keysym)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
342 ;; Don't use a string for `backspace' and `tab' to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
343 ;; avoid that unpleasant little ambiguity.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
344 (setq c nil)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
345 ((and (= (event-modifier-bits ce) 1) ;control
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
346 (integerp (event-key ce)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
347 (let* ((te (character-to-event c)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
348 (if (and (symbolp (event-key te))
2828
a25c824ed558 [xemacs-hg @ 2005-06-26 18:04:49 by aidan]
aidan
parents: 1333
diff changeset
349 (get (event-key te) 'character-of-keysym))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
350 ;; Don't "normalize" (control i) to tab
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351 ;; to avoid the ambiguity in the other direction
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
352 (setq c nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
353 (deallocate-event te)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
354 (if c
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
355 (aset string i c)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
356 (setq i length string nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
357 (setq i (1+ i)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
358 string))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
359 (t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
360 (let* ((length (length events))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
361 (new (copy-sequence events))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
362 event mods key
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
363 (i 0))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
364 (while (< i length)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
365 (setq event (aref events i))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
366 (cond ((key-press-event-p event)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
367 (setq mods (event-modifiers event)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
368 key (event-key event))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
369 (if (numberp key)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
370 (setq key (intern (make-string 1 key))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
371 (aset new i (if mods
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
372 (nconc mods (cons key nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
373 key)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
374 ((misc-user-event-p event)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
375 (aset new i (list 'menu-selection
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
376 (event-function event)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
377 (event-object event))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
378 ((or (button-press-event-p event)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
379 (button-release-event-p event))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
380 (if no-mice
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
381 (error
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
382 "Mouse events can't be saved in keyboard macros."))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
383 (setq mods (event-modifiers event)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
384 key (intern (format "button%d%s"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
385 (event-button event)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
386 (if (button-release-event-p event)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
387 "up" ""))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
388 (aset new i (if mods
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
389 (nconc mods (cons key nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
390 key)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
391 ((or (and event (symbolp event))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
392 (and (consp event) (symbolp (car event))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
393 (aset new i event))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
394 (t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
395 (signal 'wrong-type-argument (list 'eventp event))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
396 (setq i (1+ i)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
397 new))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
398
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
399
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
400 (defun next-key-event ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
401 "Return the next available keyboard event."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
402 (let (event)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
403 (while (not (key-press-event-p (setq event (next-command-event))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
404 (dispatch-event event))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
405 event))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
406
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
407 (defun key-sequence-list-description (keys)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
408 "Convert a key sequence KEYS to the full [(modifiers... key)...] form.
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 444
diff changeset
409 Argument KEYS can be in any form accepted by `define-key' function.
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 444
diff changeset
410 The output is always in a canonical form, meaning you can use this
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 444
diff changeset
411 function to determine if two key sequence specifications are equivalent
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 444
diff changeset
412 by comparing the respective outputs of this function using `equal'."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
413 (let ((vec
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 444
diff changeset
414 (cond ((vectorp keys)
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 444
diff changeset
415 keys)
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 444
diff changeset
416 ((stringp keys)
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 444
diff changeset
417 (vconcat keys))
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 444
diff changeset
418 (t
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 444
diff changeset
419 (vector keys)))))
5567
3bc58dc9d688 Replace #'flet by #'labels where appropriate, core code.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5549
diff changeset
420 (labels ((event-to-list (ev)
3bc58dc9d688 Replace #'flet by #'labels where appropriate, core code.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5549
diff changeset
421 (append (event-modifiers ev) (list (event-key ev)))))
5576
071b810ceb18 Declare labels as line where appropriate; use #'labels, not #'flet, tests.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5567
diff changeset
422 (declare (inline event-to-list))
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 444
diff changeset
423 (mapvector
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 444
diff changeset
424 #'(lambda (key)
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 444
diff changeset
425 (let* ((full-key
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 444
diff changeset
426 (cond ((key-press-event-p key)
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 444
diff changeset
427 (event-to-list key))
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 444
diff changeset
428 ((characterp key)
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 444
diff changeset
429 (event-to-list (character-to-event key)))
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 444
diff changeset
430 ((listp key)
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 444
diff changeset
431 (copy-sequence key))
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 444
diff changeset
432 (t
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 444
diff changeset
433 (list key))))
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 444
diff changeset
434 (keysym (car (last full-key))))
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 444
diff changeset
435 (if (characterp keysym)
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 444
diff changeset
436 (setcar (last full-key) (intern (char-to-string keysym))))
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 444
diff changeset
437 full-key))
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 444
diff changeset
438 vec))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
439
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
440
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
441 ;;; Support keyboard commands to turn on various modifiers.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
442
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
443 ;;; These functions -- which are not commands -- each add one modifier
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
444 ;;; to the following event.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
445
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
446 (defun event-apply-alt-modifier (ignore-prompt)
5549
493c487cbc3f Add #'event-apply-modifiers, implement #'event-apply-modifiers in terms of it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5529
diff changeset
447 (event-apply-modifiers '(alt)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
448 (defun event-apply-super-modifier (ignore-prompt)
5549
493c487cbc3f Add #'event-apply-modifiers, implement #'event-apply-modifiers in terms of it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5529
diff changeset
449 (event-apply-modifiers '(super)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
450 (defun event-apply-hyper-modifier (ignore-prompt)
5549
493c487cbc3f Add #'event-apply-modifiers, implement #'event-apply-modifiers in terms of it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5529
diff changeset
451 (event-apply-modifiers '(hyper)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
452 (defun event-apply-shift-modifier (ignore-prompt)
5549
493c487cbc3f Add #'event-apply-modifiers, implement #'event-apply-modifiers in terms of it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5529
diff changeset
453 (event-apply-modifiers '(shift)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
454 (defun event-apply-control-modifier (ignore-prompt)
5549
493c487cbc3f Add #'event-apply-modifiers, implement #'event-apply-modifiers in terms of it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5529
diff changeset
455 (event-apply-modifiers '(control)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
456 (defun event-apply-meta-modifier (ignore-prompt)
5549
493c487cbc3f Add #'event-apply-modifiers, implement #'event-apply-modifiers in terms of it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5529
diff changeset
457 (event-apply-modifiers '(meta)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
458
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
459 ;;; #### `key-translate-map' is ignored for now.
5549
493c487cbc3f Add #'event-apply-modifiers, implement #'event-apply-modifiers in terms of it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5529
diff changeset
460 (defun event-apply-modifiers (list)
493c487cbc3f Add #'event-apply-modifiers, implement #'event-apply-modifiers in terms of it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5529
diff changeset
461 "Return the next key event, with a list of modifiers applied.
493c487cbc3f Add #'event-apply-modifiers, implement #'event-apply-modifiers in terms of it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5529
diff changeset
462 LIST describes the names of these modifier, a list of symbols.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
463 `function-key-map' is scanned for prefix bindings."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
464 (let (events binding)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
465 ;; read keystrokes scanning `function-key-map'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
466 (while (keymapp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
467 (setq binding
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
468 (lookup-key
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
469 function-key-map
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
470 (vconcat
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
471 (setq events
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
472 (append events (list (next-key-event)))))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
473 (if binding ; found a binding
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
474 (progn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
475 ;; allow for several modifiers
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
476 (if (and (symbolp binding) (fboundp binding))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
477 (setq binding (funcall binding nil)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
478 (setq events (append binding nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
479 ;; put remaining keystrokes back into input queue
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
480 (setq unread-command-events
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
481 (mapcar 'character-to-event (cdr events))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
482 (setq unread-command-events (cdr events)))
5549
493c487cbc3f Add #'event-apply-modifiers, implement #'event-apply-modifiers in terms of it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5529
diff changeset
483 ;; add modifiers LIST to the first keystroke or event
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
484 (vector
5549
493c487cbc3f Add #'event-apply-modifiers, implement #'event-apply-modifiers in terms of it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5529
diff changeset
485 (append list
493c487cbc3f Add #'event-apply-modifiers, implement #'event-apply-modifiers in terms of it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5529
diff changeset
486 (set-difference (aref (key-sequence-list-description (car events))
493c487cbc3f Add #'event-apply-modifiers, implement #'event-apply-modifiers in terms of it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5529
diff changeset
487 0)
493c487cbc3f Add #'event-apply-modifiers, implement #'event-apply-modifiers in terms of it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5529
diff changeset
488 list :stable t)))))
493c487cbc3f Add #'event-apply-modifiers, implement #'event-apply-modifiers in terms of it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5529
diff changeset
489
493c487cbc3f Add #'event-apply-modifiers, implement #'event-apply-modifiers in terms of it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5529
diff changeset
490 (defun event-apply-modifier (symbol)
493c487cbc3f Add #'event-apply-modifiers, implement #'event-apply-modifiers in terms of it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5529
diff changeset
491 "Return the next key event, with a single modifier applied.
493c487cbc3f Add #'event-apply-modifiers, implement #'event-apply-modifiers in terms of it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5529
diff changeset
492 See `event-apply-modifiers'."
493c487cbc3f Add #'event-apply-modifiers, implement #'event-apply-modifiers in terms of it.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5529
diff changeset
493 (event-apply-modifiers (list symbol)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
494
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
495 (defun synthesize-keysym (ignore-prompt)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
496 "Read a sequence of keys, and returned the corresponding key symbol.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
497 The characters must be from the [-_a-zA-Z0-9]. Reading is terminated
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
498 by RET (which is discarded)."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
499 (let ((continuep t)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
500 event char list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
501 (while continuep
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
502 (setq event (next-key-event))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
503 (cond ((and (setq char (event-to-character event))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
504 (or (memq char '(?- ?_))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
505 (eq ?w (char-syntax char (standard-syntax-table)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
506 ;; Advance a character.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
507 (push char list))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
508 ((or (memq char '(?\r ?\n))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
509 (memq (event-key event) '(return newline)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
510 ;; Legal termination.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
511 (setq continuep nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
512 (char
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
513 ;; Illegal character.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
514 (error "Illegal character in keysym: %c" char))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
515 (t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
516 ;; Illegal event.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
517 (error "Event has no character equivalent: %s" event))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
518 (vector (intern (concat "" (nreverse list))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
519
5529
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
520 (define-key function-key-map-parent [?\C-x ?@ ?h] 'event-apply-hyper-modifier)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
521 (define-key function-key-map-parent [?\C-x ?@ ?s] 'event-apply-super-modifier)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
522 (define-key function-key-map-parent [?\C-x ?@ ?m] 'event-apply-meta-modifier)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
523 (define-key function-key-map-parent [?\C-x ?@ ?S] 'event-apply-shift-modifier)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
524 (define-key function-key-map-parent [?\C-x ?@ ?c] 'event-apply-control-modifier)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
525 (define-key function-key-map-parent [?\C-x ?@ ?a] 'event-apply-alt-modifier)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
526 (define-key function-key-map-parent [?\C-x ?@ ?k] 'synthesize-keysym)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
527
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
528 ;; The autoloads for the compose map, and their bindings in
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
529 ;; function-key-map-parent are used by GTK as well as X11. And Julian
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
530 ;; Bradfield, at least, uses x-compose on the TTY, it's reasonable to make
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
531 ;; them generally available.
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
532
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
533 (loop for map in '(compose-acute-map compose-breve-map compose-caron-map
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
534 compose-cedilla-map compose-circumflex-map
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
535 compose-diaeresis-map compose-dot-map
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
536 compose-doubleacute-map compose-grave-map
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
537 compose-hook-map compose-horn-map compose-macron-map
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
538 compose-map compose-ogonek-map compose-ring-map
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
539 compose-stroke-map compose-tilde-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
540 do (autoload map "x-compose" nil t 'keymap))
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
541
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
542 (loop
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
543 for (key map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
544 ;; The dead keys might really be called just about anything, depending
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
545 ;; on the vendor. MIT thinks that the prefixes are "SunFA_", "D", and
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
546 ;; "hpmute_" for Sun, DEC, and HP respectively. However, OpenWindows 3
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
547 ;; thinks that the prefixes are "SunXK_FA_", "DXK_", and "hpXK_mute_".
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
548 ;; And HP (who don't mention Sun and DEC at all) use "XK_mute_". Go
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
549 ;; figure.
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
550
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
551 ;; Presumably if someone is running OpenWindows, they won't be using the
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
552 ;; DEC or HP keysyms, but if they are defined then that is possible, so
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
553 ;; in that case we accept them all.
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
554
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
555 ;; If things seem not to be working, you might want to check your
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
556 ;; /usr/lib/X11/XKeysymDB file to see if your vendor has an equally
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
557 ;; mixed up view of what these keys should be called.
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
558
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
559 ;; Canonical names:
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
560 in '((acute compose-acute-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
561 (grave compose-grave-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
562 (cedilla compose-cedilla-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
563 (diaeresis compose-diaeresis-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
564 (circumflex compose-circumflex-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
565 (tilde compose-tilde-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
566 (degree compose-ring-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
567 (multi-key compose-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
568
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
569 ;; Sun according to MIT:
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
570 (SunFA_Acute compose-acute-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
571 (SunFA_Grave compose-grave-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
572 (SunFA_Cedilla compose-cedilla-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
573 (SunFA_Diaeresis compose-diaeresis-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
574 (SunFA_Circum compose-circumflex-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
575 (SunFA_Tilde compose-tilde-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
576
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
577 ;; Sun according to OpenWindows 2:
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
578 (Dead_Grave compose-grave-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
579 (Dead_Circum compose-circumflex-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
580 (Dead_Tilde compose-tilde-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
581
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
582 ;; Sun according to OpenWindows 3:
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
583 (SunXK_FA_Acute compose-acute-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
584 (SunXK_FA_Grave compose-grave-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
585 (SunXK_FA_Cedilla compose-cedilla-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
586 (SunXK_FA_Diaeresis compose-diaeresis-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
587 (SunXK_FA_Circum compose-circumflex-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
588 (SunXK_FA_Tilde compose-tilde-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
589
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
590 ;; DEC according to MIT:
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
591 (Dacute_accent compose-acute-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
592 (Dgrave_accent compose-grave-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
593 (Dcedilla_accent compose-cedilla-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
594 (Dcircumflex_accent compose-circumflex-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
595 (Dtilde compose-tilde-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
596 (Dring_accent compose-ring-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
597
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
598 ;; DEC according to OpenWindows 3:
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
599 (DXK_acute_accent compose-acute-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
600 (DXK_grave_accent compose-grave-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
601 (DXK_cedilla_accent compose-cedilla-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
602 (DXK_circumflex_accent compose-circumflex-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
603 (DXK_tilde compose-tilde-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
604 (DXK_ring_accent compose-ring-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
605
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
606 ;; HP according to MIT:
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
607 (hpmute_acute compose-acute-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
608 (hpmute_grave compose-grave-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
609 (hpmute_diaeresis compose-diaeresis-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
610 (hpmute_asciicircum compose-circumflex-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
611 (hpmute_asciitilde compose-tilde-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
612
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
613 ;; Empirically discovered on Linux XFree86 MetroX:
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
614 (usldead_acute compose-acute-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
615 (usldead_grave compose-grave-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
616 (usldead_diaeresis compose-diaeresis-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
617 (usldead_asciicircum compose-circumflex-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
618 (usldead_asciitilde compose-tilde-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
619
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
620 ;; HP according to OpenWindows 3:
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
621 (hpXK_mute_acute compose-acute-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
622 (hpXK_mute_grave compose-grave-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
623 (hpXK_mute_diaeresis compose-diaeresis-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
624 (hpXK_mute_asciicircum compose-circumflex-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
625 (hpXK_mute_asciitilde compose-tilde-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
626
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
627 ;; HP according to HP-UX 8.0:
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
628 (XK_mute_acute compose-acute-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
629 (XK_mute_grave compose-grave-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
630 (XK_mute_diaeresis compose-diaeresis-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
631 (XK_mute_asciicircum compose-circumflex-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
632 (XK_mute_asciitilde compose-tilde-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
633
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
634 ;; XFree86 uses lower case and an underscore. XEmacs converts the
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
635 ;; underscore to a hyphen in x_keysym_to_emacs_keysym because the
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
636 ;; keysym is in the "Keyboard" character set, which seems a very
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
637 ;; arbitrary approach.
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
638 (dead-acute compose-acute-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
639 (dead-grave compose-grave-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
640 (dead-cedilla compose-cedilla-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
641 (dead-diaeresis compose-diaeresis-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
642 (dead-circum compose-circumflex-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
643 (dead-circumflex compose-circumflex-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
644 (dead-tilde compose-tilde-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
645 (dead-abovering compose-ring-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
646 (dead-caron compose-caron-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
647 (dead-macron compose-macron-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
648 (dead-breve compose-breve-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
649 (dead-abovedot compose-dot-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
650 (dead-doubleacute compose-doubleacute-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
651 (dead-ogonek compose-ogonek-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
652 (dead-hook compose-hook-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
653 (dead-horn compose-horn-map)
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
654 (dead-stroke compose-stroke-map))
3d1f8f0e690f Add `function-key-map-parent', for non-console-specific `function-key-map' bindings
Aidan Kehoe <kehoea@parhasard.net>
parents: 5402
diff changeset
655 do (define-key function-key-map-parent (vector key) map))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
656
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
657 ;;; keymap.el ends here