diff options
author | Stefan Monnier <monnier@iro.umontreal.ca> | 2008-05-13 16:18:17 +0000 |
---|---|---|
committer | Stefan Monnier <monnier@iro.umontreal.ca> | 2008-05-13 16:18:17 +0000 |
commit | b575007b0a100d1daf0ca727a7451d52cb617d56 (patch) | |
tree | f1e21d12542e03f9e6e4968c55d2ec44950e4cab /lisp/dired.el | |
parent | 833e7ac3fcc6652177daf10c01e9656587df87eb (diff) | |
download | emacs-b575007b0a100d1daf0ca727a7451d52cb617d56.tar.gz |
(dired-read-dir-and-switches): Move things about to use less
recursion during macroexpansion.
Diffstat (limited to 'lisp/dired.el')
-rw-r--r-- | lisp/dired.el | 61 |
1 files changed, 32 insertions, 29 deletions
diff --git a/lisp/dired.el b/lisp/dired.el index fd1456a3332..d15e32f70fb 100644 --- a/lisp/dired.el +++ b/lisp/dired.el @@ -598,38 +598,41 @@ Don't use that together with FILTER." (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))) - (cie ())) + (let ((cie ())) (dolist (ext completion-ignored-extensions) (if (eq ?/ (aref ext (1- (length ext)))) (push ext cie))) (setq cie (concat (regexp-opt cie "\\(?:") "\\'")) - (minibuffer-with-setup-hook - (lambda () - (setq minibuffer-default default) - (setq minibuffer-completion-table - ;; 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 - (lambda (f) (and (not (member f '("./" "../"))) - ;; Hack! Faster than file-directory-p! - (eq (aref f (1- (length f))) ?/) - (not (string-match cie f)))))) - (complete-with-action - action 'read-file-name-internal str nil))) - 'read-file-name-internal))) - (read-file-name (format "Dired %s(directory): " str) - nil default-directory nil))))))) + (lexical-let* ((default (and buffer-file-name + (abbreviate-file-name buffer-file-name))) + (cie cie) + (completion-table + ;; 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 + (lambda (f) + (and (not (member f '("./" "../"))) + ;; Hack! Faster than file-directory-p! + (eq (aref f (1- (length f))) ?/) + (not (string-match cie f)))))) + (complete-with-action + action 'read-file-name-internal str nil))) + 'read-file-name-internal))) + (minibuffer-with-setup-hook + (lambda () + (setq minibuffer-default default) + (setq minibuffer-completion-table completion-table)) + (read-file-name (format "Dired %s(directory): " str) + nil default-directory nil)))))))) ;;;###autoload (define-key ctl-x-map "d" 'dired) ;;;###autoload |