From: Tino Calancha <tino.calancha@gmail.com>
To: 25942-done@debbugs.gnu.org
Subject: bug#25942: 26.0.50; dired-mark-extension prepend '.' to suffix if not present
Date: Fri, 31 Mar 2017 17:34:26 +0900 [thread overview]
Message-ID: <87r31dq1yl.fsf@calancha-pc> (raw)
In-Reply-To: <87vaqu42jv.fsf@calancha-pc> (Tino Calancha's message of "Tue, 28 Mar 2017 10:23:32 +0900")
Tino Calancha <tino.calancha@gmail.com> writes:
Pushed patch into master branch as commit:
1da9a207669a3cf5d27ac1dd61543c1492e05360
> Juri Linkov <juri@linkov.net> writes:
>> There is a special section in etc/NEWS for Incompatible Changes
>> that would be a more likely place to find this change.
> That's right. Thanks.
> Here is the updated patch:
>
>>From 268eae94cdaf43bfd44c3b8d5cb74a32d26556c3 Mon Sep 17 00:00:00 2001
> From: Tino Calancha <tino.calancha@gmail.com>
> Date: Tue, 28 Mar 2017 10:18:59 +0900
> Subject: [PATCH] dired-mark-suffix: New command
>
> Now dired-mark-extension prepends '.' to extension when not present.
> Add 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.
> * test/lisp/dired-x-tests.el: New test suite; add test for these features.
> ; * etc/NEWS (Incompatible Lisp Changes in Emacs 26.1):
> ; Mention these changes.
> ---
> doc/misc/dired-x.texi | 18 ++++++++--
> etc/NEWS | 7 ++--
> lisp/dired-x.el | 85 ++++++++++++++++++++++++++++++----------------
> test/lisp/dired-x-tests.el | 48 ++++++++++++++++++++++++++
> 4 files changed, 124 insertions(+), 34 deletions(-)
> create mode 100644 test/lisp/dired-x-tests.el
>
> diff --git a/doc/misc/dired-x.texi b/doc/misc/dired-x.texi
> index 1e6f4b03bb..bf103256f2 100644
> --- a/doc/misc/dired-x.texi
> +++ b/doc/misc/dired-x.texi
> @@ -721,15 +721,27 @@ 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.
> -If invoked with prefix argument @kbd{C-u}, this command unmark files instead.
> +is automatically prepended to the string entered when not present.
> +If invoked with prefix argument @kbd{C-u}, this command unmarks 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.
>
> +@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 from @var{dired-mark-extension} which prepends
> +a @samp{.} if not present.
> +If invoked with prefix argument @kbd{C-u}, this command unmarks 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 suffixes
> +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..bfd7d2bd32 100644
> --- a/etc/NEWS
> +++ b/etc/NEWS
> @@ -471,8 +471,6 @@ where to place point after C-c M-r and C-c M-s.
> ---
> *** Messages from CMake are now recognized.
>
> -** Dired
> -
> +++
> *** A new option 'dired-always-read-filesystem' default to nil.
> If non-nil, buffers visiting files are reverted before search them;
> @@ -759,6 +757,11 @@ processes on exit.
> * Incompatible Lisp Changes in Emacs 26.1
>
> +++
> +*** 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 '.'.
> +
> ++++
> ** Certain cond/pcase/cl-case forms are now compiled using a faster jump
> table implementation. This uses a new bytecode op `switch', which isn't
> compatible with previous Emacs versions. This functionality can be disabled
> diff --git a/lisp/dired-x.el b/lisp/dired-x.el
> index 6c8fb0e7da..527685acf3 100644
> --- a/lisp/dired-x.el
> +++ b/lisp/dired-x.el
> @@ -332,46 +332,73 @@ dired-extra-startup
> \f
> ;;; 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 `.' is automatically prepended to EXTENSION 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)))
> - (or (listp extension)
> - (setq extension (list extension)))
> + (interactive (dired--mark-suffix-interactive-spec))
> + (unless (listp extension)
> + (setq extension (list extension)))
> + (dired-mark-files-regexp
> + (concat ".";; don't match names with nothing but an 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 suffixes 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))
> + (unless (listp suffix)
> + (setq suffix (list suffix)))
> (dired-mark-files-regexp
> (concat ".";; don't match names with nothing but an extension
> "\\("
> - (mapconcat 'regexp-quote extension "\\|")
> + (mapconcat 'regexp-quote suffix "\\|")
> "\\)$")
> marker-char))
>
> diff --git a/test/lisp/dired-x-tests.el b/test/lisp/dired-x-tests.el
> new file mode 100644
> index 0000000000..b11c440834
> --- /dev/null
> +++ b/test/lisp/dired-x-tests.el
> @@ -0,0 +1,48 @@
> +;;; dired-x-tests.el --- Test suite for dired-x. -*- lexical-binding: t -*-
> +
> +;; Copyright (C) 2017 Free Software Foundation, Inc.
> +
> +;; This file is part of GNU Emacs.
> +
> +;; GNU Emacs is free software: you can redistribute it and/or modify
> +;; it under the terms of the GNU General Public License as published by
> +;; the Free Software Foundation, either version 3 of the License, or
> +;; (at your option) any later version.
> +
> +;; GNU Emacs is distributed in the hope that it will be useful,
> +;; but WITHOUT ANY WARRANTY; without even the implied warranty of
> +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +;; GNU General Public License for more details.
> +
> +;; You should have received a copy of the GNU General Public License
> +;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
> +
> +;;; Code:
> +(require 'ert)
> +(require 'dired-x)
> +
> +
> +(ert-deftest dired-test-bug25942 ()
> + "Test for http://debbugs.gnu.org/25942 ."
> + (let ((dirs '("Public" "Music"))
> + (files '(".bashrc" "bar.c" "foo.c" "c" ".c"))
> + (dir (make-temp-file "Bug25942" 'dir))
> + (extension "c"))
> + (unwind-protect
> + (progn
> + (dolist (d dirs)
> + (make-directory (expand-file-name d dir)))
> + (dolist (f files)
> + (write-region nil nil (expand-file-name f dir)))
> + (dired dir)
> + (dired-mark-extension extension)
> + (should (= (length '("foo.c" "bar.c"))
> + (length (dired-get-marked-files))))
> + (dired-unmark-all-marks)
> + (dired-mark-suffix extension)
> + (should (= (length (delete "c" (append dirs files)))
> + (length (dired-get-marked-files)))))
> + (delete-directory dir 'recursive))))
> +
> +(provide 'dired-x-tests)
> +;; dired-x-tests.el ends here
prev parent reply other threads:[~2017-03-31 8:34 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-03 3:40 bug#25942: 26.0.50; dired-mark-extension prepend '.' to suffix if not present Tino Calancha
2017-03-26 22:40 ` Juri Linkov
2017-03-27 1:30 ` Tino Calancha
2017-03-27 1:32 ` Tino Calancha
2017-03-27 2:35 ` Eli Zaretskii
2017-03-27 5:34 ` Tino Calancha
2017-03-27 14:28 ` Eli Zaretskii
2017-03-27 15:32 ` Tino Calancha
2017-03-27 22:44 ` Juri Linkov
2017-03-28 1:23 ` Tino Calancha
2017-03-31 8:34 ` Tino Calancha [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87r31dq1yl.fsf@calancha-pc \
--to=tino.calancha@gmail.com \
--cc=25942-done@debbugs.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.