]> git.eshelyaron.com Git - emacs.git/commitdiff
add autoload keyword
authorNaoya Yamashita <conao3@gmail.com>
Mon, 22 Feb 2021 17:49:18 +0000 (02:49 +0900)
committerNaoya Yamashita <conao3@gmail.com>
Mon, 22 Feb 2021 19:10:19 +0000 (04:10 +0900)
:autoload is similar to :command but this generate autoload
statement as *no-interactive* function.

lisp/use-package/use-package-core.el

index 28bc5a50ed05e315b58975511a8dc2477de49de2..e153b535156f9707ce7a47e783305ebb6659a80b 100644 (file)
@@ -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.