aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard M. Stallman1994-02-19 00:01:46 +0000
committerRichard M. Stallman1994-02-19 00:01:46 +0000
commit44d798af465ed1d3ca9ccd11d40199a196c77213 (patch)
tree3c7e731ca15c33520bdfa5f9d760d3c024bf9be2
parent2eb9adabed31a8b90efcbc2ce62ae954a8b78a59 (diff)
downloademacs-44d798af465ed1d3ca9ccd11d40199a196c77213.tar.gz
emacs-44d798af465ed1d3ca9ccd11d40199a196c77213.zip
(substitute-key-definition): Don't discard menu strings.
-rw-r--r--lisp/subr.el11
1 files changed, 7 insertions, 4 deletions
diff --git a/lisp/subr.el b/lisp/subr.el
index 4a50dca95f3..ad5b50ccadf 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -152,16 +152,17 @@ in KEYMAP as NEWDEF those chars which are defined as OLDDEF in OLDMAP."
152 ;; the inside of the following let that handles array elements. 152 ;; the inside of the following let that handles array elements.
153 (aset vec1 0 char) 153 (aset vec1 0 char)
154 (aset prefix1 (length prefix) char) 154 (aset prefix1 (length prefix) char)
155 (let (inner-def) 155 (let (inner-def skipped)
156 ;; Skip past menu-prompt. 156 ;; Skip past menu-prompt.
157 (while (stringp (car-safe defn)) 157 (while (stringp (car-safe defn))
158 (setq skipped (cons (car defn) skipped))
158 (setq defn (cdr defn))) 159 (setq defn (cdr defn)))
159 (setq inner-def defn) 160 (setq inner-def defn)
160 (while (and (symbolp inner-def) 161 (while (and (symbolp inner-def)
161 (fboundp inner-def)) 162 (fboundp inner-def))
162 (setq inner-def (symbol-function inner-def))) 163 (setq inner-def (symbol-function inner-def)))
163 (if (eq defn olddef) 164 (if (eq defn olddef)
164 (define-key keymap prefix1 newdef) 165 (define-key keymap prefix1 (nconc (nreverse skipped) newdef))
165 (if (keymapp defn) 166 (if (keymapp defn)
166 (substitute-key-definition olddef newdef keymap 167 (substitute-key-definition olddef newdef keymap
167 inner-def 168 inner-def
@@ -176,16 +177,18 @@ in KEYMAP as NEWDEF those chars which are defined as OLDDEF in OLDMAP."
176 ;; the inside of the previous let. 177 ;; the inside of the previous let.
177 (aset vec1 0 char) 178 (aset vec1 0 char)
178 (aset prefix1 (length prefix) char) 179 (aset prefix1 (length prefix) char)
179 (let (inner-def) 180 (let (inner-def skipped)
180 ;; Skip past menu-prompt. 181 ;; Skip past menu-prompt.
181 (while (stringp (car-safe defn)) 182 (while (stringp (car-safe defn))
183 (setq skipped (cons (car defn) skipped))
182 (setq defn (cdr defn))) 184 (setq defn (cdr defn)))
183 (setq inner-def defn) 185 (setq inner-def defn)
184 (while (and (symbolp inner-def) 186 (while (and (symbolp inner-def)
185 (fboundp inner-def)) 187 (fboundp inner-def))
186 (setq inner-def (symbol-function inner-def))) 188 (setq inner-def (symbol-function inner-def)))
187 (if (eq defn olddef) 189 (if (eq defn olddef)
188 (define-key keymap prefix1 newdef) 190 (define-key keymap prefix1
191 (nconc (nreverse skipped) newdef))
189 (if (keymapp defn) 192 (if (keymapp defn)
190 (substitute-key-definition olddef newdef keymap 193 (substitute-key-definition olddef newdef keymap
191 inner-def 194 inner-def