bind-key: Use new symbols for kmapvar

This commit is contained in:
Daniel Mendler 2021-02-10 14:01:59 +01:00
parent a248658910
commit ec750952f4

View file

@ -168,16 +168,19 @@ or operates on menu data structures, so you should write it so it
can safely be called at any time." can safely be called at any time."
(let ((namevar (make-symbol "name")) (let ((namevar (make-symbol "name"))
(keyvar (make-symbol "key")) (keyvar (make-symbol "key"))
(kmapvar (make-symbol "kmap"))
(kdescvar (make-symbol "kdesc")) (kdescvar (make-symbol "kdesc"))
(bindingvar (make-symbol "binding"))) (bindingvar (make-symbol "binding")))
`(let* ((,namevar ,key-name) `(let* ((,namevar ,key-name)
(,keyvar (if (vectorp ,namevar) ,namevar (,keyvar (if (vectorp ,namevar) ,namevar
(read-kbd-macro ,namevar))) (read-kbd-macro ,namevar)))
(kmap (if (and ,keymap (symbolp ,keymap)) (symbol-value ,keymap) ,keymap)) (,kmapvar (or (if (and ,keymap (symbolp ,keymap))
(symbol-value ,keymap) ,keymap)
global-map))
(,kdescvar (cons (if (stringp ,namevar) ,namevar (,kdescvar (cons (if (stringp ,namevar) ,namevar
(key-description ,namevar)) (key-description ,namevar))
(if (symbolp ,keymap) ,keymap (quote ,keymap)))) (if (symbolp ,keymap) ,keymap (quote ,keymap))))
(,bindingvar (lookup-key (or kmap global-map) ,keyvar))) (,bindingvar (lookup-key ,kmapvar ,keyvar)))
(let ((entry (assoc ,kdescvar personal-keybindings)) (let ((entry (assoc ,kdescvar personal-keybindings))
(details (list ,command (details (list ,command
(unless (numberp ,bindingvar) (unless (numberp ,bindingvar)
@ -186,11 +189,11 @@ can safely be called at any time."
(setcdr entry details) (setcdr entry details)
(add-to-list 'personal-keybindings (cons ,kdescvar details)))) (add-to-list 'personal-keybindings (cons ,kdescvar details))))
,(if predicate ,(if predicate
`(define-key (or kmap global-map) ,keyvar `(define-key ,kmapvar ,keyvar
'(menu-item "" nil :filter (lambda (&optional _) '(menu-item "" nil :filter (lambda (&optional _)
(when ,predicate (when ,predicate
,command)))) ,command))))
`(define-key (or kmap global-map) ,keyvar ,command))))) `(define-key ,kmapvar ,keyvar ,command)))))
;;;###autoload ;;;###autoload
(defmacro unbind-key (key-name &optional keymap) (defmacro unbind-key (key-name &optional keymap)