Package: emacs;
Reported by: Tino Calancha <tino.calancha <at> gmail.com>
Date: Fri, 3 Mar 2017 03:41:01 UTC
Severity: wishlist
Tags: patch
Found in version 26.0.50
Done: Tino Calancha <tino.calancha <at> gmail.com>
Bug is archived. No further changes may be made.
Message #20 received at 25942 <at> debbugs.gnu.org (full text, mbox):
From: Tino Calancha <tino.calancha <at> gmail.com> To: Eli Zaretskii <eliz <at> gnu.org> Cc: 25942 <at> debbugs.gnu.org, tino.calancha <at> gmail.com, juri <at> linkov.net Subject: Re: bug#25942: 26.0.50; dired-mark-extension prepend '.' to suffix if not present Date: Mon, 27 Mar 2017 14:34:30 +0900
Eli Zaretskii <eliz <at> gnu.org> writes: >> From: Tino Calancha <tino.calancha <at> gmail.com> >> Date: Mon, 27 Mar 2017 10:30:26 +0900 (JST) >> Cc: 25942 <at> debbugs.gnu.org, Tino Calancha <tino.calancha <at> gmail.com> >> >> The problem is that this command has a concept of 'extension' different >> than the two other functions mentioned above. > > Then how about providing a new command, named dired-mark-suffix or > somesuch, which would work like dired-mark-extension does now? Or > maybe have an optional argument, activated by prefix arg to > dired-mark-extension, to do that? That would leave users a way to get > back the old behavior, if they want. I like your first suggestion. The second is less convenient because we already use prefices 'C-u' and 'C-u C-u'. The following patch adds a new command 'dired-mark-suffix', and modifies 'dired-mark-extension'. I) dired-mark-suffix: it behaves as 'dired-mark-extension' used to do, i.e., don't prepends any '.' to the user input. II) dired-mark-extension: It prepends '.' to EXTENSION when not present. This way became consistent with 'file-name-extension', that is, if (file-name-extension FILE) returns nil, then 'dired-mark-extension' will not mark FILE. --8<-----------------------------cuthere---------------start------------->8--- From e995e2ab6ffbd1ef94b9548d492394f9283fe490 Mon Sep 17 00:00:00 2001 From: Tino Calancha <tino.calancha <at> gmail.com> Date: Mon, 27 Mar 2017 14:31:35 +0900 Subject: [PATCH] dired-mark-suffix: New command Now dired-mark-extension prepends '.' to extension when not present. Add the new command dired-mark-suffix to preserve the previous behaviour (Bug#25942). * lisp/dired-x.el (dired-mark-suffix): New command; mark files ending in a given suffix. (dired--mark-suffix-interactive-spec): New defun. (dired-mark-extension, dired-mark-suffix): Use it. * doc/misc/dired-x.texi (Advanced Mark Commands): Update manual. ; * etc/NEWS (Changes in Specialized Modes and Packages in Emacs 26.1): ; Mention these changes. --- doc/misc/dired-x.texi | 16 +++++++++-- etc/NEWS | 5 ++++ lisp/dired-x.el | 80 ++++++++++++++++++++++++++++++++++----------------- 3 files changed, 73 insertions(+), 28 deletions(-) diff --git a/doc/misc/dired-x.texi b/doc/misc/dired-x.texi index 1e6f4b03bb..369b2da42a 100644 --- a/doc/misc/dired-x.texi +++ b/doc/misc/dired-x.texi @@ -721,8 +721,7 @@ Advanced Mark Commands @item dired-mark-extension @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. +is automatically prepended to the string entered when not present. 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. @@ -730,6 +729,19 @@ Advanced Mark Commands When called from Lisp, @var{extension} may also be a list of extensions and an optional argument @var{marker-char} specifies the marker used. +@item dired-mark-suffix +@findex dired-mark-suffix +Mark all files with a certain suffix for use in later commands. A @samp{.} +is not automatically prepended to the string entered, you must type it +explicitly. This is different than @var{dired-mark-extension} which prepends +a @samp{.} if not present. +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{suffix} may also be a list of suffices +and an optional argument @var{marker-char} specifies the marker used. + @item dired-flag-extension @findex dired-flag-extension Flag all files with a certain extension for deletion. A @samp{.} is diff --git a/etc/NEWS b/etc/NEWS index cd98f53399..3839439a32 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -474,6 +474,11 @@ where to place point after C-c M-r and C-c M-s. ** Dired +++ +*** Command 'dired-mark-extension' now automatically prepends a '.' to the +extension when not present. The new command 'dired-mark-suffix' behaves +similarly but it doesn't prepend a '.'. + ++++ *** A new option 'dired-always-read-filesystem' default to nil. If non-nil, buffers visiting files are reverted before search them; for instance, in 'dired-mark-files-containing-regexp' a non-nil value diff --git a/lisp/dired-x.el b/lisp/dired-x.el index 6c8fb0e7da..a043784a75 100644 --- a/lisp/dired-x.el +++ b/lisp/dired-x.el @@ -332,46 +332,74 @@ dired-extra-startup ;;; EXTENSION MARKING FUNCTIONS. +(defun dired--mark-suffix-interactive-spec () + (let* ((default + (let ((file (dired-get-filename nil t))) + (when file + (file-name-extension file)))) + (suffix + (read-string (format "%s extension%s: " + (if (equal current-prefix-arg '(4)) + "UNmarking" + "Marking") + (if default + (format " (default %s)" default) + "")) nil nil default)) + (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))) + ;; Mark files with some extension. (defun dired-mark-extension (extension &optional marker-char) "Mark all files with a certain EXTENSION for use in later commands. -A `.' is *not* automatically prepended to the string entered. +A `.' before EXTENSION is automatically prepended when not present. EXTENSION may also be a list of extensions instead of a single one. Optional MARKER-CHAR is marker to use. 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 - (let* ((default - (let ((file (dired-get-filename nil t))) - (when file - (file-name-extension file)))) - (suffix - (read-string (format "%s extension%s: " - (if (equal current-prefix-arg '(4)) - "UNmarking" - "Marking") - (if default - (format " (default %s)" default) - "")) nil nil default)) - (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))) + (dired--mark-suffix-interactive-spec)) (or (listp extension) (setq extension (list extension))) (dired-mark-files-regexp (concat ".";; don't match names with nothing but an extension "\\(" - (mapconcat 'regexp-quote extension "\\|") + (mapconcat (lambda (x) + (regexp-quote + (if (string-prefix-p "." x) x (concat "." x)))) + extension "\\|") + "\\)$") + marker-char)) + +;; Mark files ending with some suffix. +(defun dired-mark-suffix (suffix &optional marker-char) + "Mark all files with a certain SUFFIX for use in later commands. +A `.' is *not* automatically prepended to the string entered; see +also `dired-mark-extension', which is similar but automatically +prepends `.' when not present. +SUFFIX may also be a list of suffices instead of a single one. +Optional MARKER-CHAR is marker to use. +Interactively, ask for SUFFIX. +Prefixed with one C-u, unmark files instead. +Prefixed with two C-u's, prompt for MARKER-CHAR and mark files with it." + (interactive + (dired--mark-suffix-interactive-spec)) + (or (listp suffix) + (setq suffix (list suffix))) + (dired-mark-files-regexp + (concat ".";; don't match names with nothing but an extension + "\\(" + (mapconcat 'regexp-quote suffix "\\|") "\\)$") marker-char)) -- 2.11.0 --8<-----------------------------cut here---------------end--------------->8--- In GNU Emacs 26.0.50 (build 12, x86_64-pc-linux-gnu, GTK+ Version 3.22.9) of 2017-03-27 Repository revision: 05bfebfc91bc053435287f560aeb956926d31583
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.