diff options
| author | Richard M. Stallman | 1997-05-22 19:00:25 +0000 |
|---|---|---|
| committer | Richard M. Stallman | 1997-05-22 19:00:25 +0000 |
| commit | 97fd9abf62f9ae381fa22c26c888aa5d8f835a7b (patch) | |
| tree | 7a3a5868d9438dddaf5e0e299b214782d744c59f | |
| parent | 8c988426599426f850d9a67937fbe52230539a50 (diff) | |
| download | emacs-97fd9abf62f9ae381fa22c26c888aa5d8f835a7b.tar.gz emacs-97fd9abf62f9ae381fa22c26c888aa5d8f835a7b.zip | |
(substitute-key-definition): Handle chartables.
| -rw-r--r-- | lisp/subr.el | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/lisp/subr.el b/lisp/subr.el index a4ad6937f43..f4a457ab1d3 100644 --- a/lisp/subr.el +++ b/lisp/subr.el | |||
| @@ -180,7 +180,44 @@ in KEYMAP as NEWDEF those chars which are defined as OLDDEF in OLDMAP." | |||
| 180 | (substitute-key-definition olddef newdef keymap | 180 | (substitute-key-definition olddef newdef keymap |
| 181 | inner-def | 181 | inner-def |
| 182 | prefix1))))) | 182 | prefix1))))) |
| 183 | (setq i (1+ i)))))) | 183 | (setq i (1+ i)))) |
| 184 | (if (char-table-p (car scan)) | ||
| 185 | (map-char-table | ||
| 186 | (function (lambda (char defn) | ||
| 187 | (let () | ||
| 188 | ;; The inside of this let duplicates exactly | ||
| 189 | ;; the inside of the previous let, | ||
| 190 | ;; except that it uses set-char-table-range | ||
| 191 | ;; instead of define-key. | ||
| 192 | (aset vec1 0 char) | ||
| 193 | (aset prefix1 (length prefix) char) | ||
| 194 | (let (inner-def skipped) | ||
| 195 | ;; Skip past menu-prompt. | ||
| 196 | (while (stringp (car-safe defn)) | ||
| 197 | (setq skipped (cons (car defn) skipped)) | ||
| 198 | (setq defn (cdr defn))) | ||
| 199 | (and (consp defn) (consp (car defn)) | ||
| 200 | (setq defn (cdr defn))) | ||
| 201 | (setq inner-def defn) | ||
| 202 | (while (and (symbolp inner-def) | ||
| 203 | (fboundp inner-def)) | ||
| 204 | (setq inner-def (symbol-function inner-def))) | ||
| 205 | (if (or (eq defn olddef) | ||
| 206 | (and (or (stringp defn) (vectorp defn)) | ||
| 207 | (equal defn olddef))) | ||
| 208 | (set-char-table-range (car scan) | ||
| 209 | char | ||
| 210 | (nconc (nreverse skipped) newdef)) | ||
| 211 | (if (and (keymapp defn) | ||
| 212 | (let ((elt (lookup-key keymap prefix1))) | ||
| 213 | (or (null elt) | ||
| 214 | (keymapp elt))) | ||
| 215 | (not (memq inner-def | ||
| 216 | key-substitution-in-progress))) | ||
| 217 | (substitute-key-definition olddef newdef keymap | ||
| 218 | inner-def | ||
| 219 | prefix1))))))) | ||
| 220 | (car scan))))) | ||
| 184 | (setq scan (cdr scan))))) | 221 | (setq scan (cdr scan))))) |
| 185 | 222 | ||
| 186 | (defun define-key-after (keymap key definition after) | 223 | (defun define-key-after (keymap key definition after) |