emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/lisp/dired.el,v


From: Stefan Monnier
Subject: [Emacs-diffs] Changes to emacs/lisp/dired.el,v
Date: Tue, 29 Apr 2008 14:48:58 +0000

CVSROOT:        /sources/emacs
Module name:    emacs
Changes by:     Stefan Monnier <monnier>        08/04/29 14:48:57

Index: dired.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/dired.el,v
retrieving revision 1.388
retrieving revision 1.389
diff -u -b -r1.388 -r1.389
--- dired.el    27 Apr 2008 19:49:14 -0000      1.388
+++ dired.el    29 Apr 2008 14:48:57 -0000      1.389
@@ -594,12 +594,34 @@
            ;; 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.
-           (let ((default (and buffer-file-name
-                               (abbreviate-file-name buffer-file-name))))
-             (minibuffer-with-setup-hook
-                 (lambda () (setq minibuffer-default default))
+           (if (next-read-file-uses-dialog-p)
                (read-directory-name (format "Dired %s(directory): " str)
-                                    nil default-directory nil))))))
+                                    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)))))))
 
 ;;;###autoload (define-key ctl-x-map "d" 'dired)
 ;;;###autoload




reply via email to

[Prev in Thread] Current Thread [Next in Thread]