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