From f14dbba77153ebcd65ae0e7023f678031887e92e Mon Sep 17 00:00:00 2001 From: Karl Heuer Date: Thu, 3 Mar 1994 16:27:06 +0000 Subject: [PATCH] (substitute-key-definition): Avoid infinite recursion. --- lisp/subr.el | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/lisp/subr.el b/lisp/subr.el index 119e7c2159f..44a7e298e3c 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -133,6 +133,9 @@ but optional second arg NODIGITS non-nil treats them like other chars." ; (copy-sequence keymap) ; (copy-alist keymap))) +(defvar key-substitution-in-progress nil + "Used internally by substitute-key-definition.") + (defun substitute-key-definition (olddef newdef keymap &optional oldmap prefix) "Replace OLDDEF with NEWDEF for any keys in KEYMAP now defined as OLDDEF. In other words, OLDDEF is replaced with NEWDEF where ever it appears. @@ -141,7 +144,9 @@ in KEYMAP as NEWDEF those chars which are defined as OLDDEF in OLDMAP." (or prefix (setq prefix "")) (let* ((scan (or oldmap keymap)) (vec1 (vector nil)) - (prefix1 (vconcat prefix vec1))) + (prefix1 (vconcat prefix vec1)) + (key-substitution-in-progress + (cons scan key-substitution-in-progress))) ;; Scan OLDMAP, finding each char or event-symbol that ;; has any definition, and act on it with hack-key. (while (consp scan) @@ -163,7 +168,9 @@ in KEYMAP as NEWDEF those chars which are defined as OLDDEF in OLDMAP." (setq inner-def (symbol-function inner-def))) (if (eq defn olddef) (define-key keymap prefix1 (nconc (nreverse skipped) newdef)) - (if (keymapp defn) + (if (and (keymapp defn) + (not (memq inner-def + key-substitution-in-progress))) (substitute-key-definition olddef newdef keymap inner-def prefix1))))) @@ -189,7 +196,9 @@ in KEYMAP as NEWDEF those chars which are defined as OLDDEF in OLDMAP." (if (eq defn olddef) (define-key keymap prefix1 (nconc (nreverse skipped) newdef)) - (if (keymapp defn) + (if (and (keymapp defn) + (not (memq inner-def + key-substitution-in-progress))) (substitute-key-definition olddef newdef keymap inner-def prefix1))))) -- 2.39.5