Merge pull request from npostavs/string-packages

Re-add support for string package names
GitHub-reference: https://github.com/jwiegley/use-package/issues/225
This commit is contained in:
John Wiegley 2015-08-14 13:53:14 -07:00
commit fa36aa682c

View file

@ -153,6 +153,23 @@ then your byte-compiled init file is as minimal as possible."
;; Utility functions ;; Utility functions
;; ;;
(defun use-package-as-symbol (string-or-symbol)
"If STRING-OR-SYMBOL is already a symbol, return it. Otherwise
convert it to a symbol and return that."
(if (symbolp string-or-symbol) string-or-symbol
(intern string-or-symbol)))
(defun use-package-as-string (string-or-symbol)
"If STRING-OR-SYMBOL is already a string, return it. Otherwise
convert it to a string and return that."
(if (stringp string-or-symbol) string-or-symbol
(symbol-name string-or-symbol)))
(defun use-package-load-name (name &optional noerror)
"Return a form which will load or require NAME depending on
whether it's a string or symbol."
(if (stringp name) `(load ,name 'noerror) `(require ',name nil 'noerror)))
(defun use-package-expand (name label form) (defun use-package-expand (name label form)
"FORM is a list of forms, so `((foo))' if only `foo' is being called." "FORM is a list of forms, so `((foo))' if only `foo' is being called."
(declare (indent 1)) (declare (indent 1))
@ -296,7 +313,7 @@ This is in contrast to merely setting it to 0."
;; Normalization functions ;; Normalization functions
;; ;;
(defun use-package-normalize-plist (name-symbol input) (defun use-package-normalize-plist (name input)
"Given a pseudo-plist, normalize it to a regular plist." "Given a pseudo-plist, normalize it to a regular plist."
(unless (null input) (unless (null input)
(let* ((keyword (car input)) (let* ((keyword (car input))
@ -308,19 +325,19 @@ This is in contrast to merely setting it to 0."
(arg (arg
(cond (cond
((eq keyword :disabled) ((eq keyword :disabled)
(use-package-normalize-plist name-symbol tail)) (use-package-normalize-plist name tail))
((functionp normalizer) ((functionp normalizer)
(funcall normalizer name-symbol keyword args)) (funcall normalizer name keyword args))
((= (length args) 1) ((= (length args) 1)
(car args)) (car args))
(t (t
args)))) args))))
(if (memq keyword use-package-keywords) (if (memq keyword use-package-keywords)
(cons keyword (cons keyword
(cons arg (use-package-normalize-plist name-symbol tail))) (cons arg (use-package-normalize-plist name tail)))
(use-package-error (format "Unrecognized keyword: %s" keyword)))))) (use-package-error (format "Unrecognized keyword: %s" keyword))))))
(defun use-package-process-keywords (name-symbol plist &optional state) (defun use-package-process-keywords (name plist &optional state)
"Process the next keyword in the free-form property list PLIST. "Process the next keyword in the free-form property list PLIST.
The values in the PLIST have each been normalized by the function The values in the PLIST have each been normalized by the function
use-package-normalize/KEYWORD (minus the colon). use-package-normalize/KEYWORD (minus the colon).
@ -342,7 +359,7 @@ next value for the STATE."
(let* ((handler (concat "use-package-handler/" (symbol-name keyword))) (let* ((handler (concat "use-package-handler/" (symbol-name keyword)))
(handler-sym (intern handler))) (handler-sym (intern handler)))
(if (functionp handler-sym) (if (functionp handler-sym)
(funcall handler-sym name-symbol keyword arg rest state) (funcall handler-sym name keyword arg rest state)
(use-package-error (use-package-error
(format "Keyword handler not defined: %s" handler))))))) (format "Keyword handler not defined: %s" handler)))))))
@ -366,7 +383,7 @@ next value for the STATE."
(put 'use-package-only-one 'lisp-indent-function 'defun) (put 'use-package-only-one 'lisp-indent-function 'defun)
(defun use-package-normalize/:pin (name-symbol keyword args) (defun use-package-normalize/:pin (name keyword args)
(use-package-only-one (symbol-name keyword) args (use-package-only-one (symbol-name keyword) args
(lambda (label arg) (lambda (label arg)
(cond (cond
@ -405,16 +422,16 @@ manually updated package."
archive-name package)) archive-name package))
(package-initialize t))) (package-initialize t)))
(defun use-package-handler/:pin (name-symbol keyword archive-name rest state) (defun use-package-handler/:pin (name keyword archive-name rest state)
(let ((body (use-package-process-keywords name-symbol rest state))) (let ((body (use-package-process-keywords name rest state)))
;; This happens at macro expansion time, not when the expanded code is ;; This happens at macro expansion time, not when the expanded code is
;; compiled or evaluated. ;; compiled or evaluated.
(if (null archive-name) (if (null archive-name)
body body
(use-package-pin-package name-symbol archive-name) (use-package-pin-package name archive-name)
(use-package-concat (use-package-concat
body body
`((push '(,name-symbol . ,archive-name) `((push '(,(use-package-as-symbol name) . ,archive-name)
package-pinned-packages) package-pinned-packages)
t))))) t)))))
@ -423,7 +440,7 @@ manually updated package."
;; :ensure ;; :ensure
;; ;;
(defun use-package-normalize/:ensure (name-symbol keyword args) (defun use-package-normalize/:ensure (name keyword args)
(if (null args) (if (null args)
t t
(use-package-only-one (symbol-name keyword) args (use-package-only-one (symbol-name keyword) args
@ -443,11 +460,11 @@ manually updated package."
(package-refresh-contents) (package-refresh-contents)
(use-package-ensure-elpa package t))))) (use-package-ensure-elpa package t)))))
(defun use-package-handler/:ensure (name-symbol keyword ensure rest state) (defun use-package-handler/:ensure (name keyword ensure rest state)
(let ((body (use-package-process-keywords name-symbol rest state))) (let ((body (use-package-process-keywords name rest state)))
;; This happens at macro expansion time, not when the expanded code is ;; This happens at macro expansion time, not when the expanded code is
;; compiled or evaluated. ;; compiled or evaluated.
(let ((package-name (or (and (eq ensure t) name-symbol) ensure))) (let ((package-name (or (and (eq ensure t) (use-package-as-symbol name)) ensure)))
(when package-name (when package-name
(require 'package) (require 'package)
(use-package-ensure-elpa package-name))) (use-package-ensure-elpa package-name)))
@ -466,25 +483,25 @@ manually updated package."
`(funcall #',arg)) `(funcall #',arg))
(t arg))) (t arg)))
(defun use-package-normalize-test (name-symbol keyword args) (defun use-package-normalize-test (name keyword args)
(use-package-only-one (symbol-name keyword) args (use-package-only-one (symbol-name keyword) args
#'use-package-normalize-value)) #'use-package-normalize-value))
(defalias 'use-package-normalize/:if 'use-package-normalize-test) (defalias 'use-package-normalize/:if 'use-package-normalize-test)
(defalias 'use-package-normalize/:when 'use-package-normalize-test) (defalias 'use-package-normalize/:when 'use-package-normalize-test)
(defun use-package-normalize/:unless (name-symbol keyword args) (defun use-package-normalize/:unless (name keyword args)
(not (use-package-only-one (symbol-name keyword) args (not (use-package-only-one (symbol-name keyword) args
#'use-package-normalize-value))) #'use-package-normalize-value)))
(defun use-package-handler/:if (name-symbol keyword pred rest state) (defun use-package-handler/:if (name keyword pred rest state)
(let ((body (use-package-process-keywords name-symbol rest state))) (let ((body (use-package-process-keywords name rest state)))
`((when ,pred ,@body)))) `((when ,pred ,@body))))
(defalias 'use-package-handler/:when 'use-package-handler/:if) (defalias 'use-package-handler/:when 'use-package-handler/:if)
(defun use-package-handler/:unless (name-symbol keyword pred rest state) (defun use-package-handler/:unless (name keyword pred rest state)
(let ((body (use-package-process-keywords name-symbol rest state))) (let ((body (use-package-process-keywords name rest state)))
`((unless ,pred ,@body)))) `((unless ,pred ,@body))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@ -515,14 +532,14 @@ manually updated package."
(use-package-error (use-package-error
(concat label " wants a symbol, or list of symbols"))))) (concat label " wants a symbol, or list of symbols")))))
(defun use-package-normalize-symlist (name-symbol keyword args) (defun use-package-normalize-symlist (name keyword args)
(use-package-as-one (symbol-name keyword) args (use-package-as-one (symbol-name keyword) args
#'use-package-normalize-symbols)) #'use-package-normalize-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-symbol keyword requires rest state) (defun use-package-handler/:requires (name keyword requires rest state)
(let ((body (use-package-process-keywords name-symbol rest state))) (let ((body (use-package-process-keywords name rest state)))
(if (null requires) (if (null requires)
body body
`((when ,(if (listp requires) `((when ,(if (listp requires)
@ -553,12 +570,12 @@ manually updated package."
(use-package-error (use-package-error
(concat label " wants a directory path, or list of paths"))))) (concat label " wants a directory path, or list of paths")))))
(defun use-package-normalize/:load-path (name-symbol keyword args) (defun use-package-normalize/:load-path (name keyword args)
(use-package-as-one (symbol-name keyword) args (use-package-as-one (symbol-name keyword) args
#'use-package-normalize-paths)) #'use-package-normalize-paths))
(defun use-package-handler/:load-path (name-symbol keyword arg rest state) (defun use-package-handler/:load-path (name keyword arg rest state)
(let ((body (use-package-process-keywords name-symbol rest state))) (let ((body (use-package-process-keywords name rest state)))
(use-package-concat (use-package-concat
(mapcar #'(lambda (path) (mapcar #'(lambda (path)
`(eval-and-compile (push ,path load-path))) arg) `(eval-and-compile (push ,path load-path))) arg)
@ -569,7 +586,7 @@ manually updated package."
;; :no-require ;; :no-require
;; ;;
(defun use-package-normalize-predicate (name-symbol keyword args) (defun use-package-normalize-predicate (name keyword args)
(if (null args) (if (null args)
t t
(use-package-only-one (symbol-name keyword) args (use-package-only-one (symbol-name keyword) args
@ -577,9 +594,9 @@ manually updated package."
(defalias 'use-package-normalize/:no-require 'use-package-normalize-predicate) (defalias 'use-package-normalize/:no-require 'use-package-normalize-predicate)
(defun use-package-handler/:no-require (name-symbol keyword arg rest state) (defun use-package-handler/:no-require (name keyword arg rest state)
;; This keyword has no functional meaning. ;; This keyword has no functional meaning.
(use-package-process-keywords name-symbol rest state)) (use-package-process-keywords name rest state))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
@ -596,13 +613,13 @@ manually updated package."
(macroexpand form) (macroexpand form)
form)) args)) form)) args))
(defun use-package-normalize-forms (name-symbol keyword args) (defun use-package-normalize-forms (name keyword args)
(use-package-normalize-form (symbol-name keyword) args)) (use-package-normalize-form (symbol-name keyword) args))
(defalias 'use-package-normalize/:preface 'use-package-normalize-forms) (defalias 'use-package-normalize/:preface 'use-package-normalize-forms)
(defun use-package-handler/:preface (name-symbol keyword arg rest state) (defun use-package-handler/:preface (name keyword arg rest state)
(let ((body (use-package-process-keywords name-symbol rest state))) (let ((body (use-package-process-keywords name rest state)))
(use-package-concat (use-package-concat
(unless (null arg) (unless (null arg)
`((eval-and-compile ,@arg))) `((eval-and-compile ,@arg)))
@ -621,45 +638,45 @@ manually updated package."
(symbolp (cdr x)))) (symbolp (cdr x))))
(defun use-package-normalize-pairs (defun use-package-normalize-pairs
(name-symbol label arg &optional recursed allow-vector) (name label arg &optional recursed allow-vector)
"Normalize a list of string/symbol pairs." "Normalize a list of string/symbol pairs."
(cond (cond
((or (stringp arg) (and allow-vector (vectorp arg))) ((or (stringp arg) (and allow-vector (vectorp arg)))
(list (cons arg name-symbol))) (list (cons arg (use-package-as-symbol name))))
((use-package-is-sympair arg allow-vector) ((use-package-is-sympair arg allow-vector)
(list arg)) (list arg))
((and (not recursed) (listp arg) (listp (cdr arg))) ((and (not recursed) (listp arg) (listp (cdr arg)))
(mapcar #'(lambda (x) (mapcar #'(lambda (x)
(let ((ret (use-package-normalize-pairs (let ((ret (use-package-normalize-pairs
name-symbol label x t allow-vector))) name label x t allow-vector)))
(if (listp ret) (if (listp ret)
(car ret) (car ret)
ret))) arg)) ret))) arg))
(t arg))) (t arg)))
(defun use-package-normalize-binder (name-symbol keyword args) (defun use-package-normalize-binder (name keyword args)
(use-package-as-one (symbol-name keyword) args (use-package-as-one (symbol-name keyword) args
(lambda (label arg) (lambda (label arg)
(use-package-normalize-pairs name-symbol label arg nil t)))) (use-package-normalize-pairs name label arg nil t))))
(defalias 'use-package-normalize/:bind 'use-package-normalize-binder) (defalias 'use-package-normalize/:bind 'use-package-normalize-binder)
(defalias 'use-package-normalize/:bind* 'use-package-normalize-binder) (defalias 'use-package-normalize/:bind* 'use-package-normalize-binder)
(defun use-package-handler/:bind (defun use-package-handler/:bind
(name-symbol keyword arg rest state &optional override) (name keyword arg rest state &optional override)
(let ((commands (remq nil (mapcar #'(lambda (arg) (let ((commands (remq nil (mapcar #'(lambda (arg)
(if (listp arg) (if (listp arg)
(cdr arg) (cdr arg)
nil)) arg)))) nil)) arg))))
(use-package-concat (use-package-concat
(use-package-process-keywords name-symbol (use-package-process-keywords name
(use-package-sort-keywords (use-package-sort-keywords
(use-package-plist-maybe-put rest :defer t)) (use-package-plist-maybe-put rest :defer t))
(use-package-plist-append state :commands commands)) (use-package-plist-append state :commands commands))
`((ignore (,(if override 'bind-keys* 'bind-keys) ,@arg)))))) `((ignore (,(if override 'bind-keys* 'bind-keys) ,@arg))))))
(defun use-package-handler/:bind* (name-symbol keyword arg rest state) (defun use-package-handler/:bind* (name keyword arg rest state)
(use-package-handler/:bind name-symbol keyword arg rest state t)) (use-package-handler/:bind name keyword arg rest state t))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
@ -697,7 +714,7 @@ deferred until the prefix key sequence is pressed."
package keymap-symbol))))) package keymap-symbol)))))
(defun use-package-handler/:bind-keymap (defun use-package-handler/:bind-keymap
(name-symbol keyword arg rest state &optional override) (name keyword arg rest state &optional override)
(let ((form (mapcar (let ((form (mapcar
#'(lambda (binding) #'(lambda (binding)
`(,(if override `(,(if override
@ -707,35 +724,35 @@ deferred until the prefix key sequence is pressed."
#'(lambda () #'(lambda ()
(interactive) (interactive)
(use-package-autoload-keymap (use-package-autoload-keymap
',(cdr binding) ',name-symbol ,override)))) arg))) ',(cdr binding) ',(use-package-as-symbol name) ,override)))) arg)))
(use-package-concat (use-package-concat
(use-package-process-keywords name-symbol (use-package-process-keywords name
(use-package-sort-keywords (use-package-sort-keywords
(use-package-plist-maybe-put rest :defer t)) (use-package-plist-maybe-put rest :defer t))
state) state)
`((ignore ,@form))))) `((ignore ,@form)))))
(defun use-package-handler/:bind-keymap* (name-symbol keyword arg rest state) (defun use-package-handler/:bind-keymap* (name keyword arg rest state)
(use-package-handler/:bind-keymap name-symbol keyword arg rest state t)) (use-package-handler/:bind-keymap name keyword arg rest state t))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
;; :interpreter ;; :interpreter
;; ;;
(defun use-package-normalize-mode (name-symbol keyword args) (defun use-package-normalize-mode (name keyword args)
(use-package-as-one (symbol-name keyword) args (use-package-as-one (symbol-name keyword) args
(apply-partially #'use-package-normalize-pairs name-symbol))) (apply-partially #'use-package-normalize-pairs name)))
(defalias 'use-package-normalize/:interpreter 'use-package-normalize-mode) (defalias 'use-package-normalize/:interpreter 'use-package-normalize-mode)
(defun use-package-handler/:interpreter (name-symbol keyword arg rest state) (defun use-package-handler/:interpreter (name keyword arg rest state)
(let* (commands (let* (commands
(form (mapcar #'(lambda (interpreter) (form (mapcar #'(lambda (interpreter)
(push (cdr interpreter) commands) (push (cdr interpreter) commands)
`(push ',interpreter interpreter-mode-alist)) arg))) `(push ',interpreter interpreter-mode-alist)) arg)))
(use-package-concat (use-package-concat
(use-package-process-keywords name-symbol (use-package-process-keywords name
(use-package-sort-keywords (use-package-sort-keywords
(use-package-plist-maybe-put rest :defer t)) (use-package-plist-maybe-put rest :defer t))
(use-package-plist-append state :commands commands)) (use-package-plist-append state :commands commands))
@ -748,13 +765,13 @@ deferred until the prefix key sequence is pressed."
(defalias 'use-package-normalize/:mode 'use-package-normalize-mode) (defalias 'use-package-normalize/:mode 'use-package-normalize-mode)
(defun use-package-handler/:mode (name-symbol keyword arg rest state) (defun use-package-handler/:mode (name keyword arg rest state)
(let* (commands (let* (commands
(form (mapcar #'(lambda (mode) (form (mapcar #'(lambda (mode)
(push (cdr mode) commands) (push (cdr mode) commands)
`(push ',mode auto-mode-alist)) arg))) `(push ',mode auto-mode-alist)) arg)))
(use-package-concat (use-package-concat
(use-package-process-keywords name-symbol (use-package-process-keywords name
(use-package-sort-keywords (use-package-sort-keywords
(use-package-plist-maybe-put rest :defer t)) (use-package-plist-maybe-put rest :defer t))
(use-package-plist-append state :commands commands)) (use-package-plist-append state :commands commands))
@ -767,9 +784,9 @@ deferred until the prefix key sequence is pressed."
(defalias 'use-package-normalize/:commands 'use-package-normalize-symlist) (defalias 'use-package-normalize/:commands 'use-package-normalize-symlist)
(defun use-package-handler/:commands (name-symbol keyword arg rest state) (defun use-package-handler/:commands (name keyword arg rest state)
;; The actual processing for commands is done in :defer ;; The actual processing for commands is done in :defer
(use-package-process-keywords name-symbol (use-package-process-keywords name
(use-package-sort-keywords (use-package-sort-keywords
(use-package-plist-maybe-put rest :defer t)) (use-package-plist-maybe-put rest :defer t))
(use-package-plist-append state :commands arg))) (use-package-plist-append state :commands arg)))
@ -781,8 +798,8 @@ deferred until the prefix key sequence is pressed."
(defalias 'use-package-normalize/:defines 'use-package-normalize-symlist) (defalias 'use-package-normalize/:defines 'use-package-normalize-symlist)
(defun use-package-handler/:defines (name-symbol keyword arg rest state) (defun use-package-handler/:defines (name keyword arg rest state)
(let ((body (use-package-process-keywords name-symbol rest state))) (let ((body (use-package-process-keywords name rest state)))
body)) body))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@ -792,8 +809,8 @@ deferred until the prefix key sequence is pressed."
(defalias 'use-package-normalize/:functions 'use-package-normalize-symlist) (defalias 'use-package-normalize/:functions 'use-package-normalize-symlist)
(defun use-package-handler/:functions (name-symbol keyword arg rest state) (defun use-package-handler/:functions (name keyword arg rest state)
(let ((body (use-package-process-keywords name-symbol rest state))) (let ((body (use-package-process-keywords name rest state)))
(if (not (bound-and-true-p byte-compile-current-file)) (if (not (bound-and-true-p byte-compile-current-file))
body body
(use-package-concat (use-package-concat
@ -801,7 +818,7 @@ deferred until the prefix key sequence is pressed."
`((eval-when-compile `((eval-when-compile
,@(mapcar ,@(mapcar
#'(lambda (fn) #'(lambda (fn)
`(declare-function ,fn ,(symbol-name name-symbol))) arg)))) `(declare-function ,fn ,(use-package-as-string name))) arg))))
body)))) body))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@ -811,15 +828,15 @@ deferred until the prefix key sequence is pressed."
(defalias 'use-package-normalize/:defer 'use-package-normalize-predicate) (defalias 'use-package-normalize/:defer 'use-package-normalize-predicate)
(defun use-package-handler/:defer (name-symbol keyword arg rest state) (defun use-package-handler/:defer (name keyword arg rest state)
(let ((body (use-package-process-keywords name-symbol rest (let ((body (use-package-process-keywords name rest
(plist-put state :deferred t))) (plist-put state :deferred t)))
(name-string (symbol-name name-symbol))) (name-string (use-package-as-string name)))
(use-package-concat (use-package-concat
;; Load the package after a set amount of idle time, if the argument to ;; Load the package after a set amount of idle time, if the argument to
;; `:defer' was a number. ;; `:defer' was a number.
(when (numberp arg) (when (numberp arg)
`((run-with-idle-timer ,arg nil #'require ',name-symbol nil t))) `((run-with-idle-timer ,arg nil #'require ',(use-package-as-symbol name) nil t)))
;; Since we deferring load, establish any necessary autoloads, and also ;; Since we deferring load, establish any necessary autoloads, and also
;; keep the byte-compiler happy. ;; keep the byte-compiler happy.
@ -843,8 +860,8 @@ deferred until the prefix key sequence is pressed."
(defalias 'use-package-normalize/:demand 'use-package-normalize-predicate) (defalias 'use-package-normalize/:demand 'use-package-normalize-predicate)
(defun use-package-handler/:demand (name-symbol keyword arg rest state) (defun use-package-handler/:demand (name keyword arg rest state)
(use-package-process-keywords name-symbol rest (use-package-process-keywords name rest
(use-package-plist-delete state :deferred))) (use-package-plist-delete state :deferred)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@ -854,11 +871,11 @@ deferred until the prefix key sequence is pressed."
(defalias 'use-package-normalize/:init 'use-package-normalize-forms) (defalias 'use-package-normalize/:init 'use-package-normalize-forms)
(defun use-package-handler/:init (name-symbol keyword arg rest state) (defun use-package-handler/:init (name keyword arg rest state)
(let ((body (use-package-process-keywords name-symbol rest state))) (let ((body (use-package-process-keywords name rest state)))
(use-package-concat (use-package-concat
;; The user's initializations ;; The user's initializations
(use-package-hook-injector (symbol-name name-symbol) :init arg) (use-package-hook-injector (use-package-as-string name) :init arg)
body))) body)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@ -868,8 +885,9 @@ deferred until the prefix key sequence is pressed."
(defalias 'use-package-normalize/:config 'use-package-normalize-forms) (defalias 'use-package-normalize/:config 'use-package-normalize-forms)
(defun use-package-handler/:config (name-symbol keyword arg rest state) (defun use-package-handler/:config (name keyword arg rest state)
(let* ((body (use-package-process-keywords name-symbol rest state)) (let* ((body (use-package-process-keywords name rest state))
(name-symbol (use-package-as-symbol name))
(config-body (config-body
(if (equal arg '(t)) (if (equal arg '(t))
body body
@ -882,24 +900,24 @@ deferred until the prefix key sequence is pressed."
(list t)))))) (list t))))))
(if (plist-get state :deferred) (if (plist-get state :deferred)
(unless (or (null config-body) (equal config-body '(t))) (unless (or (null config-body) (equal config-body '(t)))
`((eval-after-load ',name-symbol `((eval-after-load ,(if (symbolp name) `',name name)
',(macroexp-progn config-body)))) ',(macroexp-progn config-body))))
(use-package--with-elapsed-timer (use-package--with-elapsed-timer
(format "Loading package %s" name-symbol) (format "Loading package %s" name)
(if use-package-expand-minimally (if use-package-expand-minimally
(use-package-concat (use-package-concat
(list `(require ',name-symbol)) (list (use-package-load-name name))
config-body) config-body)
`((if (not (require ',name-symbol nil t)) `((if (not ,(use-package-load-name name t))
(ignore (ignore
(message (format "Could not load %s" ',name-symbol))) (message (format "Could not load %s" name)))
,@config-body))))))) ,@config-body)))))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
;; :diminish ;; :diminish
(defun use-package-normalize-diminish (name-symbol label arg &optional recursed) (defun use-package-normalize-diminish (name label arg &optional recursed)
"Normalize the arguments to diminish down to a list of one of two forms: "Normalize the arguments to diminish down to a list of one of two forms:
SYMBOL SYMBOL
(SYMBOL . STRING)" (SYMBOL . STRING)"
@ -907,23 +925,23 @@ deferred until the prefix key sequence is pressed."
((symbolp arg) ((symbolp arg)
(list arg)) (list arg))
((stringp arg) ((stringp arg)
(list (cons (intern (concat (symbol-name name-symbol) "-mode")) arg))) (list (cons (intern (concat (use-package-as-string name) "-mode")) arg)))
((and (consp arg) (stringp (cdr arg))) ((and (consp arg) (stringp (cdr arg)))
(list arg)) (list arg))
((and (not recursed) (listp arg) (listp (cdr arg))) ((and (not recursed) (listp arg) (listp (cdr arg)))
(mapcar #'(lambda (x) (car (use-package-normalize-diminish (mapcar #'(lambda (x) (car (use-package-normalize-diminish
name-symbol label x t))) arg)) name label x t))) arg))
(t (t
(use-package-error (use-package-error
(concat label " wants a string, symbol, " (concat label " wants a string, symbol, "
"(symbol . string) or list of these"))))) "(symbol . string) or list of these")))))
(defun use-package-normalize/:diminish (name-symbol keyword args) (defun use-package-normalize/:diminish (name keyword args)
(use-package-as-one (symbol-name keyword) args (use-package-as-one (symbol-name keyword) args
(apply-partially #'use-package-normalize-diminish name-symbol))) (apply-partially #'use-package-normalize-diminish name)))
(defun use-package-handler/:diminish (name-symbol keyword arg rest state) (defun use-package-handler/:diminish (name keyword arg rest state)
(let ((body (use-package-process-keywords name-symbol rest state))) (let ((body (use-package-process-keywords name rest state)))
(use-package-concat (use-package-concat
(mapcar #'(lambda (var) (mapcar #'(lambda (var)
`(if (fboundp 'diminish) `(if (fboundp 'diminish)
@ -938,23 +956,23 @@ deferred until the prefix key sequence is pressed."
;; :delight ;; :delight
;; ;;
(defun use-package-normalize/:delight (name-symbol keyword args) (defun use-package-normalize/:delight (name keyword args)
"Normalize arguments to delight." "Normalize arguments to delight."
(cond (cond
((and (= (length args) 1) ((and (= (length args) 1)
(symbolp (car args))) (symbolp (car args)))
(list (car args) nil name-symbol)) (list (car args) nil name))
((and (= (length args) 2) ((and (= (length args) 2)
(symbolp (car args))) (symbolp (car args)))
(list (car args) (cadr args) name-symbol)) (list (car args) (cadr args) (use-package-as-symbol name)))
((and (= (length args) 3) ((and (= (length args) 3)
(symbolp (car args))) (symbolp (car args)))
args) args)
(t (t
(use-package-error ":delight expects same args as delight function")))) (use-package-error ":delight expects same args as delight function"))))
(defun use-package-handler/:delight (name-symbol keyword args rest state) (defun use-package-handler/:delight (name keyword args rest state)
(let ((body (use-package-process-keywords name-symbol rest state))) (let ((body (use-package-process-keywords name rest state)))
(use-package-concat (use-package-concat
body body
`((delight (quote ,(nth 0 args)) ,(nth 1 args) (quote ,(nth 2 args))) t)))) `((delight (quote ,(nth 0 args)) ,(nth 1 args) (quote ,(nth 2 args))) t))))
@ -1014,7 +1032,7 @@ this file. Usage:
(unless (member :disabled args) (unless (member :disabled args)
(let* ((name-symbol (if (stringp name) (intern name) name)) (let* ((name-symbol (if (stringp name) (intern name) name))
(args0 (use-package-plist-maybe-put (args0 (use-package-plist-maybe-put
(use-package-normalize-plist name-symbol args) (use-package-normalize-plist name args)
:config '(t))) :config '(t)))
(args* (use-package-sort-keywords (args* (use-package-sort-keywords
(if use-package-always-ensure (if use-package-always-ensure
@ -1032,15 +1050,15 @@ this file. Usage:
,@(mapcar #'(lambda (var) `(defvar ,var)) ,@(mapcar #'(lambda (var) `(defvar ,var))
(plist-get args* :defines)) (plist-get args* :defines))
(with-demoted-errors (with-demoted-errors
,(format "Cannot load %s: %%S" name-symbol) ,(format "Cannot load %s: %%S" name)
,(if use-package-verbose ,(if use-package-verbose
`(message "Compiling package %s" ',name-symbol)) `(message "Compiling package %s" ',name-symbol))
,(unless (plist-get args* :no-require) ,(unless (plist-get args* :no-require)
`(require ',name-symbol))))))) (use-package-load-name name)))))))
(let ((body (let ((body
(macroexp-progn (macroexp-progn
(use-package-process-keywords name-symbol args*)))) (use-package-process-keywords name args*))))
(if use-package-debug (if use-package-debug
(display-buffer (display-buffer
(save-current-buffer (save-current-buffer