all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
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




  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.