branch: externals/leaf commit ad2d3eebb6569e31d6d5445cc4ba151235699def Merge: e0c4b74 1695574 Author: Naoya Yamashita <con...@gmail.com> Commit: GitHub <nore...@github.com>
Merge pull request #472 from conao3/feature#471 feature#471 --- README.md | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- README.org | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- leaf-tests.el | 47 +++++++++++++++++++++++++++++++++++++++++++++++ leaf.el | 9 +++++---- 4 files changed, 157 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index e12375a..2299150 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ - [:package, :ensure keywords](#package-ensure-keywords) - [:preface, :init, :config keywords](#preface-init-config-keywords) - [:defer-config keyword](#defer-config-keyword) - - [:commands keyword](#commands-keyword) + - [:commands, :commands keywords](#commands-commands-keyword) - [:after keyword](#after-keyword) - [:bind, :bind* keywords](#bind-bind-keywords) - [Configure variables keywords](#configure-variables-keywords) @@ -515,7 +515,7 @@ You don't need to put `progn` because `leaf` can receive multiple S-expressions, -## :commands keyword +## :commands, :commands* keyword `commands` keyword configures `autoload` for its leaf-block name. @@ -558,6 +558,56 @@ You don't need to put `progn` because `leaf` can receive multiple S-expressions, (autoload #'leaf-insert-list-after "leaf" nil t))))) ``` +`:commands` keyword genrates `autoload` statement but no-interactive one. + +```emacs-lisp +(cort-deftest-with-macroexpand leaf/commands* + '( + ;; specify a symbol to set to autoload function + ((leaf leaf + :commands* leaf + :config (leaf-init)) + (prog1 'leaf + (unless (fboundp 'leaf) (autoload #'leaf "leaf")) + (eval-after-load 'leaf + '(progn + (leaf-init))))) + + ;; multi symbols will be accepted + ((leaf leaf + :commands* leaf leaf-pairp leaf-plist-get) + (prog1 'leaf + (unless (fboundp 'leaf) (autoload #'leaf "leaf")) + (unless (fboundp 'leaf-pairp) (autoload #'leaf-pairp "leaf")) + (unless (fboundp 'leaf-plist-get) (autoload #'leaf-plist-get "leaf")))) + + ;; multi symbols in list will be accepted + ((leaf leaf + :commands* (leaf leaf-pairp leaf-plist-get)) + (prog1 'leaf + (unless (fboundp 'leaf) (autoload #'leaf "leaf")) + (unless (fboundp 'leaf-pairp) (autoload #'leaf-pairp "leaf")) + (unless (fboundp 'leaf-plist-get) (autoload #'leaf-plist-get "leaf")))) + + ;; It is accepted even if you specify symbol and list at the same time + ((leaf leaf + :commands* leaf (leaf-pairp leaf-plist-get (leaf-insert-list-after))) + (prog1 'leaf + (unless (fboundp 'leaf) (autoload #'leaf "leaf")) + (unless (fboundp 'leaf-pairp) (autoload #'leaf-pairp "leaf")) + (unless (fboundp 'leaf-plist-get) (autoload #'leaf-plist-get "leaf")) + (unless (fboundp 'leaf-insert-list-after) (autoload #'leaf-insert-list-after "leaf")))) + + ;; specify cdr value to define other package function + ((leaf leaf + :commands* (org-crypt-use-before-save-magic . org-crypt) + :config (leaf-init)) + (prog1 'leaf + (unless (fboundp 'org-crypt-use-before-save-magic) (autoload #'org-crypt-use-before-save-magic "org-crypt")) + (eval-after-load 'leaf + '(progn + (leaf-init))))))) +``` ## :after keyword diff --git a/README.org b/README.org index e984449..5ff2c67 100644 --- a/README.org +++ b/README.org @@ -29,7 +29,7 @@ - [[#ensure][:ensure, :package keywords]] - [[:preface, :init, :config keywords]] - [[:defer-config keyword]] - - [[:commands keyword]] + - [[:commands, :commands* keyword]] - [[:after keyword]] - [[:bind, :bind* keywords]] - [[Configure variables keywords]] @@ -529,7 +529,7 @@ S-expressions, but you can do so if you prefer it. (leaf-pre-init-after))))))) #+end_src -** :commands keyword +** :commands, :commands* keyword ~commands~ keyword configures ~autoload~ for its leaf-block name. @@ -572,6 +572,57 @@ S-expressions, but you can do so if you prefer it. (autoload #'leaf-insert-list-after "leaf" nil t))))) #+end_src +~:commands~ keyword genrates ~autoload~ statement but no-interactive one. + +#+begin_src emacs-lisp + (cort-deftest-with-macroexpand leaf/commands* + '( + ;; specify a symbol to set to autoload function + ((leaf leaf + :commands* leaf + :config (leaf-init)) + (prog1 'leaf + (unless (fboundp 'leaf) (autoload #'leaf "leaf")) + (eval-after-load 'leaf + '(progn + (leaf-init))))) + + ;; multi symbols will be accepted + ((leaf leaf + :commands* leaf leaf-pairp leaf-plist-get) + (prog1 'leaf + (unless (fboundp 'leaf) (autoload #'leaf "leaf")) + (unless (fboundp 'leaf-pairp) (autoload #'leaf-pairp "leaf")) + (unless (fboundp 'leaf-plist-get) (autoload #'leaf-plist-get "leaf")))) + + ;; multi symbols in list will be accepted + ((leaf leaf + :commands* (leaf leaf-pairp leaf-plist-get)) + (prog1 'leaf + (unless (fboundp 'leaf) (autoload #'leaf "leaf")) + (unless (fboundp 'leaf-pairp) (autoload #'leaf-pairp "leaf")) + (unless (fboundp 'leaf-plist-get) (autoload #'leaf-plist-get "leaf")))) + + ;; It is accepted even if you specify symbol and list at the same time + ((leaf leaf + :commands* leaf (leaf-pairp leaf-plist-get (leaf-insert-list-after))) + (prog1 'leaf + (unless (fboundp 'leaf) (autoload #'leaf "leaf")) + (unless (fboundp 'leaf-pairp) (autoload #'leaf-pairp "leaf")) + (unless (fboundp 'leaf-plist-get) (autoload #'leaf-plist-get "leaf")) + (unless (fboundp 'leaf-insert-list-after) (autoload #'leaf-insert-list-after "leaf")))) + + ;; specify cdr value to define other package function + ((leaf leaf + :commands* (org-crypt-use-before-save-magic . org-crypt) + :config (leaf-init)) + (prog1 'leaf + (unless (fboundp 'org-crypt-use-before-save-magic) (autoload #'org-crypt-use-before-save-magic "org-crypt")) + (eval-after-load 'leaf + '(progn + (leaf-init))))))) +#+end_src + ** :after keyword ~:after~ keyword configure loading order. diff --git a/leaf-tests.el b/leaf-tests.el index 1a78e53..4a59c22 100644 --- a/leaf-tests.el +++ b/leaf-tests.el @@ -1683,6 +1683,53 @@ Example: (unless (fboundp 'leaf-plist-get) (autoload #'leaf-plist-get "leaf" nil t)) (unless (fboundp 'leaf-insert-list-after) (autoload #'leaf-insert-list-after "leaf" nil t)))))) +(cort-deftest-with-macroexpand leaf/commands* + '( + ;; specify a symbol to set to autoload function + ((leaf leaf + :commands* leaf + :config (leaf-init)) + (prog1 'leaf + (unless (fboundp 'leaf) (autoload #'leaf "leaf")) + (eval-after-load 'leaf + '(progn + (leaf-init))))) + + ;; multi symbols will be accepted + ((leaf leaf + :commands* leaf leaf-pairp leaf-plist-get) + (prog1 'leaf + (unless (fboundp 'leaf) (autoload #'leaf "leaf")) + (unless (fboundp 'leaf-pairp) (autoload #'leaf-pairp "leaf")) + (unless (fboundp 'leaf-plist-get) (autoload #'leaf-plist-get "leaf")))) + + ;; multi symbols in list will be accepted + ((leaf leaf + :commands* (leaf leaf-pairp leaf-plist-get)) + (prog1 'leaf + (unless (fboundp 'leaf) (autoload #'leaf "leaf")) + (unless (fboundp 'leaf-pairp) (autoload #'leaf-pairp "leaf")) + (unless (fboundp 'leaf-plist-get) (autoload #'leaf-plist-get "leaf")))) + + ;; It is accepted even if you specify symbol and list at the same time + ((leaf leaf + :commands* leaf (leaf-pairp leaf-plist-get (leaf-insert-list-after))) + (prog1 'leaf + (unless (fboundp 'leaf) (autoload #'leaf "leaf")) + (unless (fboundp 'leaf-pairp) (autoload #'leaf-pairp "leaf")) + (unless (fboundp 'leaf-plist-get) (autoload #'leaf-plist-get "leaf")) + (unless (fboundp 'leaf-insert-list-after) (autoload #'leaf-insert-list-after "leaf")))) + + ;; specify cdr value to define other package function + ((leaf leaf + :commands* (org-crypt-use-before-save-magic . org-crypt) + :config (leaf-init)) + (prog1 'leaf + (unless (fboundp 'org-crypt-use-before-save-magic) (autoload #'org-crypt-use-before-save-magic "org-crypt")) + (eval-after-load 'leaf + '(progn + (leaf-init))))))) + (cort-deftest-with-macroexpand leaf/pre-setq '( ;; :pre-setq setq before `require' diff --git a/leaf.el b/leaf.el index d7f1d7b..0291399 100644 --- a/leaf.el +++ b/leaf.el @@ -5,7 +5,7 @@ ;; Author: Naoya Yamashita <con...@gmail.com> ;; Maintainer: Naoya Yamashita <con...@gmail.com> ;; Keywords: lisp settings -;; Version: 4.3.3 +;; Version: 4.3.4 ;; URL: https://github.com/conao3/leaf.el ;; Package-Requires: ((emacs "24.1")) @@ -70,6 +70,7 @@ Same as `list' but this macro does not evaluate any arguments." :load-path `(,@(mapcar (lambda (elm) `(add-to-list 'load-path ,elm)) leaf--value) ,@leaf--body) :load-path* `(,@(mapcar (lambda (elm) `(add-to-list 'load-path (locate-user-emacs-file ,elm))) leaf--value) ,@leaf--body) :leaf-autoload `(,@(when (car leaf--value) (mapcar (lambda (elm) `(unless (fboundp ',(car elm)) (autoload #',(car elm) ,(cdr elm) nil t))) (reverse leaf--autoload))) ,@leaf--body) + :commands* `(,@(when (car leaf--value) (mapcar (lambda (elm) `(unless (fboundp ',(car elm)) (autoload #',(car elm) ,(symbol-name (cdr elm))))) leaf--value)) ,@leaf--body) :defun `(,@(mapcar (lambda (elm) `(declare-function ,(car elm) ,(symbol-name (cdr elm)))) leaf--value) ,@leaf--body) :defvar `(,@(mapcar (lambda (elm) `(defvar ,elm)) leaf--value) ,@leaf--body) @@ -188,7 +189,7 @@ Sort by `leaf-sort-leaf--values-plist' in this order.") (delete-dups (delq nil (leaf-flatten leaf--value))))) ((memq leaf--key (list - :package + :package :commands* :global-minor-mode :hook :mode :interpreter :magic :magic-fallback :defun @@ -209,7 +210,7 @@ Sort by `leaf-sort-leaf--values-plist' in this order.") `(,(leaf-mode-sym (if (equal '(t) elm) leaf--name (car elm))) . ,leaf--name)) ((memq leaf--key '(:hook :mode :interpreter :magic :magic-fallback)) `(,@elm . ,(leaf-mode-sym leaf--name))) - ((memq leaf--key '(:defun)) + ((memq leaf--key '(:defun :commands*)) `(,@elm . ,leaf--name)) ((memq leaf--key (list :pl-custom :pl-pre-setq :pl-setq :pl-setq-default :auth-custom :auth-pre-setq :auth-setq :auth-setq-default)) @@ -362,7 +363,7 @@ Sort by `leaf-sort-leaf--values-plist' in this order.") (defcustom leaf-defer-keywords (list :bind :bind* :mode :interpreter :magic :magic-fallback - :hook :commands) + :hook :commands :commands*) "The specified keyword is interpreted as a defer keyword. `leaf' blocks containing the keywords are interpreted as lazy loadable. To stop this function, specify ':leaf-defer nil'"