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:
parent
2d7fc7e8f9
commit
37a4f4b6b6
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user