From: Naoya Yamashita Date: Mon, 22 Feb 2021 17:49:18 +0000 (+0900) Subject: add autoload keyword X-Git-Tag: emacs-29.0.90~1306^2~15^2~17^2~1 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=dbfb3484cddcb81400265e5885ac5c5b1c51bc87;p=emacs.git add autoload keyword :autoload is similar to :command but this generate autoload statement as *no-interactive* function. --- diff --git a/lisp/use-package/use-package-core.el b/lisp/use-package/use-package-core.el index 28bc5a50ed0..e153b535156 100644 --- a/lisp/use-package/use-package-core.el +++ b/lisp/use-package/use-package-core.el @@ -94,6 +94,7 @@ ;; Any other keyword that also declares commands to be autoloaded (such as ;; :bind) must appear before this keyword. :commands + :autoload :init :defer :demand @@ -118,7 +119,8 @@ declaration is incorrect." (defcustom use-package-deferring-keywords '(:bind-keymap :bind-keymap* - :commands) + :commands + :autoload) "Unless `:demand' is used, keywords in this list imply deferred loading. The reason keywords like `:hook' are not in this list is that they only imply deferred loading if they reference actual @@ -1309,6 +1311,28 @@ meaning: (delete-dups arg))) (use-package-process-keywords name rest state))) +;;;; :autoload + +(defalias 'use-package-normalize/:autoload 'use-package-normalize/:commands) + +(defun use-package-handler/:autoload (name _keyword arg rest state) + (use-package-concat + ;; Since we deferring load, establish any necessary autoloads, and also + ;; keep the byte-compiler happy. + (let ((name-string (use-package-as-string name))) + (cl-mapcan + #'(lambda (command) + (when (symbolp command) + (append + (unless (plist-get state :demand) + `((unless (fboundp ',command) + (autoload #',command ,name-string)))) + (when (bound-and-true-p byte-compile-current-file) + `((eval-when-compile + (declare-function ,command ,name-string))))))) + (delete-dups arg))) + (use-package-process-keywords name rest state))) + ;;;; :defer (defalias 'use-package-normalize/:defer 'use-package-normalize-predicate) @@ -1570,6 +1594,7 @@ this file. Usage: package. This is useful if the package is being lazily loaded, and you wish to conditionally call functions in your `:init' block that are defined in the package. +:autoload Similar to :commands, but it for no-interactive one. :hook Specify hook(s) to attach this package to. :bind Bind keys, and define autoloads for the bound commands.