aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard M. Stallman1997-05-22 19:00:25 +0000
committerRichard M. Stallman1997-05-22 19:00:25 +0000
commit97fd9abf62f9ae381fa22c26c888aa5d8f835a7b (patch)
tree7a3a5868d9438dddaf5e0e299b214782d744c59f
parent8c988426599426f850d9a67937fbe52230539a50 (diff)
downloademacs-97fd9abf62f9ae381fa22c26c888aa5d8f835a7b.tar.gz
emacs-97fd9abf62f9ae381fa22c26c888aa5d8f835a7b.zip
(substitute-key-definition): Handle chartables.
-rw-r--r--lisp/subr.el39
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)