Fix a scoping issues with multiple occurrences of :bind

Fixes https://github.com/jwiegley/use-package/issues/585
This commit is contained in:
John Wiegley 2017-12-09 16:28:49 -08:00
parent 5a02d61ac6
commit ec84ed0dfb
3 changed files with 29 additions and 3 deletions

View file

@ -128,8 +128,11 @@ deferred until the prefix key sequence is pressed."
(name keyword args rest state &optional bind-macro) (name keyword args rest state &optional bind-macro)
(use-package-concat (use-package-concat
(use-package-process-keywords name rest state) (use-package-process-keywords name rest state)
`((,(if bind-macro bind-macro 'bind-keys) `(,@(mapcar
:package ,name ,@(use-package-normalize-commands args))))) #'(lambda (xs)
`(,(if bind-macro bind-macro 'bind-keys)
:package ,name ,@(use-package-normalize-commands xs)))
(use-package-split-list-at-keys :break args)))))
(defun use-package-handler/:bind* (name keyword arg rest state) (defun use-package-handler/:bind* (name keyword arg rest state)
(use-package-handler/:bind name keyword arg rest state 'bind-keys*)) (use-package-handler/:bind name keyword arg rest state 'bind-keys*))

View file

@ -180,7 +180,8 @@ t according to whether defaulting should be attempted."
(defcustom use-package-merge-key-alist (defcustom use-package-merge-key-alist
'((:if . (lambda (new old) `(and ,new ,old))) '((:if . (lambda (new old) `(and ,new ,old)))
(:after . (lambda (new old) `(:all ,new ,old))) (:after . (lambda (new old) `(:all ,new ,old)))
(:defer . (lambda (new old) old))) (:defer . (lambda (new old) old))
(:bind . (lambda (new old) (append new (list :break) old))))
"Alist of keys and the functions used to merge multiple values. "Alist of keys and the functions used to merge multiple values.
For example, if the following form is provided: For example, if the following form is provided:
@ -472,6 +473,13 @@ This is in contrast to merely setting it to 0."
(nconc ys (list x))))) (nconc ys (list x)))))
(cons (cdr ys) (cdr zs)))) (cons (cdr ys) (cdr zs))))
(defun use-package-split-list-at-keys (key lst)
(when lst
(let* ((xs (use-package-split-list (apply-partially #'eq key) lst))
(args (car xs))
(tail (cdr xs)))
(cons args (use-package-split-list-at-keys key (cdr tail))))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
;;; Keywords ;;; Keywords

View file

@ -1769,6 +1769,21 @@
t)) t))
(bind-keys :package helm ("C-c d" . helm-mini))))) (bind-keys :package helm ("C-c d" . helm-mini)))))
(ert-deftest use-package-test/585 ()
(match-expansion
(use-package bug
:bind (:map bug-map ("C-a" . alpha))
:bind (("C-b" . beta)))
`(progn
(unless (fboundp 'alpha)
(autoload #'alpha "bug" nil t))
(unless (fboundp 'beta)
(autoload #'beta "bug" nil t))
(bind-keys :package bug :map bug-map
("C-a" . alpha))
(bind-keys :package bug
("C-b" . beta)))))
(ert-deftest bind-key/:prefix-map () (ert-deftest bind-key/:prefix-map ()
(match-expansion (match-expansion
(bind-keys :prefix "<f1>" (bind-keys :prefix "<f1>"