aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lisp/ChangeLog3
-rw-r--r--lisp/dired.el32
2 files changed, 30 insertions, 5 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 2d66f8e01f2..1661bfa789c 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,5 +1,8 @@
12008-04-29 Stefan Monnier <monnier@iro.umontreal.ca> 12008-04-29 Stefan Monnier <monnier@iro.umontreal.ca>
2 2
3 * dired.el (dired-read-dir-and-switches): Replace last change with
4 a new approach that mixes read-file-name and read-directory-name.
5
3 * files.el (read-buffer-to-switch): 6 * files.el (read-buffer-to-switch):
4 Avoid making assumptions about `other-buffer'. 7 Avoid making assumptions about `other-buffer'.
5 8
diff --git a/lisp/dired.el b/lisp/dired.el
index 521b1769a8e..ba20ef2cc1b 100644
--- a/lisp/dired.el
+++ b/lisp/dired.el
@@ -594,12 +594,34 @@ Don't use that together with FILTER."
594 ;; If a dialog is about to be used, call read-directory-name so 594 ;; If a dialog is about to be used, call read-directory-name so
595 ;; the dialog code knows we want directories. Some dialogs can 595 ;; the dialog code knows we want directories. Some dialogs can
596 ;; only select directories or files when popped up, not both. 596 ;; only select directories or files when popped up, not both.
597 (let ((default (and buffer-file-name 597 (if (next-read-file-uses-dialog-p)
598 (abbreviate-file-name buffer-file-name))))
599 (minibuffer-with-setup-hook
600 (lambda () (setq minibuffer-default default))
601 (read-directory-name (format "Dired %s(directory): " str) 598 (read-directory-name (format "Dired %s(directory): " str)
602 nil default-directory nil)))))) 599 nil default-directory nil)
600 (lexical-let ((default (and buffer-file-name
601 (abbreviate-file-name buffer-file-name)))
602 (defdir default-directory))
603 (minibuffer-with-setup-hook
604 (lambda ()
605 (setq minibuffer-default default)
606 (setq default-directory defdir))
607 (completing-read
608 (format "Dired %s(directory): " str)
609 ;; We need a mix of read-file-name and read-directory-name
610 ;; so that completion to directories is preferred, but if
611 ;; the user wants to enter a global pattern, he can still
612 ;; use completion on filenames to help him write the pattern.
613 ;; Essentially, we want to use
614 ;; (completion-table-with-predicate
615 ;; 'read-file-name-internal 'file-directory-p nil)
616 ;; but that doesn't work because read-file-name-internal
617 ;; does not obey its `predicate' argument.
618 (completion-table-in-turn
619 (lambda (str pred action)
620 (let ((read-file-name-predicate 'file-directory-p))
621 (complete-with-action
622 action 'read-file-name-internal str nil)))
623 'read-file-name-internal)
624 nil nil (abbreviate-file-name defdir) 'file-name-history)))))))
603 625
604;;;###autoload (define-key ctl-x-map "d" 'dired) 626;;;###autoload (define-key ctl-x-map "d" 'dired)
605;;;###autoload 627;;;###autoload