(dired-read-dir-and-switches): Move things about to use less
recursion during macroexpansion.
This commit is contained in:
parent
833e7ac3fc
commit
b575007b0a
2 changed files with 35 additions and 29 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue