From: Radon Rosborough Date: Sun, 19 Mar 2017 03:43:40 +0000 (-0700) Subject: Merge remote-tracking branch 'origin/master' into defer-install X-Git-Tag: emacs-29.0.90~1306^2~15^2~269^2 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=249de4b44d;p=emacs.git Merge remote-tracking branch 'origin/master' into defer-install Resolve merge conflicts. --- 249de4b44defa24da051a990bb5ac012f4050734 diff --cc lisp/use-package/use-package.el index 45215eccdaa,99646e2690a..2943dafe6b0 --- a/lisp/use-package/use-package.el +++ b/lisp/use-package/use-package.el @@@ -1182,34 -1039,44 +1225,52 @@@ deferred until the prefix key sequence ;;; :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) +(defun use-package-require-after-load - (features name &optional deferred-install) ++ (features) "Return form for after any of FEATURES require NAME." - `(progn - ,@(mapcar - (lambda (feat) - `(eval-after-load - (quote ,feat) - ,(macroexp-progn - `(,@(when deferred-install - `((use-package-install-deferred-package - ',name :after))) - '(require ',name nil t))))) - features))) + (pcase features + ((and (pred symbolp) feat) + `(lambda (body) + (list 'eval-after-load (list 'quote ',feat) + (list 'quote body)))) + (`(,(or :or :any) . ,rest) + `(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) (let ((body (use-package-process-keywords name rest (plist-put state :deferred t))) (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 (when arg - (list (use-package-require-after-load - ;; Here we are checking the marker value for deferred - ;; installation set in `use-package-handler/:ensure'. - ;; See also `use-package-handler/:defer-install'. - arg name (eq (plist-get state :defer-install) :ensure)))) + (list (funcall (use-package-require-after-load arg) - `(require (quote ,name) nil t)))) ++ (macroexp-progn ++ ;; Here we are checking the marker value for deferred ++ ;; installation set in `use-package-handler/:ensure'. ++ ;; See also `use-package-handler/:defer-install'. ++ `(,@(when (eq (plist-get state :defer-install) :ensure) ++ `((use-package-install-deferred-package ++ 'name :after))) ++ '(require (quote ,name) nil t)))))) body))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@@ -1267,11 -1134,6 +1328,11 @@@ (unless (or (null config-body) (equal config-body '(t))) `((eval-after-load ,(if (symbolp name) `',name name) ',(macroexp-progn config-body)))) + ;; Here we are checking the marker value for deferred + ;; installation set in `use-package-handler/:ensure'. See also + ;; `use-package-handler/:defer-install'. + (when (eq (plist-get state :defer-install) :ensure) - (use-package-install-deferred-package name 'no-prompt :config)) ++ (use-package-install-deferred-package name :config)) (use-package--with-elapsed-timer (format "Loading package %s" name) (if use-package-expand-minimally