(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