]> git.eshelyaron.com Git - emacs.git/commitdiff
Allow to disable the DWIMish behavior of 'x' in package menu
authorEli Zaretskii <eliz@gnu.org>
Mon, 29 May 2023 13:44:48 +0000 (16:44 +0300)
committerEli Zaretskii <eliz@gnu.org>
Mon, 29 May 2023 13:44:48 +0000 (16:44 +0300)
* lisp/emacs-lisp/package.el
(package-menu-use-current-if-no-marks): New defcustom.
(package-menu-execute): Use it.  (Bug#62563)

* etc/NEWS: Announce the new option.

etc/NEWS
lisp/emacs-lisp/package.el

index 7785d734a6fa3736af78e7216047edf957d524af..60aa64b5ede8fe69e1307bb2dfe67f1c478acf9d 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1886,7 +1886,9 @@ These commands can be useful if the ".elc" files are out of date
 +++
 *** New DWIM action on 'x' in "*Packages*" buffer.
 If no packages are marked, 'x' will install the package under point if
-it isn't already, and remove it if it is installed.
+it isn't already, and remove it if it is installed.  Customize the new
+option 'package-menu-use-current-if-no-marks' to the nil value to get
+back the old behavior of signaling an error in that case.
 
 +++
 *** New command 'package-vc-install'.
index 340ca9400fa541d332d9307a3e879c103742c169..202aca36f242044f87278c7786d702814882bf50 100644 (file)
@@ -3313,6 +3313,18 @@ Values can be interactively added to this list by typing
   :version "25.1"
   :type '(repeat (regexp :tag "Hide packages with name matching")))
 
+(defcustom package-menu-use-current-if-no-marks t
+  "Whether \\<package-menu-mode-map>\\[package-menu-execute] in package menu operates on current package if none are marked.
+
+If non-nil, and no packages are marked for installation or
+deletion, \\<package-menu-mode-map>\\[package-menu-execute] will operate on the current package at point,
+see `package-menu-execute' for details.
+The default is t.  Set to nil to get back the original behavior
+of having `package-menu-execute' signal an error when no packages
+are marked for installation or deletion."
+  :version "29.1"
+  :type 'boolean)
+
 (defun package-menu--refresh (&optional packages keywords)
   "Re-populate the `tabulated-list-entries'.
 PACKAGES should be nil or t, which means to display all known packages.
@@ -3943,7 +3955,8 @@ invocations."
     ;; Nothing marked.
     (unless (or delete-list install-list)
       ;; Not on a package line.
-      (unless (tabulated-list-get-id)
+      (unless (and (tabulated-list-get-id)
+                   package-menu-use-current-if-no-marks)
         (user-error "No operations specified"))
       (let* ((id (tabulated-list-get-id))
              (status (package-menu-get-status)))