]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/emacs-lisp/package.el (package-delete): Make interactive
authorArtur Malabarba <bruce.connor.am@gmail.com>
Mon, 8 Jun 2015 09:50:22 +0000 (10:50 +0100)
committerArtur Malabarba <bruce.connor.am@gmail.com>
Mon, 8 Jun 2015 09:50:43 +0000 (10:50 +0100)
lisp/emacs-lisp/package.el

index 6fecd9a837d0be25aa85ee271cd18206183dc98a..981f42cedb5c2754dd511e88f75bad229b8da4c9 100644 (file)
@@ -1979,12 +1979,31 @@ If some packages are not installed propose to install them."
   "Delete package PKG-DESC.
 
 Argument PKG-DESC is a full description of package as vector.
+Interactively, prompt the user for the package name and version.
+
 When package is used elsewhere as dependency of another package,
 refuse deleting it and return an error.
-If FORCE is non-nil package will be deleted even if it is used
-elsewhere.
+If prefix argument FORCE is non-nil, package will be deleted even
+if it is used elsewhere.
 If NOSAVE is non-nil, the package is not removed from
 `package-selected-packages'."
+  (interactive
+   (progn
+     ;; Initialize the package system to get the list of package
+     ;; symbols for completion.
+     (unless package--initialized
+       (package-initialize t))
+     (let* ((package-table
+             (mapcar
+              (lambda (p) (cons (package-desc-full-name p) p))
+              (delq nil
+                    (mapcar (lambda (p) (unless (package-built-in-p p) p))
+                            (apply #'append (mapcar #'cdr package-alist))))))
+            (package-name (completing-read "Delete package: "
+                                           (mapcar #'car package-table)
+                                           nil t)))
+       (list (cdr (assoc package-name package-table))
+             current-prefix-arg nil))))
   (let ((dir (package-desc-dir pkg-desc))
         (name (package-desc-name pkg-desc))
         pkg-used-elsewhere-by)