- candidates directories)
- (unless (equal dir-exp (car company-files-completion-cache))
- (dolist (file (company-files-directory-files dir file))
- (setq file (concat dir file))
- (push file candidates)
- (when (file-directory-p file)
- (push file directories)))
- (dolist (directory (reverse directories))
- ;; Add one level of children.
- (dolist (child (company-files-directory-files directory ""))
- (push (concat directory
- (unless (eq (aref directory (1- (length directory))) ?/) "/")
- child) candidates)))
- (setq company-files-completion-cache (cons dir-exp (nreverse candidates))))
+ (key (list file
+ (expand-file-name dir)
+ (nth 5 (file-attributes dir))))
+ (completion-ignore-case read-file-name-completion-ignore-case))
+ (unless (company-file--keys-match-p key (car company-files--completion-cache))
+ (let* ((candidates (mapcar (lambda (f) (concat dir f))
+ (company-files--directory-files dir file)))
+ (directories (unless (file-remote-p dir)
+ (cl-remove-if-not (lambda (f)
+ (and (company-files--trailing-slash-p f)
+ (not (file-remote-p f))
+ (company-files--connected-p f)))
+ candidates)))
+ (children (and directories
+ (cl-mapcan (lambda (d)
+ (mapcar (lambda (c) (concat d c))
+ (company-files--directory-files d "")))
+ directories))))
+ (setq company-files--completion-cache
+ (cons key (append candidates children)))))