From: Tino Calancha <tino.calancha@gmail.com>
To: Emacs developers <emacs-devel@gnu.org>
Cc: tino.calancha@gmail.com
Subject: Dired: Improve symmetry in mark/unmark commands bound to keys
Date: Sun, 25 Sep 2016 02:31:30 +0900 (JST) [thread overview]
Message-ID: <alpine.DEB.2.20.1609250230400.4103@calancha-pc> (raw)
Dear all,
in Dired we have several commmands for mark files
bound to keys (the order is irrelevant):
1) * /
2) * @
3) % m
4) % g
5) * *
6) * s
If you load `dired-x' you get more:
7) M-(
8) * .
From that list all but 6) and 8) will _unmark_ in an
interactive call with prefix argument. That is, they mark
files or unmark them.
I have suggested in Bug#24518 that 8) should follow the same idiom
with no success :-(
Let's see my new proposal:
I) Add optional argument in 6) unflag-p to behave as the others.
II) Add a new command `dired-mark-or-unmark-extension', as
`dired-mark-extension' but, in interactive calls:
* A prefix argument _unmark_ files.
I propose to rebind '* .' to this command instead of the
`dired-mark-extension'.
After I) and II) we have an uniform behaviour for all
commands marking files which are bound to keys. Powerful and easy
to remember.
What do you think?
Regards,
Tino
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
From 33847d0f96356c6c09a78f391e27fa6a5b4f7628 Mon Sep 17 00:00:00 2001
From: Tino Calancha <tino.calancha@gmail.com>
Date: Sun, 25 Sep 2016 02:26:37 +0900
Subject: [PATCH] All Dired commands marking files, with prefix arg unmark
* lisp/dired-aux.el (dired-mark-subdir-files): Add optional
argument UNFLAG-P; if non-nil unmark files instead.
Save the point, call dired-mark-extension' but interactively with prefix arg
unmark files. Rebind '*.' to this command.
(dired-mark-sexp): Say 'Unmark' in the prompt for interactive calls
with prefix arg.
---
lisp/dired-aux.el | 11 +++++++----
lisp/dired-x.el | 28 ++++++++++++++++++++++++++--
2 files changed, 33 insertions(+), 6 deletions(-)
diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el
index 9e0943a..a817f74 100644
--- a/lisp/dired-aux.el
+++ b/lisp/dired-aux.el
@@ -2523,13 +2523,16 @@ dired-goto-subdir
(point)))))
;;;###autoload
-(defun dired-mark-subdir-files ()
+(defun dired-mark-subdir-files (&optional unflag-p)
"Mark all files except `.' and `..' in current subdirectory.
+With prefix argument, unmark or unflag all those files.
If the Dired buffer shows multiple directories, this command
marks the files listed in the subdirectory that point is in."
- (interactive)
- (let ((p-min (dired-subdir-min)))
- (dired-mark-files-in-region p-min (dired-subdir-max))))
+ (interactive "P")
+ (let ((dired-marker-char (or (and unflag-p ?\s) dired-marker-char))
+ (p-min (dired-subdir-min)))
+ (save-excursion
+ (dired-mark-files-in-region p-min (dired-subdir-max)))))
;;;###autoload
(defun dired-kill-subdir (&optional remember-marks)
diff --git a/lisp/dired-x.el b/lisp/dired-x.el
index 7d73c42..0656b47 100644
--- a/lisp/dired-x.el
+++ b/lisp/dired-x.el
@@ -245,7 +245,7 @@ dired-mode-map
(define-key dired-mode-map "*O" 'dired-mark-omitted)
(define-key dired-mode-map "\M-(" 'dired-mark-sexp)
(define-key dired-mode-map "*(" 'dired-mark-sexp)
-(define-key dired-mode-map "*." 'dired-mark-extension)
+(define-key dired-mode-map "*." 'dired-mark-or-unmark-extension)
(define-key dired-mode-map "\M-!" 'dired-smart-shell-command)
(define-key dired-mode-map "\M-G" 'dired-goto-subdir)
(define-key dired-mode-map "F" 'dired-do-find-marked-files)
@@ -354,6 +354,26 @@ dired-mark-extension
"\\)$")
marker-char))
+(defun dired-mark-or-unmark-extension (extension &optional marker-char)
+ "Mark all files with a certain EXTENSION for use in later commands.
+With prefix argument, unmark or unflag all those files.
+A `.' is *not* automatically prepended to the string entered.
+EXTENSION may also be a list of extensions instead of a single one.
+Interactively, ask for EXTENSION."
+ (interactive
+ (list (read-string
+ (format "%s extension: "
+ (if current-prefix-arg "Unmarking" "Marking")))
+ (and current-prefix-arg ?\s)))
+ (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 "\\|")
+ "\\)$")
+ marker-char))
+
(defun dired-flag-extension (extension)
"In Dired, flag all files with a certain EXTENSION for deletion.
A `.' is *not* automatically prepended to the string entered."
@@ -1470,7 +1490,11 @@ dired-mark-sexp
;; (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)
--
2.9.3
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
In GNU Emacs 25.2.50.1 (x86_64-pc-linux-gnu, GTK+ Version 3.22.0)
of 2016-09-25
Repository revision: 5ee56c4613e9380dbbe4bbaa97b29dd377e2134c
next reply other threads:[~2016-09-24 17:31 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-24 17:31 Tino Calancha [this message]
2016-09-24 18:12 ` Dired: Improve symmetry in mark/unmark commands bound to keys Eli Zaretskii
2016-09-24 18:25 ` Tino Calancha
2016-09-24 19:31 ` Andreas Schwab
2016-09-24 19:39 ` Eli Zaretskii
2016-09-24 19:46 ` Andreas Schwab
2016-09-24 19:58 ` Eli Zaretskii
2016-09-24 20:07 ` Andreas Schwab
2016-09-24 23:49 ` Drew Adams
2016-09-25 9:06 ` Tino Calancha
2016-09-25 18:55 ` John Wiegley
2016-09-26 9:23 ` Tino Calancha
2016-09-26 11:05 ` Tino Calancha
2016-09-26 15:02 ` Eli Zaretskii
2016-09-26 15:06 ` Eli Zaretskii
2016-09-26 15:47 ` John Wiegley
2016-09-26 16:30 ` Tino Calancha
2016-09-26 19:02 ` Eli Zaretskii
2016-10-03 9:21 ` Tino Calancha
2016-10-03 9:54 ` Eli Zaretskii
2016-10-03 11:15 ` Tino Calancha
2016-09-26 21:52 ` John Wiegley
2016-09-25 19:14 ` Eli Zaretskii
2016-09-25 22:43 ` Andreas Schwab
2016-09-25 22:58 ` Andreas Schwab
2016-09-25 23:00 ` Andreas Schwab
2016-09-26 2:38 ` Eli Zaretskii
2016-09-26 8:33 ` Andreas Schwab
2016-09-26 14:59 ` Eli Zaretskii
2016-09-24 19:49 ` Tino Calancha
[not found] <<alpine.DEB.2.20.1609250230400.4103@calancha-pc>
[not found] ` <<83oa3db20a.fsf@gnu.org>
2016-09-24 18:53 ` Drew Adams
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
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=alpine.DEB.2.20.1609250230400.4103@calancha-pc \
--to=tino.calancha@gmail.com \
--cc=emacs-devel@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 public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).