[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: find-file-read-args
From: |
Juri Linkov |
Subject: |
Re: find-file-read-args |
Date: |
Tue, 24 Nov 2009 19:08:59 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/23.1.50 (x86_64-pc-linux-gnu) |
> Now I wonder: is that code necessary at all? If dired sets
> file-name-at-point-functions, the dired-get-filename would get in the
> minibuffer-defaults via file-name-at-point-functions, wouldn't it?
>
> The idea with "no dired-specific code" is that if it's useful for dired
> it's also useful for VC-Dir, PCL-CVS, etc...
> So it looks like file-name-at-point-functions would be a good way to get
> what we want.
> WDYT?
This works correctly with this patch that adds `dired-file-name-at-point'.
(Only relevant changes included, omitting unchanged parts of the whole
patch from the previous message).
Index: lisp/dired.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/dired.el,v
retrieving revision 1.444
diff -c -r1.444 dired.el
*** lisp/dired.el 19 Nov 2009 16:49:24 -0000 1.444
--- lisp/dired.el 24 Nov 2009 17:08:33 -0000
***************
*** 587,592 ****
--- 587,603 ----
;; The dired command
+ ;;;###autoload
+ (progn (defun dired-file-name-at-point ()
+ "Try to get a file name at point in the current dired buffer.
+ This hook is inteneded to be put in `file-name-at-point-functions'."
+ (when (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)))))))
+
(defun dired-read-dir-and-switches (str)
;; For use in interactive.
(reverse (list
Index: lisp/files.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/files.el,v
retrieving revision 1.1101
diff -c -r1.1101 files.el
*** lisp/files.el 13 Nov 2009 22:19:51 -0000 1.1101
--- lisp/files.el 24 Nov 2009 17:08:20 -0000
***************
*** 411,416 ****
--- 411,426 ----
:type '(hook :options (cvs-dired-noselect dired-noselect))
:group 'find-file)
+ (defcustom file-name-at-point-functions '(dired-file-name-at-point
+ ffap-guess-file-name-at-point)
+ "List of functions to try in sequence to get the file name at point.
+ Each function should return either nil or a file name found at the
+ location of point in the current buffer."
+ :type '(hook :options (dired-file-name-at-point
+ ffap-guess-file-name-at-point))
+ :group 'find-file)
+
;;;It is not useful to make this a local variable.
;;;(put 'find-file-not-found-hooks 'permanent-local t)
(defvar find-file-not-found-functions nil
Index: lisp/minibuffer.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/minibuffer.el,v
retrieving revision 1.99
diff -c -r1.99 minibuffer.el
*** lisp/minibuffer.el 19 Nov 2009 22:05:42 -0000 1.99
--- lisp/minibuffer.el 24 Nov 2009 17:08:28 -0000
***************
*** 1320,1325 ****
--- 1320,1352 ----
;; Not always defined, but only called if next-read-file-uses-dialog-p says
so.
(declare-function x-file-dialog "xfns.c"
(prompt dir &optional default-filename mustmatch
only-dir-p))
+ (declare-function dired-get-filename "dired" (&optional localp
no-error-if-not-filep))
+
+ (defun read-file-name-defaults (&optional dir initial)
+ (let ((default
+ (cond
+ ;; With non-nil `initial', use `dir' as the first default.
+ ;; Essentially, this mean reversing the normal order of the
+ ;; current directory name and the current file name, i.e.
+ ;; 1. with normal file reading:
+ ;; 1.1. initial input is the current directory
+ ;; 1.2. the first default is the current file name
+ ;; 2. with non-nil `initial' (for `find-alternate-file'):
+ ;; 2.2. initial input is the current file name
+ ;; 2.1. the first default is the current directory
+ (initial (abbreviate-file-name dir))
+ ;; In file buffers, try to get the current file name
+ (buffer-file-name
+ (abbreviate-file-name buffer-file-name))))
+ (file-name-at-point
+ (run-hook-with-args-until-success 'file-name-at-point-functions)))
+ (when file-name-at-point
+ (setq default (delete-dups
+ (delete "" (delq nil (list file-name-at-point default))))))
+ ;; Append new defaults to the end of existing `minibuffer-default'.
+ (append
+ (if (listp minibuffer-default) minibuffer-default (list
minibuffer-default))
+ (if (listp default) default (list default)))))
(defun read-file-name (prompt &optional dir default-filename mustmatch
initial predicate)
"Read file name, prompting with PROMPT and completing in directory DIR.
--
Juri Linkov
http://www.jurta.org/emacs/
- Re: find-file-read-args, (continued)
- 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
- dired-dwim-target-directory (was: find-file-read-args), Juri Linkov, 2009/11/17
- dired-dwim-target-directory (was: find-file-read-args), Juri Linkov, 2009/11/17
- Re: find-file-read-args, Stefan Monnier, 2009/11/22
- Re: find-file-read-args, Juri Linkov, 2009/11/23
- Re: find-file-read-args, Stefan Monnier, 2009/11/23
- Re: find-file-read-args, Juri Linkov, 2009/11/23
- Re: find-file-read-args, Stefan Monnier, 2009/11/23
- Re: find-file-read-args,
Juri Linkov <=
- Re: find-file-read-args, Stefan Monnier, 2009/11/24
- find-file-literally (was: find-file-read-args), Juri Linkov, 2009/11/23
- Re: find-file-literally, Stefan Monnier, 2009/11/24
- M-! M-n should fetch filename (Re: FFAP), Juri Linkov, 2009/11/09
- Re: M-! M-n should fetch filename (Re: FFAP), Stefan Monnier, 2009/11/09
- Re: M-! M-n should fetch filename (Re: FFAP), Juri Linkov, 2009/11/09
- Re: M-! M-n should fetch filename (Re: FFAP), Stefan Monnier, 2009/11/10
- Re: M-! M-n should fetch filename (Re: FFAP), Juri Linkov, 2009/11/10
- dired-dwim-target (was: FFAP), Juri Linkov, 2009/11/15
- dired-dwim-target-defaults (was: dired-dwim-target), Juri Linkov, 2009/11/23