Mercurial > emacs
changeset 94559:687d0af3b0f3
(dired-read-dir-and-switches):
Set minibuffer-completing-file-name and call substitute-in-file-name.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Fri, 02 May 2008 17:20:07 +0000 |
parents | 9802c49152d9 |
children | 9154a25c84c6 |
files | lisp/ChangeLog lisp/dired.el |
diffstat | 2 files changed, 41 insertions(+), 35 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Fri May 02 17:02:52 2008 +0000 +++ b/lisp/ChangeLog Fri May 02 17:20:07 2008 +0000 @@ -1,5 +1,8 @@ 2008-05-02 Stefan Monnier <monnier@iro.umontreal.ca> + * dired.el (dired-read-dir-and-switches): + Set minibuffer-completing-file-name and call substitute-in-file-name. + * minibuffer.el (completion-hilit-commonality): Revert last change: the leftover code was actually useful.
--- a/lisp/dired.el Fri May 02 17:02:52 2008 +0000 +++ b/lisp/dired.el Fri May 02 17:20:07 2008 +0000 @@ -589,41 +589,44 @@ (defun dired-read-dir-and-switches (str) ;; For use in interactive. - (reverse (list - (if current-prefix-arg - (read-string "Dired listing switches: " - dired-listing-switches)) - ;; If a dialog is about to be used, call read-directory-name so - ;; the dialog code knows we want directories. Some dialogs can - ;; only select directories or files when popped up, not both. - (if (next-read-file-uses-dialog-p) - (read-directory-name (format "Dired %s(directory): " str) - nil default-directory nil) - (lexical-let ((default (and buffer-file-name - (abbreviate-file-name buffer-file-name))) - (defdir default-directory)) - (minibuffer-with-setup-hook - (lambda () - (setq minibuffer-default default) - (setq default-directory defdir)) - (completing-read - (format "Dired %s(directory): " str) - ;; We need a mix of read-file-name and read-directory-name - ;; so that completion to directories is preferred, but if - ;; the user wants to enter a global pattern, he can still - ;; use completion on filenames to help him write the pattern. - ;; Essentially, we want to use - ;; (completion-table-with-predicate - ;; 'read-file-name-internal 'file-directory-p nil) - ;; but that doesn't work because read-file-name-internal - ;; does not obey its `predicate' argument. - (completion-table-in-turn - (lambda (str pred action) - (let ((read-file-name-predicate 'file-directory-p)) - (complete-with-action - action 'read-file-name-internal str nil))) - 'read-file-name-internal) - nil nil (abbreviate-file-name defdir) 'file-name-history))))))) + (reverse + (list + (if current-prefix-arg + (read-string "Dired listing switches: " + dired-listing-switches)) + ;; If a dialog is about to be used, call read-directory-name so + ;; the dialog code knows we want directories. Some dialogs can + ;; only select directories or files when popped up, not both. + (if (next-read-file-uses-dialog-p) + (read-directory-name (format "Dired %s(directory): " str) + nil default-directory nil) + (lexical-let ((default (and buffer-file-name + (abbreviate-file-name buffer-file-name))) + (defdir default-directory)) + (minibuffer-with-setup-hook + (lambda () + (setq minibuffer-default default) + (setq minibuffer-completing-file-name t) + (setq default-directory defdir)) + (substitute-in-file-name + (completing-read + (format "Dired %s(directory): " str) + ;; We need a mix of read-file-name and read-directory-name + ;; so that completion to directories is preferred, but if + ;; the user wants to enter a global pattern, he can still + ;; use completion on filenames to help him write the pattern. + ;; Essentially, we want to use + ;; (completion-table-with-predicate + ;; 'read-file-name-internal 'file-directory-p nil) + ;; but that doesn't work because read-file-name-internal + ;; does not obey its `predicate' argument. + (completion-table-in-turn + (lambda (str pred action) + (let ((read-file-name-predicate 'file-directory-p)) + (complete-with-action + action 'read-file-name-internal str nil))) + 'read-file-name-internal) + nil nil (abbreviate-file-name defdir) 'file-name-history)))))))) ;;;###autoload (define-key ctl-x-map "d" 'dired) ;;;###autoload