[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
find-file-read-args (was: FFAP)
From: |
Juri Linkov |
Subject: |
find-file-read-args (was: FFAP) |
Date: |
Mon, 09 Nov 2009 12:09:33 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/23.1.50 (x86_64-pc-linux-gnu) |
> Let's see what currently M-n does in file prompts (0. means the default
> input, and 1. - the minibuffer's content after one M-n):
>
> `C-x C-f' in a non-file buffer:
> 0. current directory name
>
> `C-x C-f' in a file buffer:
> 0. current directory name
> 1. file name of the current buffer
>
> `C-x C-v' in a file buffer:
> 0. file name of the current buffer
> 1. file name of the current buffer
> (the last case has duplicates)
>
> After adding a file name at point:
>
> `C-x C-f' in a non-file buffer:
> 0. current directory name
> 1. file name at point
>
> `C-x C-f' in a file buffer:
> 0. current directory name
> 1. file name of the current buffer
> 2. file name at point
>
> `C-x C-v' in a file buffer:
> 0. file name of the current buffer
> 1. file name at point
>
> So M-n more than once is only in a file buffer,
> where we could add a file name at point before
> the file name of the current buffer:
>
> `C-x C-f' in a file buffer:
> 0. current directory name
> 1. file name at point
> 2. file name of the current buffer
The patch below implements this scheme, and additionally
includes an approved but not installed change proposed
by Drew in http://thread.gmane.org/gmane.emacs.devel/74534
that allows `M-n' with `C-x C-f' to get the file at point
in Dired mode.
Other changes are:
1. When `ffap-guesser' is available, use it to provide
an additional default value. Since currently its
guesses are much better than from `thing-at-point',
it makes sense to load ffap.el in .emacs but without
rebinding file-related keys to their equivalents
by `ffap-bindings'. This way standard keys will remain
bound to default functions that will use `ffap-guesser' to
get the file name at point and provide it as default.
2. When ffap.el is not loaded, then use `thing-at-point'
to provide an additional default value. But currently
this code is commented out in the patch below,
because in the current state, `thing-at-point' is useless
since it doesn't check if the file at point exists.
It blindly proposes any word at point as a file name.
Perhaps a new scheme should be implemented like e.g.
(thing-at-point 'existing-filename).
3. Added two new optional arguments `dir' and `initial'
for `find-file-read-args' to allow `find-alternate-file'
to use features of `find-file-read-args' shared among
all filename-reading functions.
4. For the same reason, `find-file-literally' now relies on
`find-file-read-args' as well.
Index: lisp/files.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/files.el,v
retrieving revision 1.1098
diff -c -r1.1098 files.el
*** lisp/files.el 6 Nov 2009 05:16:27 -0000 1.1098
--- lisp/files.el 9 Nov 2009 10:04:57 -0000
***************
*** 1297,1309 ****
,@body)
(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)
--- 1297,1332 ----
,@body)
(remove-hook 'minibuffer-setup-hook ,hook)))))
! (defun find-file-read-args (prompt mustmatch &optional dir initial)
(list (let ((find-file-default
! (cond
! (initial nil) ; don't duplicate initial and default values
! ((eq major-mode 'dired-mode)
! (and (dired-get-filename nil t)
! (abbreviate-file-name (dired-get-filename nil t))))
! (buffer-file-name
! (abbreviate-file-name buffer-file-name))))
! (file-at-point
! (cond ((fboundp 'ffap-guesser)
! (let ((guess (ffap-guesser)))
! (if (or (not (stringp 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)))))
! ;; ((fboundp 'thing-at-point)
! ;; (thing-at-point 'filename))
! )))
! (when file-at-point
! (setq find-file-default
! (delq nil (delete "" (delete-dups
! (list file-at-point
! find-file-default))))))
(minibuffer-with-setup-hook
(lambda () (setq minibuffer-default find-file-default))
! (read-file-name prompt dir default-directory mustmatch initial)))
t))
(defun find-file (filename &optional wildcards)
***************
*** 1460,1469 ****
(and file
(setq file-name (file-name-nondirectory file)
file-dir (file-name-directory file)))
! (list (read-file-name
! "Find alternate file: " file-dir nil
! (confirm-nonexistent-file-or-buffer) file-name)
! t))))
(if (one-window-p)
(find-file-other-window filename wildcards)
(save-selected-window
--- 1483,1491 ----
(and file
(setq file-name (file-name-nondirectory file)
file-dir (file-name-directory file)))
! (find-file-read-args "Find alternate file: "
! (confirm-nonexistent-file-or-buffer)
! file-dir file-name))))
(if (one-window-p)
(find-file-other-window filename wildcards)
(save-selected-window
***************
*** 1490,1499 ****
(and file
(setq file-name (file-name-nondirectory file)
file-dir (file-name-directory file)))
! (list (read-file-name
! "Find alternate file: " file-dir nil
! (confirm-nonexistent-file-or-buffer) file-name)
! t)))
(unless (run-hook-with-args-until-failure 'kill-buffer-query-functions)
(error "Aborted"))
(when (and (buffer-modified-p) buffer-file-name)
--- 1512,1520 ----
(and file
(setq file-name (file-name-nondirectory file)
file-dir (file-name-directory file)))
! (find-file-read-args "Find alternate file: "
! (confirm-nonexistent-file-or-buffer)
! file-dir file-name)))
(unless (run-hook-with-args-until-failure 'kill-buffer-query-functions)
(error "Aborted"))
(when (and (buffer-modified-p) buffer-file-name)
***************
*** 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)))
(defvar after-find-file-from-revert-buffer nil)
--- 2041,2050 ----
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
! (nbutlast ; remove the `wildcards' arg
! (find-file-read-args "Find file literally: "
! (confirm-nonexistent-file-or-buffer))))
(switch-to-buffer (find-file-noselect filename nil t)))
(defvar after-find-file-from-revert-buffer nil)
--
Juri Linkov
http://www.jurta.org/emacs/
- Re: FFAP, (continued)
- Re: FFAP, Stefan Monnier, 2009/11/06
- Re: FFAP, Juri Linkov, 2009/11/06
- Re: FFAP, Stefan Monnier, 2009/11/06
- Re: FFAP, Juri Linkov, 2009/11/08
- Re: FFAP, Stefan Monnier, 2009/11/09
- read-file-name (was: FFAP), Juri Linkov, 2009/11/09
- Re: read-file-name, Stefan Monnier, 2009/11/09
- Re: read-file-name, Juri Linkov, 2009/11/09
- Re: read-file-name, Stefan Monnier, 2009/11/10
- dired-read-dir-and-switches (was: FFAP), Juri Linkov, 2009/11/09
- find-file-read-args (was: FFAP),
Juri Linkov <=
- Re: find-file-read-args, Stefan Monnier, 2009/11/09
- Re: find-file-read-args, Juri Linkov, 2009/11/09
- Re: find-file-read-args, Juri Linkov, 2009/11/12
- Re: find-file-read-args, martin rudalics, 2009/11/12
- Re: find-file-read-args, Juri Linkov, 2009/11/12
- Re: find-file-read-args, Juri Linkov, 2009/11/15
- Re: find-file-read-args, martin rudalics, 2009/11/15
- Re: find-file-read-args, Stefan Monnier, 2009/11/15
- Re: find-file-read-args, martin rudalics, 2009/11/17
- Re: find-file-read-args, Juri Linkov, 2009/11/17