From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Tino Calancha Newsgroups: gmane.emacs.bugs Subject: bug#25942: 26.0.50; dired-mark-extension prepend '.' to suffix if not present Date: Mon, 27 Mar 2017 14:34:30 +0900 Message-ID: <87zig7jna1.fsf@calancha-pc> References: <87d1dzjadq.fsf@calancha-pc> <87bmsn1x2d.fsf@localhost> <83r31j8n0e.fsf@gnu.org> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: blaine.gmane.org 1490592917 13697 195.159.176.226 (27 Mar 2017 05:35:17 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Mon, 27 Mar 2017 05:35:17 +0000 (UTC) User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.0.50 (gnu/linux) Cc: 25942@debbugs.gnu.org, juri@linkov.net, tino.calancha@gmail.com To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Mon Mar 27 07:35:12 2017 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1csNJ7-0002W7-Iu for geb-bug-gnu-emacs@m.gmane.org; Mon, 27 Mar 2017 07:35:09 +0200 Original-Received: from localhost ([::1]:44467 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1csNJB-0001z6-Sj for geb-bug-gnu-emacs@m.gmane.org; Mon, 27 Mar 2017 01:35:13 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:60526) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1csNJ5-0001we-Gu for bug-gnu-emacs@gnu.org; Mon, 27 Mar 2017 01:35:09 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1csNJ0-00025c-LL for bug-gnu-emacs@gnu.org; Mon, 27 Mar 2017 01:35:07 -0400 Original-Received: from debbugs.gnu.org ([208.118.235.43]:48478) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1csNJ0-00025Y-HU for bug-gnu-emacs@gnu.org; Mon, 27 Mar 2017 01:35:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1csNJ0-00045v-6q for bug-gnu-emacs@gnu.org; Mon, 27 Mar 2017 01:35:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Tino Calancha Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 27 Mar 2017 05:35:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 25942 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 25942-submit@debbugs.gnu.org id=B25942.149059288215706 (code B ref 25942); Mon, 27 Mar 2017 05:35:02 +0000 Original-Received: (at 25942) by debbugs.gnu.org; 27 Mar 2017 05:34:42 +0000 Original-Received: from localhost ([127.0.0.1]:46677 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1csNIf-00045G-V1 for submit@debbugs.gnu.org; Mon, 27 Mar 2017 01:34:42 -0400 Original-Received: from mail-pg0-f67.google.com ([74.125.83.67]:35794) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1csNIe-000453-Gm for 25942@debbugs.gnu.org; Mon, 27 Mar 2017 01:34:41 -0400 Original-Received: by mail-pg0-f67.google.com with SMTP id g2so9794762pge.2 for <25942@debbugs.gnu.org>; Sun, 26 Mar 2017 22:34:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=IEjBjEQcsff3DvTfCP+AUzoxtCJDjr+sXhtduJBn/uE=; b=kNPqkdJYuUaEd2XbZT8UAt/VMGWnpW9BXDuNBhhMRGY3er5oM0LdTHP1CPO51tKJm0 dZ00wllhcclsgnnJdN8B8BUf4oUKSAwEybQebqiFksyoKxDIZ9WRumvviAHg9ZRp5Qjv mnMclwNz8dnQ2XQUNQJwVw+xQTIllpVGjh/ga24iKAz06qiF8w4WolFe4CRQ3ILGzhfj piw4FmOkZ8gyel4PTiP/knktiWkKJC03wHMIhDBBpGC4xOc5+Mr5vSfsNugG0NimFqid tZzN4HBh5fj9960JNy4dYbhfNUNKIXJwoVyH3ZrM4blCp6U+JTkftD4IcCPc4TP8oKkv KJUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=IEjBjEQcsff3DvTfCP+AUzoxtCJDjr+sXhtduJBn/uE=; b=J5tYra2xAf50bkRfhyXfdtPU1YuNvwa1eVz/VpRId4UPkSLwe1wFwvCnWnSVQM18sI spBFMggJlOHLEsBJ3tsd7noQKsCX6QduOczzdqiywLY1Yn/x3JiIok9OTvGAqJcWG+fP MIq4N3F4W8GoTQklW4eQtOmaA1B0ov6Dp5DimaXRhaOPjRUkwv5BuMs7DEEMdCB3vc8Q ewS0VBAkRe34grtQkVSHp5DTbmYy+Zxy0PWtTWFbfgrDw/krYqwBll5C1casMr7nsikK Rq117FQj3JE1yufAe/8Q2ikwYJJuu1ca+o86qV8Zy+yPzjv1vuuvGxWhPh+b6bnO1iKf ibiA== X-Gm-Message-State: AFeK/H1NlHabkhpWI9TUfgGpzjEzwTz6+EQ643bfdk9LReyzgGITYKXurWGgBCBfoAfQmw== X-Received: by 10.84.130.2 with SMTP id 2mr26761044plc.24.1490592874642; Sun, 26 Mar 2017 22:34:34 -0700 (PDT) Original-Received: from calancha-pc (234.204.100.220.dy.bbexcite.jp. [220.100.204.234]) by smtp.gmail.com with ESMTPSA id b74sm17970716pfd.90.2017.03.26.22.34.32 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sun, 26 Mar 2017 22:34:34 -0700 (PDT) In-Reply-To: <83r31j8n0e.fsf@gnu.org> (Eli Zaretskii's message of "Mon, 27 Mar 2017 05:35:45 +0300") X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 208.118.235.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.org gmane.emacs.bugs:131002 Archived-At: Eli Zaretskii writes: >> From: Tino Calancha >> Date: Mon, 27 Mar 2017 10:30:26 +0900 (JST) >> Cc: 25942@debbugs.gnu.org, Tino Calancha >> >> 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 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