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)
(use-package-concat
(use-package-process-keywords name rest state)
`((,(if bind-macro bind-macro 'bind-keys)
:package ,name ,@(use-package-normalize-commands args)))))
`(,@(mapcar
#'(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)
(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
'((:if . (lambda (new old) `(and ,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.
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)))))
(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