From: Juri Linkov <juri@linkov.net>
To: Michael Heerdegen <michael_heerdegen@web.de>
Cc: "Basil L. Contovounesios" <contovob@tcd.ie>,
Lars Ingebrigtsen <larsi@gnus.org>,
35385@debbugs.gnu.org
Subject: bug#35385: 27.0.50; Make dired-dwim-target aware of other frames
Date: Sun, 10 Nov 2019 22:38:38 +0200 [thread overview]
Message-ID: <87zhh31u55.fsf@mail.linkov.net> (raw)
In-Reply-To: <87y2wqrxju.fsf@web.de> (Michael Heerdegen's message of "Fri, 08 Nov 2019 20:13:41 +0100")
[-- Attachment #1: Type: text/plain, Size: 332 bytes --]
>> So dired-dwim-target could have a similar defcustom
>> with choices for recent/next window.
>
> There are lots of imaginable user preferences, so I would prefer a
> solution where one can specify a function. Would you want to use
> `dired-dwim-target' for that?
This would be a natural choice, indeed.
Please try this patch:
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: dired-dwim-target-function.patch --]
[-- Type: text/x-diff, Size: 2190 bytes --]
diff --git a/lisp/dired.el b/lisp/dired.el
index 05789a3516..cfee990a74 100644
--- a/lisp/dired.el
+++ b/lisp/dired.el
@@ -190,8 +190,16 @@ dired-dwim-target
Dired buffer's current directory.
The target is used in the prompt for file copy, rename etc."
- :type 'boolean
- :group 'dired)
+ :type '(choice
+ (const :tag "No guess" nil)
+ (function-item :tag "Prefer most recently used windows"
+ dired-dwim-target-recent)
+ (function-item :tag "Prefer next windows"
+ dired-dwim-target-next)
+ (function :tag "Your function")
+ (other :tag "Try to guess" t))
+ :group 'dired
+ :version "27.1")
(defcustom dired-copy-preserve-time t
"If non-nil, Dired preserves the last-modified time in a file copy.
diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el
index 722d036e3f..a3d0ad61dd 100644
--- a/lisp/dired-aux.el
+++ b/lisp/dired-aux.el
@@ -1993,6 +1993,12 @@ dired-mark-read-file-name
(format prompt (dired-mark-prompt arg files)) dir default))
(defun dired-dwim-target-directories ()
+ (cond ((functionp dired-dwim-target)
+ (funcall dired-dwim-target))
+ (dired-dwim-target
+ (dired-dwim-target-recent))))
+
+(defun dired-dwim-target-recent ()
;; Return directories from all visible windows with dired-mode buffers
;; ordered by most-recently-used.
(mapcar #'cdr (sort (mapcan (lambda (w)
@@ -2004,6 +2010,15 @@ dired-dwim-target-directories
(window-list-1 nil 'nomini 'visible)))
(lambda (a b) (> (car a) (car b))))))
+(defun dired-dwim-target-next ()
+ (mapcan (lambda (w)
+ (with-current-buffer (window-buffer w)
+ (when (eq major-mode 'dired-mode)
+ (list (dired-current-directory)))))
+ (delq (selected-window) (window-list-1
+ (next-window nil 'nomini 'visible)
+ 'nomini 'visible))))
+
(defun dired-dwim-target-directory ()
;; Try to guess which target directory the user may want.
;; If there is a dired buffer displayed in one of the next windows,
next prev parent reply other threads:[~2019-11-10 20:38 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-04-22 21:47 bug#35385: 27.0.50; Make dired-dwim-target aware of other frames Basil L. Contovounesios
2019-04-22 22:11 ` Basil L. Contovounesios
2019-04-29 20:28 ` Juri Linkov
2019-06-23 17:28 ` Lars Ingebrigtsen
2019-09-16 21:11 ` Lars Ingebrigtsen
2019-09-16 21:39 ` Juri Linkov
2019-09-18 21:48 ` Juri Linkov
2019-09-19 8:18 ` martin rudalics
2019-09-19 20:43 ` Juri Linkov
2019-10-26 23:20 ` Juri Linkov
2019-11-04 19:01 ` Michael Heerdegen
2019-11-05 22:18 ` Juri Linkov
2019-11-08 19:13 ` Michael Heerdegen
2019-11-10 20:38 ` Juri Linkov [this message]
2019-11-12 21:21 ` Juri Linkov
2019-11-13 15:30 ` Michael Heerdegen
2019-11-13 21:41 ` Juri Linkov
2019-11-14 15:08 ` Michael Heerdegen
2019-11-14 23:10 ` Juri Linkov
2019-11-15 12:16 ` Michael Heerdegen
2019-11-16 22:06 ` Juri Linkov
2019-11-16 22:42 ` Michael Heerdegen
2020-08-10 11:36 ` Lars Ingebrigtsen
2019-11-14 10:13 ` Eli Zaretskii
2019-11-14 23:07 ` Juri Linkov
2019-09-19 1:51 ` Basil L. Contovounesios
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=87zhh31u55.fsf@mail.linkov.net \
--to=juri@linkov.net \
--cc=35385@debbugs.gnu.org \
--cc=contovob@tcd.ie \
--cc=larsi@gnus.org \
--cc=michael_heerdegen@web.de \
/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).