emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master c91fd97: * emacs-lisp/package.el: Make the execute


From: Artur Malabarba
Subject: [Emacs-diffs] master c91fd97: * emacs-lisp/package.el: Make the execute prompt less verbose.
Date: Mon, 06 Apr 2015 16:12:15 +0000

branch: master
commit c91fd97dfb54863365e7153d0ccde144c79bb54f
Author: Artur Malabarba <address@hidden>
Commit: Artur Malabarba <address@hidden>

    * emacs-lisp/package.el: Make the execute prompt less verbose.
    
    (package-menu--list-to-prompt): New function.
    (package-menu--prompt-transaction-p): Use "Upgrade" to make the
    package-menu-execute prompt less verbose.
---
 lisp/ChangeLog             |    3 ++
 lisp/emacs-lisp/package.el |   60 ++++++++++++++++++++++++++-----------------
 2 files changed, 39 insertions(+), 24 deletions(-)

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index d747f52..d2f01c3 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -3,6 +3,9 @@
        * emacs-lisp/package.el: Fix lack of "new" packages.
        (package-menu--new-package-list)
        (package-menu--old-archive-contents): No longer local.
+       (package-menu--list-to-prompt): New function.
+       (package-menu--prompt-transaction-p): Use "Upgrade" to make the
+       package-menu-execute prompt less verbose.
 
 2015-04-06  Paul Eggert  <address@hidden>
 
diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el
index 4f71c19..3188da5 100644
--- a/lisp/emacs-lisp/package.el
+++ b/lisp/emacs-lisp/package.el
@@ -2699,30 +2699,42 @@ call will upgrade the package."
                (length upgrades)
                (if (= (length upgrades) 1) "" "s")))))
 
-(defun package-menu--prompt-transaction-p (ins del)
-  "Prompt the user about installing INS and deleting DEL.
-INS and DEL are lists of `package-desc'.  Either may be nil, but
-not both."
-  (y-or-n-p
-   (concat
-    (when ins
-      (let ((lins (length ins)))
-        (if (= lins 1)
-            (format "INSTALL package `%s'"
-              (package-desc-full-name (car ins)))
-          (format "INSTALL these %d packages (%s)"
-            lins
-            (mapconcat #'package-desc-full-name ins ", ")))))
-    (when (and del ins) " and ")
-    (when del
-      (let ((ldel (length del)))
-        (if (= ldel 1)
-            (format "DELETE package `%s'"
-              (package-desc-full-name (car del)))
-          (format "DELETE these %d packages (%s)"
-            ldel
-            (mapconcat #'package-desc-full-name del ", ")))))
-    "? ")))
+(defun package-menu--list-to-prompt (packages)
+  "Return a string listing PACKAGES that's usable in a prompt.
+PACKAGES is a list of `package-desc' objects.
+Formats the returned string to be usable in a minibuffer
+prompt (see `package-menu--prompt-transaction-p')."
+  (cond
+   ;; None
+   ((not packages) "")
+   ;; More than 1
+   ((cdr packages)
+    (format "these %d packages (%s)"
+      (length packages)
+      (mapconcat #'package-desc-full-name packages ", ")))
+   ;; Exactly 1
+   (t (format "package `%s'"
+        (package-desc-full-name (car packages))))))
+
+(defun package-menu--prompt-transaction-p (install delete)
+  "Prompt the user about installing INSTALL and deleting DELETE.
+INSTALL and DELETE are lists of `package-desc'.  Either may be
+nil, but not both."
+  (let* ((upg (cl-intersection install delete :key #'package-desc-name))
+         (ins (cl-set-difference install upg :key #'package-desc-name))
+         (del (cl-set-difference delete upg :key #'package-desc-name)))
+    (y-or-n-p
+     (concat
+      (when upg "UPGRADE ")
+      (package-menu--list-to-prompt upg)
+      (when (and upg ins)
+        (if del "; " "; and "))
+      (when ins "INSTALL ")
+      (package-menu--list-to-prompt ins)
+      (when (and del (or ins upg)) "; and ")
+      (when del "DELETE ")
+      (package-menu--list-to-prompt del)
+      "? "))))
 
 (defun package-menu--perform-transaction (install-list delete-list &optional 
async)
   "Install packages in INSTALL-LIST and delete DELETE-LIST.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]