branch: externals/leaf commit 7d5e17e41de9147805711a7119bd42bfa47e8445 Merge: 8b5bbac137 749593adae Author: Naoya Yamashita <con...@gmail.com> Commit: GitHub <nore...@github.com>
Merge pull request #517 from conao3/fix-custom Use just push instead of using package--save-selected-packages --- leaf-tests.el | 30 +++++++++++++++--------------- leaf.el | 54 +++++++++++++++++++++++++++++------------------------- 2 files changed, 44 insertions(+), 40 deletions(-) diff --git a/leaf-tests.el b/leaf-tests.el index 86bf79fdec..97b4654742 100644 --- a/leaf-tests.el +++ b/leaf-tests.el @@ -2390,21 +2390,21 @@ Example: ;; otherwise try to install it. ;; If installation fails, update local cache and retry to install. ((leaf-handler-package macrostep macrostep nil) - (if (package-installed-p 'macrostep) - (package--update-selected-packages '(macrostep) nil) - (unless (assoc 'macrostep package-archive-contents) - (package-refresh-contents)) - (condition-case _err - (package-install 'macrostep) - (error - (condition-case err - (progn - (package-refresh-contents) - (package-install 'macrostep)) - (error - (display-warning 'leaf - (format "In `macrostep' block, failed to :package of `macrostep'. Error msg: %s" - (error-message-string err))))))))))) + (progn + (leaf-safe-push 'macrostep package-selected-packages 'no-dup) + (unless (package-installed-p 'macrostep) + (unless (assoc 'macrostep package-archive-contents) + (package-refresh-contents)) + (condition-case _err + (package-install 'macrostep) + (error + (package-refresh-contents) + (condition-case err + (package-install 'macrostep) + (error + (display-warning 'leaf + (format "In `macrostep' block, failed to :package of `macrostep'. Error msg: %s" + (error-message-string err)))))))))))) (when (version< "24.0" emacs-version) (cort-deftest-with-macroexpand leaf/leaf-key diff --git a/leaf.el b/leaf.el index 7339302978..19a5f3246b 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.5.2 +;; Version: 4.5.3 ;; URL: https://github.com/conao3/leaf.el ;; Package-Requires: ((emacs "24.1")) @@ -775,12 +775,16 @@ see `alist-get'." (indent-region (point-min) (point-max)) (display-buffer buf)))) -(defmacro leaf-safe-push (newelt place) +(defmacro leaf-safe-push (newelt place &optional no-dup) "Safely add NEWELT to the list stored in the generalized variable PLACE. This is equivalent to `push' if PLACE is bound, otherwise, `setq' -is used to define a new list." +is used to define a new list. +If NO-DUP is non-nil, do not `push' if the element already exists." `(if (boundp ',place) - (push ,newelt ,place) + ,(if (not no-dup) + `(push ,newelt ,place) + `(unless (memq ,newelt ,place) + (push ,newelt ,place))) (setq ,place (list ,newelt)))) @@ -1076,27 +1080,27 @@ FN also accept list of FN." (defmacro leaf-handler-package (name pkg _pin) "Handler for ensuring the installation of PKG with package.el via PIN in the leaf block NAME." - `(if (package-installed-p ',pkg) - (package--update-selected-packages '(,pkg) nil) - (unless (assoc ',pkg package-archive-contents) - (package-refresh-contents)) - (condition-case _err - (package-install ',pkg) - (error - (condition-case err - (progn - (package-refresh-contents) - (package-install ',pkg)) - (error - (display-warning 'leaf - (format - ,(concat - (format "In `%s' block" name) - (when load-file-name - (format " at `%s'" load-file-name)) - (format ", failed to :package of `%s'." pkg) - " Error msg: %s") - (error-message-string err))))))))) + `(progn + (leaf-safe-push ',pkg package-selected-packages 'no-dup) + (unless (package-installed-p ',pkg) + (unless (assoc ',pkg package-archive-contents) + (package-refresh-contents)) + (condition-case _err + (package-install ',pkg) + (error + (package-refresh-contents) + (condition-case err + (package-install ',pkg) + (error + (display-warning 'leaf + (format + ,(concat + (format "In `%s' block" name) + (when load-file-name + (format " at `%s'" load-file-name)) + (format ", failed to :package of `%s'." pkg) + " Error msg: %s") + (error-message-string err)))))))))) (defmacro leaf-handler-auth (name sym store) "Handler auth-* to set SYM of NAME from STORE."