(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*))
(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:
(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
t))
(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 ()
(match-expansion
(bind-keys :prefix "<f1>"