1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-11-22 07:09:54 +00:00

(derived-mode-merge-keymaps): Recursively merge prefix key submaps also.

This commit is contained in:
Richard M. Stallman 1995-04-14 05:56:31 +00:00
parent 2d7fc7e8f9
commit 37a4f4b6b6

View File

@ -297,8 +297,30 @@ Always merge its parent into it, since the merge is non-destructive."
(defun derived-mode-merge-keymaps (old new)
"Merge an old keymap into a new one.
The old keymap is set to be the cdr of the new one, so that there will
The old keymap is set to be the last cdr of the new one, so that there will
be automatic inheritance."
(let ((tail new))
;; Scan the NEW map for prefix keys.
(while (consp tail)
(and (consp (car tail))
(let* ((key (vector (car (car tail))))
(subnew (lookup-key new key))
(subold (lookup-key old key)))
;; If KEY is a prefix key in both OLD and NEW, merge them.
(and (keymapp subnew) (keymapp subold)
(derived-mode-merge-keymaps subold subnew))))
(and (vectorp (car tail))
;; Search a vector of ASCII char bindings for prefix keys.
(let ((i (1- (length (car tail)))))
(while (>= i 0)
(let* ((key (vector i))
(subnew (lookup-key new key))
(subold (lookup-key old key)))
;; If KEY is a prefix key in both OLD and NEW, merge them.
(and (keymapp subnew) (keymapp subold)
(derived-mode-merge-keymaps subold subnew)))
(setq i (1- i)))))
(setq tail (cdr tail))))
(setcdr (nthcdr (1- (length new)) new) old))
(defun derived-mode-merge-syntax-tables (old new)