]> git.eshelyaron.com Git - emacs.git/commitdiff
Support keymap symbol in bind-key
authorJimmy Yuen Ho Wong <wyuenho@gmail.com>
Tue, 9 Jun 2020 04:26:09 +0000 (05:26 +0100)
committerJimmy Yuen Ho Wong <wyuenho@gmail.com>
Wed, 8 Jul 2020 03:46:56 +0000 (04:46 +0100)
GitHub-reference: fix https://github.com/jwiegley/use-package/issues/845

lisp/use-package/bind-key.el

index 01e1d4d73d92a5b0514680d7cf312aa9fa54d239..fef23740c676418b4bcc3f80247ad2d5e57042ad 100644 (file)
@@ -154,11 +154,13 @@ spelled-out keystrokes, e.g., \"C-c C-z\". See documentation of
 
 COMMAND must be an interactive function or lambda form.
 
-KEYMAP, if present, should be a keymap and not a quoted symbol.
+KEYMAP, if present, should be a keymap variable or symbol.
 For example:
 
   (bind-key \"M-h\" #'some-interactive-function my-mode-map)
 
+  (bind-key \"M-h\" #'some-interactive-function 'my-mode-map)
+
 If PREDICATE is non-nil, it is a form evaluated to determine when
 a key should be bound. It must return non-nil in such cases.
 Emacs can evaluate this form at any time that it does redisplay
@@ -171,10 +173,11 @@ can safely be called at any time."
     `(let* ((,namevar ,key-name)
             (,keyvar (if (vectorp ,namevar) ,namevar
                        (read-kbd-macro ,namevar)))
+            (kmap (if (and ,keymap (symbolp ,keymap)) (symbol-value ,keymap) ,keymap))
             (,kdescvar (cons (if (stringp ,namevar) ,namevar
                                (key-description ,namevar))
-                             (quote ,keymap)))
-            (,bindingvar (lookup-key (or ,keymap global-map) ,keyvar)))
+                             (if (symbolp ,keymap) ,keymap (quote ,keymap))))
+            (,bindingvar (lookup-key (or kmap global-map) ,keyvar)))
        (let ((entry (assoc ,kdescvar personal-keybindings))
              (details (list ,command
                             (unless (numberp ,bindingvar)
@@ -183,11 +186,11 @@ can safely be called at any time."
              (setcdr entry details)
            (add-to-list 'personal-keybindings (cons ,kdescvar details))))
        ,(if predicate
-            `(define-key (or ,keymap global-map) ,keyvar
+            `(define-key (or kmap global-map) ,keyvar
                '(menu-item "" nil :filter (lambda (&optional _)
                                             (when ,predicate
                                               ,command))))
-          `(define-key (or ,keymap global-map) ,keyvar ,command)))))
+          `(define-key (or kmap global-map) ,keyvar ,command)))))
 
 ;;;###autoload
 (defmacro unbind-key (key-name &optional keymap)