:map no longer accepts lists; only eval-after-load if necessary

Fixes https://github.com/jwiegley/use-package/issues/324
This commit is contained in:
John Wiegley 2016-02-27 00:48:29 -08:00
parent a1c4e6d0ab
commit af65fbea63

View file

@ -211,7 +211,6 @@ function symbol (unquoted)."
(not (eq (car (cdr (cdr args))) :map))) (not (eq (car (cdr (cdr args))) :map)))
(setq args (cons :map (cons 'global-map args)))) (setq args (cons :map (cons 'global-map args))))
(let* ((map (plist-get args :map)) (let* ((map (plist-get args :map))
(maps (if (listp map) map (list map)))
(doc (plist-get args :prefix-docstring)) (doc (plist-get args :prefix-docstring))
(prefix-map (plist-get args :prefix-map)) (prefix-map (plist-get args :prefix-map))
(prefix (plist-get args :prefix)) (prefix (plist-get args :prefix))
@ -239,12 +238,14 @@ function symbol (unquoted)."
(nconc first (list (car args))) (nconc first (list (car args)))
(setq first (list (car args)))) (setq first (list (car args))))
(setq args (cdr args)))) (setq args (cdr args))))
(cl-flet ((wrap (maps bindings) (cl-flet
(if (and maps pkg ((wrap (map bindings)
(not (equal maps '(global-map)))) (if (and map pkg (not (eq map 'global-map)))
(if (boundp map)
bindings
`((eval-after-load `((eval-after-load
,(if (symbolp pkg) `',pkg pkg) ,(if (symbolp pkg) `',pkg pkg)
'(progn ,@bindings))) '(progn ,@bindings))))
bindings))) bindings)))
(append (append
(when prefix-map (when prefix-map
@ -253,23 +254,16 @@ function symbol (unquoted)."
,@(if menu-name ,@(if menu-name
`((define-prefix-command ',prefix-map nil ,menu-name)) `((define-prefix-command ',prefix-map nil ,menu-name))
`((define-prefix-command ',prefix-map))) `((define-prefix-command ',prefix-map)))
,@(if (and maps (not (equal maps '(global-map)))) ,@(if (and map (not (eq map 'global-map)))
(wrap maps (wrap map `((bind-key ,prefix ',prefix-map ,map ,filter)))
(mapcar
#'(lambda (m)
`(bind-key ,prefix ',prefix-map ,m ,filter))
maps))
`((bind-key ,prefix ',prefix-map nil ,filter))))) `((bind-key ,prefix ',prefix-map nil ,filter)))))
(wrap maps (wrap map
(cl-mapcan (cl-mapcan
(lambda (form) (lambda (form)
(if prefix-map (if prefix-map
`((bind-key ,(car form) ',(cdr form) ,prefix-map ,filter)) `((bind-key ,(car form) ',(cdr form) ,prefix-map ,filter))
(if (and maps (not (equal maps '(global-map)))) (if (and map (not (eq map 'global-map)))
(mapcar `((bind-key ,(car form) ',(cdr form) ,map ,filter))
#'(lambda (m)
`(bind-key ,(car form) ',(cdr form) ,m ,filter))
maps)
`((bind-key ,(car form) ',(cdr form) nil ,filter))))) `((bind-key ,(car form) ',(cdr form) nil ,filter)))))
first)) first))
(when next (when next