mirror of
https://github.com/masscollaborationlabs/emacs.git
synced 2025-07-05 03:39:38 +00:00
Support multiple symbols passed to :after
The following expressions are now permitted: foo ; load after foo is loaded foo bar ; load after both foo and bar are loaded :all foo bar ; same as previous :any foo bar ; load after either foo or bar is loaded :any (:all foo bar) baz ; more complex combinations... :any (:all foo bar) (:all baz wow) :all (:any foo bar) (:any baz wow) Fixes https://github.com/jwiegley/use-package/issues/283
This commit is contained in:
parent
f1fa65d773
commit
0517689cf3
1 changed files with 45 additions and 10 deletions
|
@ -678,6 +678,22 @@ manually updated package."
|
||||||
(use-package-as-one (symbol-name keyword) args
|
(use-package-as-one (symbol-name keyword) args
|
||||||
#'use-package-normalize-symbols))
|
#'use-package-normalize-symbols))
|
||||||
|
|
||||||
|
(defun use-package-normalize-recursive-symbols (label arg)
|
||||||
|
"Normalize a list of symbols."
|
||||||
|
(cond
|
||||||
|
((symbolp arg)
|
||||||
|
arg)
|
||||||
|
((and (listp arg) (listp (cdr arg)))
|
||||||
|
(mapcar #'(lambda (x) (use-package-normalize-recursive-symbols label x))
|
||||||
|
arg))
|
||||||
|
(t
|
||||||
|
(use-package-error
|
||||||
|
(concat label " wants a symbol, or nested list of symbols")))))
|
||||||
|
|
||||||
|
(defun use-package-normalize-recursive-symlist (name keyword args)
|
||||||
|
(use-package-as-one (symbol-name keyword) args
|
||||||
|
#'use-package-normalize-recursive-symbols))
|
||||||
|
|
||||||
(defalias 'use-package-normalize/:requires 'use-package-normalize-symlist)
|
(defalias 'use-package-normalize/:requires 'use-package-normalize-symlist)
|
||||||
|
|
||||||
(defun use-package-handler/:requires (name keyword requires rest state)
|
(defun use-package-handler/:requires (name keyword requires rest state)
|
||||||
|
@ -1023,25 +1039,44 @@ deferred until the prefix key sequence is pressed."
|
||||||
;;; :after
|
;;; :after
|
||||||
;;
|
;;
|
||||||
|
|
||||||
(defalias 'use-package-normalize/:after 'use-package-normalize-symlist)
|
(defalias 'use-package-normalize/:after 'use-package-normalize-recursive-symlist)
|
||||||
|
|
||||||
(defun use-package-require-after-load (features name)
|
(defun use-package-require-after-load (features)
|
||||||
"Return form for after any of FEATURES require NAME."
|
"Return form for after any of FEATURES require NAME."
|
||||||
`(progn
|
(pcase features
|
||||||
,@(mapcar
|
((and (pred symbolp) feat)
|
||||||
(lambda (feat)
|
`(lambda (body)
|
||||||
`(eval-after-load
|
(list 'eval-after-load (list 'quote ',feat)
|
||||||
(quote ,feat)
|
(list 'quote body))))
|
||||||
(quote (require (quote ,name) nil t))))
|
(`(,(or :or :any) . ,rest)
|
||||||
features)))
|
`(lambda (body)
|
||||||
|
(append (list 'progn)
|
||||||
|
(mapcar (lambda (form)
|
||||||
|
(funcall form body))
|
||||||
|
(list ,@(use-package-require-after-load rest))))))
|
||||||
|
(`(,(or :and :all) . ,rest)
|
||||||
|
`(lambda (body)
|
||||||
|
(let ((result body))
|
||||||
|
(dolist (form (list ,@(use-package-require-after-load rest)))
|
||||||
|
(setq result (funcall form result)))
|
||||||
|
result)))
|
||||||
|
(`(,feat . ,rest)
|
||||||
|
(if rest
|
||||||
|
(cons (use-package-require-after-load feat)
|
||||||
|
(use-package-require-after-load rest))
|
||||||
|
(list (use-package-require-after-load feat))))))
|
||||||
|
|
||||||
(defun use-package-handler/:after (name keyword arg rest state)
|
(defun use-package-handler/:after (name keyword arg rest state)
|
||||||
(let ((body (use-package-process-keywords name rest
|
(let ((body (use-package-process-keywords name rest
|
||||||
(plist-put state :deferred t)))
|
(plist-put state :deferred t)))
|
||||||
(name-string (use-package-as-string name)))
|
(name-string (use-package-as-string name)))
|
||||||
|
(if (and (consp arg)
|
||||||
|
(not (memq (car arg) '(:or :any :and :all))))
|
||||||
|
(setq arg (cons :all arg)))
|
||||||
(use-package-concat
|
(use-package-concat
|
||||||
(when arg
|
(when arg
|
||||||
(list (use-package-require-after-load arg name)))
|
(list (funcall (use-package-require-after-load arg)
|
||||||
|
`(require (quote ,name) nil t))))
|
||||||
body)))
|
body)))
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue