summaryrefslogtreecommitdiff
path: root/lisp/dired.el
diff options
context:
space:
mode:
authorStefan Monnier <monnier@iro.umontreal.ca>2008-05-02 17:20:07 +0000
committerStefan Monnier <monnier@iro.umontreal.ca>2008-05-02 17:20:07 +0000
commit330b50982d0eadf27f08a857ae98022c0606b42e (patch)
tree3623e062c9e34001fb0418b62bf62ea146ce66ca /lisp/dired.el
parent457d37ba2254ff454f4ddc70304b75bbe55573bb (diff)
downloademacs-330b50982d0eadf27f08a857ae98022c0606b42e.tar.gz
(dired-read-dir-and-switches):
Set minibuffer-completing-file-name and call substitute-in-file-name.
Diffstat (limited to 'lisp/dired.el')
-rw-r--r--lisp/dired.el73
1 files changed, 38 insertions, 35 deletions
diff --git a/lisp/dired.el b/lisp/dired.el
index b301bda7e6b..a2f0f009d33 100644
--- a/lisp/dired.el
+++ b/lisp/dired.el
@@ -589,41 +589,44 @@ Don't use that together with FILTER."
(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