Mercurial > emacs
changeset 94894:05e7c4a4e123
(dired-read-dir-and-switches): Move things about to use less
recursion during macroexpansion.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Tue, 13 May 2008 16:18:17 +0000 |
parents | 8a9fade74963 |
children | 6dec6afb918b |
files | lisp/ChangeLog lisp/dired.el |
diffstat | 2 files changed, 35 insertions(+), 29 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Tue May 13 08:39:54 2008 +0000 +++ b/lisp/ChangeLog Tue May 13 16:18:17 2008 +0000 @@ -1,5 +1,8 @@ 2008-05-13 Stefan Monnier <monnier@iro.umontreal.ca> + * dired.el (dired-read-dir-and-switches): Move things about to use less + recursion during macroexpansion. + * dired.el (dired-read-dir-and-switches): Use read-file-name. * dired.el (dired-read-dir-and-switches): Ignore ., .., and
--- a/lisp/dired.el Tue May 13 08:39:54 2008 +0000 +++ b/lisp/dired.el Tue May 13 16:18:17 2008 +0000 @@ -598,38 +598,41 @@ (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