emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] master 3b6eb94: dired-mark-extension: Unmark if called wit


From: Tino Calancha
Subject: [Emacs-diffs] master 3b6eb94: dired-mark-extension: Unmark if called with C-u prefix
Date: Mon, 3 Oct 2016 11:12:31 +0000 (UTC)

branch: master
commit 3b6eb9489d03e5ecc60e487e8eb340e34942825c
Author: Tino Calancha <address@hidden>
Commit: Tino Calancha <address@hidden>

    dired-mark-extension: Unmark if called with C-u prefix
    
    See discussion in #Bug2518 and:
    https://lists.gnu.org/archive/html/emacs-devel/2016-09/msg00711.html
    * lisp/dired-x.el (dired-mark-extension):
    Update interactive calls: a prefix arg C-u unmark files;
    a prefix C-u C-u prompt for MARKER-CHAR and mark files with it.
    (dired-mark-sexp):
    Show in the prompt that we are unmarking if called with a prefix argument.
    * doc/misc/dired-x.texi (Advanced Mark Commands):
    Update documentation for 'dired-mark-extension'.
---
 doc/misc/dired-x.texi |    6 ++++--
 lisp/dired-x.el       |   38 +++++++++++++++++++++++++++-----------
 2 files changed, 31 insertions(+), 13 deletions(-)

diff --git a/doc/misc/dired-x.texi b/doc/misc/dired-x.texi
index 2391852..db01896 100644
--- a/doc/misc/dired-x.texi
+++ b/doc/misc/dired-x.texi
@@ -710,8 +710,10 @@ variable @code{window-min-height}.
 @findex dired-mark-extension
 Mark all files with a certain extension for use in later commands.  A @samp{.}
 is not automatically prepended to the string entered, you must type it
-explicitly.  If invoked with a prefix argument, this command asks for
-a character to use as the marker.
+explicitly.
+If invoked with prefix argument @kbd{C-u}, this command unmark files instead.
+If called with the @kbd{C-u C-u} prefix, asks for a character to use
+as the marker, and marks files with it.
 
 When called from Lisp, @var{extension} may also be a list of extensions
 and an optional argument @var{marker-char} specifies the marker used.
diff --git a/lisp/dired-x.el b/lisp/dired-x.el
index 7d73c42..8313905 100644
--- a/lisp/dired-x.el
+++ b/lisp/dired-x.el
@@ -334,17 +334,27 @@ See also the functions:
 A `.' is *not* automatically prepended to the string entered.
 EXTENSION may also be a list of extensions instead of a single one.
 Optional MARKER-CHAR is marker to use.
-Interactively, ask for EXTENSION, and if invoked with a prefix
-argument, for MARKER-CHAR as well."
+Interactively, ask for EXTENSION.
+Prefixed with one C-u, unmark files instead.
+Prefixed with two C-u's, prompt for MARKER-CHAR and mark files with it."
   (interactive
-   (list (read-string "Marking extension: ")
-         (and current-prefix-arg
-              (let* ((dflt (char-to-string dired-marker-char))
-                     (input (read-string
-                             (format
-                              "Marker character to use (default %s): " dflt)
-                             nil nil dflt)))
-                (aref input 0)))))
+   (let ((suffix
+          (read-string (format "%s extension: "
+                               (if (equal current-prefix-arg '(4))
+                                   "UNmarking"
+                                 "Marking"))))
+         (marker
+          (pcase current-prefix-arg
+            ('(4) ?\s)
+            ('(16)
+             (let* ((dflt (char-to-string dired-marker-char))
+                    (input (read-string
+                            (format
+                             "Marker character to use (default %s): " dflt)
+                            nil nil dflt)))
+               (aref input 0)))
+            (_ dired-marker-char))))
+     (list suffix marker)))
   (or (listp extension)
       (setq extension (list extension)))
   (dired-mark-files-regexp
@@ -1470,7 +1480,13 @@ refer at all to the underlying file system.  Contrast 
this with
   ;; (string-match "foo" sym) into which a user would soon fall.
   ;; Give `equal' instead of `=' in the example, as this works on
   ;; integers and strings.
-  (interactive "xMark if (lisp expr): \nP")
+  (interactive
+   (list (read--expression
+          (format "%s if (lisp expr): "
+                  (if current-prefix-arg
+                      "UNmark"
+                    "Mark")))
+         current-prefix-arg))
   (message "%s" predicate)
   (let ((dired-marker-char (if unflag-p ?\040 dired-marker-char))
         inode s mode nlink uid gid size time name sym)



reply via email to

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