From: Stefan Monnier <monnier@iro.umontreal.ca>
To: Juri Linkov <juri@jurta.org>
Cc: martin rudalics <rudalics@gmx.at>, emacs-devel@gnu.org
Subject: Re: find-file-read-args
Date: Sun, 22 Nov 2009 23:19:44 -0500 [thread overview]
Message-ID: <jwvskc528jj.fsf-monnier+emacs@gnu.org> (raw)
In-Reply-To: <87my2ljxun.fsf@mail.jurta.org> (Juri Linkov's message of "Tue, 17 Nov 2009 11:59:36 +0200")
> Don't worry, I think it's quite useless to get the filename at point
> from the Dired buffer when copying multiple files (i.e. when it shows
> the *Marked files* window). A list of directories would be enough.
> The complete patch below avoids this problem by setting
> `minibuffer-default-add-function' to nil in `dired-do-create-files'
> and thus not using the filename guessing.
I think this is a useful feature. I'm not yet 100% sure this is the
best way to provide it (I think a dedicated key would be at least as
good), but it saves us from figuring out which key to use: it's
very unintrusive.
So, I like it. But I have some more questions:
> --- 1275,1280 ----
> ***************
> *** 1298,1309 ****
> (remove-hook 'minibuffer-setup-hook ,hook)))))
> (defun find-file-read-args (prompt mustmatch)
> ! (list (let ((find-file-default
> ! (and buffer-file-name
> ! (abbreviate-file-name buffer-file-name))))
> ! (minibuffer-with-setup-hook
> ! (lambda () (setq minibuffer-default find-file-default))
> ! (read-file-name prompt nil default-directory mustmatch)))
> t))
> (defun find-file (filename &optional wildcards)
> --- 1295,1301 ----
> (remove-hook 'minibuffer-setup-hook ,hook)))))
> (defun find-file-read-args (prompt mustmatch)
> ! (list (read-file-name prompt nil default-directory mustmatch)
> t))
> (defun find-file (filename &optional wildcards)
Can you explain this hunk? This is a fairly delicate part of the
behavior of C-x C-f, so I'd like to understand how you reproduce it.
> ***************
> *** 2020,2026 ****
> In a Lisp program, if you want to be sure of accessing a file's
> contents literally, you should create a temporary buffer and then read
> the file contents into it using `insert-file-contents-literally'."
> ! (interactive "FFind file literally: ")
> (switch-to-buffer (find-file-noselect filename nil t)))
> \f
> (defvar after-find-file-from-revert-buffer nil)
> --- 2012,2021 ----
> In a Lisp program, if you want to be sure of accessing a file's
> contents literally, you should create a temporary buffer and then read
> the file contents into it using `insert-file-contents-literally'."
> ! (interactive
> ! (list (read-file-name
> ! "Find file literally: " nil default-directory
> ! (confirm-nonexistent-file-or-buffer))))
> (switch-to-buffer (find-file-noselect filename nil t)))
> \f
> (defvar after-find-file-from-revert-buffer nil)
Good change, thank you.
> + ((eq major-mode 'dired-mode)
> + (let ((filename (dired-get-filename nil t)))
> + (when filename
> + (if (file-directory-p filename)
> + (file-name-as-directory (abbreviate-file-name filename))
> + (abbreviate-file-name filename)))))))
This is ugly. Why does it have to be here rather than somewhere in dired?
> + (filename-at-point
> + (cond
> + ((fboundp 'ffap-guesser)
> + ;; Logic from `ffap-read-file-or-url' and `dired-at-point-prompter'
> + (let ((guess (ffap-guesser)))
> + (setq guess
> + (if (or (not guess)
> + (and (fboundp 'ffap-url-p)
> + (ffap-url-p guess))
> + (and (fboundp 'ffap-file-remote-p)
> + (ffap-file-remote-p guess)))
> + guess
> + (abbreviate-file-name (expand-file-name guess))))
> + (when guess
> + (if (file-directory-p guess)
> + (file-name-as-directory guess)
> + guess))))
> + ;; ((fboundp 'thing-at-point)
> + ;; (thing-at-point 'filename))
> + )))
I think this should be moved to a separate function (e.g. so it can be
used by a separate key-binding) in file.el. That function could/should
obey a new hook file-name-at-point-functions hook which we'd run with
run-hook-with-args-until-success.
> ! ;; Unless a list of defaults in `minibuffer-default'
> ! ;; is provided, reset it to nil and on the
> ! ;; first request on `M-n' fill it with a list
> ! ;; of defaults relevant for file-name reading.
> ! (unless (consp minibuffer-default)
> ! (setq minibuffer-default nil)
> ! (set (make-local-variable 'minibuffer-default-add-function)
> ! (lambda ()
> ! (with-current-buffer
> ! (window-buffer (minibuffer-selected-window))
> ! (read-file-name-defaults dir initial))))))
Is it really necessary to throw away the minibuffer-default if it's not
a cons? I'd rather keep it and just add file-name-at-point. That would
make the change a lot more "obviously safe".
> Index: lisp/dired-aux.el
Am I right that this part of the change is not strictly necessary?
Stefan
next prev parent reply other threads:[~2009-11-23 4:19 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-11-06 0:13 find-file-literally-at-point Edward O'Connor
2009-11-06 1:45 ` find-file-literally-at-point Juri Linkov
2009-11-06 4:20 ` FFAP (was: find-file-literally-at-point) Stefan Monnier
2009-11-06 4:41 ` FFAP Miles Bader
2009-11-06 15:20 ` FFAP Stefan Monnier
2009-11-06 4:45 ` FFAP Juri Linkov
2009-11-06 8:50 ` FFAP Eli Zaretskii
2009-11-06 10:37 ` FFAP Juri Linkov
2009-11-06 15:18 ` FFAP Stefan Monnier
2009-11-06 21:19 ` FFAP Juri Linkov
2009-11-07 1:32 ` FFAP Stefan Monnier
2009-11-09 0:52 ` FFAP Juri Linkov
2009-11-09 6:33 ` FFAP Stefan Monnier
2009-11-09 10:09 ` find-file-read-args (was: FFAP) Juri Linkov
2009-11-09 14:28 ` find-file-read-args Stefan Monnier
2009-11-10 0:57 ` find-file-read-args Juri Linkov
2009-11-12 9:56 ` find-file-read-args Juri Linkov
2009-11-12 10:45 ` find-file-read-args martin rudalics
2009-11-12 10:51 ` find-file-read-args Juri Linkov
2009-11-15 15:09 ` find-file-read-args Juri Linkov
2009-11-15 17:28 ` find-file-read-args martin rudalics
2009-11-16 1:23 ` find-file-read-args Stefan Monnier
2009-11-17 7:43 ` find-file-read-args martin rudalics
2009-11-17 9:59 ` find-file-read-args Juri Linkov
2009-11-17 17:42 ` dired-dwim-target-directory (was: find-file-read-args) Juri Linkov
2009-11-17 17:43 ` Juri Linkov
2009-11-23 4:19 ` Stefan Monnier [this message]
2009-11-23 9:59 ` find-file-read-args Juri Linkov
2009-11-23 20:17 ` find-file-read-args Stefan Monnier
2009-11-23 21:17 ` find-file-read-args Juri Linkov
2009-11-24 2:33 ` find-file-read-args Stefan Monnier
2009-11-24 17:08 ` find-file-read-args Juri Linkov
2009-11-24 19:40 ` find-file-read-args Stefan Monnier
2009-11-23 21:17 ` find-file-literally (was: find-file-read-args) Juri Linkov
2009-11-25 2:10 ` find-file-literally Stefan Monnier
2009-11-09 10:14 ` read-file-name (was: FFAP) Juri Linkov
2009-11-09 14:31 ` read-file-name Stefan Monnier
2009-11-10 0:55 ` read-file-name Juri Linkov
2009-11-10 17:25 ` read-file-name Stefan Monnier
2009-11-09 10:30 ` dired-read-dir-and-switches (was: FFAP) Juri Linkov
2009-11-09 10:36 ` M-! M-n should fetch filename (Re: FFAP) Juri Linkov
2009-11-09 14:35 ` Stefan Monnier
2009-11-10 0:59 ` Juri Linkov
2009-11-10 17:29 ` Stefan Monnier
2009-11-11 0:12 ` Juri Linkov
2009-11-15 15:12 ` dired-dwim-target (was: FFAP) Juri Linkov
2009-11-23 21:12 ` dired-dwim-target-defaults (was: dired-dwim-target) Juri Linkov
2009-11-09 0:44 ` find-file-literally-at-point Juri Linkov
2009-11-09 2:00 ` find-file-literally-at-point Miles Bader
2009-11-09 2:11 ` find-file-literally-at-point Juri Linkov
2009-11-10 0:49 ` find-file-literally-at-point Juri Linkov
2009-11-09 10:01 ` utf-8-with-signature (was: find-file-literally-at-point) Juri Linkov
2009-11-06 10:20 ` find-file-literally-at-point Eduard Wiebe
2009-11-09 0:55 ` find-file-literally-at-point Juri Linkov
2009-11-09 19:49 ` find-file-literally-at-point Eduard Wiebe
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=jwvskc528jj.fsf-monnier+emacs@gnu.org \
--to=monnier@iro.umontreal.ca \
--cc=emacs-devel@gnu.org \
--cc=juri@jurta.org \
--cc=rudalics@gmx.at \
/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.