[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master a619a93 132/173: Merge pull request #465 from vspinu/files
From: |
Dmitry Gutov |
Subject: |
[elpa] master a619a93 132/173: Merge pull request #465 from vspinu/files-optim |
Date: |
Thu, 23 Jun 2016 00:28:45 +0000 (UTC) |
branch: master
commit a619a93069dab79b12d695fd4e8b043aa82d96ca
Merge: ada2ede 4f0d7a1
Author: Dmitry Gutov <address@hidden>
Commit: Dmitry Gutov <address@hidden>
Merge pull request #465 from vspinu/files-optim
[#464] Optimisation and fixes in `company-files`
---
company-files.el | 53 ++++++++++++++++++++++++++++++++---------------------
1 file changed, 32 insertions(+), 21 deletions(-)
diff --git a/company-files.el b/company-files.el
index 53730c6..c19d3d6 100644
--- a/company-files.el
+++ b/company-files.el
@@ -30,9 +30,12 @@
(defun company-files--directory-files (dir prefix)
(ignore-errors
- (if (equal prefix "")
- (directory-files dir nil "\\`[^.]\\|\\`.[^.]")
- (file-name-all-completions prefix dir))))
+ ;; Don't use directory-files. It produces directories without trailing /.
+ (let ((comp (sort (file-name-all-completions prefix dir)
+ (lambda (s1 s2) (string-lessp (downcase s1) (downcase
s2))))))
+ (if (equal prefix "")
+ (delete "../" (delete "./" comp))
+ comp))))
(defvar company-files--regexps
(let* ((root (if (eq system-type 'windows-nt)
@@ -54,37 +57,43 @@
(setq dir (file-name-directory file))
(not (string-match "//" dir))
(file-exists-p dir)
- (file-name-all-completions (file-name-nondirectory file) dir)
file)))
(defun company-files--connected-p (file)
(or (not (file-remote-p file))
(file-remote-p file nil t)))
+(defun company-files--trailing-slash-p (file)
+ ;; `file-directory-p' is very expensive on remotes. We are relying on
+ ;; `file-name-all-completions' returning directories with trailing / instead.
+ (let ((len (length file)))
+ (and (> len 0) (eq (aref file (1- len)) ?/))))
+
(defvar company-files--completion-cache nil)
(defun company-files--complete (prefix)
(let* ((dir (file-name-directory prefix))
- (key (list (file-name-nondirectory prefix)
+ (file (file-name-nondirectory prefix))
+ (key (list file
(expand-file-name dir)
(nth 5 (file-attributes dir))))
- (file (file-name-nondirectory prefix))
- (completion-ignore-case read-file-name-completion-ignore-case)
- candidates directories)
+ (completion-ignore-case read-file-name-completion-ignore-case))
(unless (company-file--keys-match-p key (car
company-files--completion-cache))
- (dolist (file (company-files--directory-files dir file))
- (setq file (concat dir file))
- (when (company-files--connected-p 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 key (nreverse candidates))))
+ (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)))))
(all-completions prefix
(cdr company-files--completion-cache))))
@@ -104,6 +113,8 @@ File paths with spaces are only supported inside strings."
(candidates (company-files--complete arg))
(location (cons (dired-noselect
(file-name-directory (directory-file-name arg))) 1))
+ (post-completion (when (company-files--trailing-slash-p arg)
+ (delete-char -1)))
(sorted t)
(no-cache t)))
- [elpa] master 7a05d1c 115/173: company-cancel: Call pre/post-completion at the end, (continued)
- [elpa] master 7a05d1c 115/173: company-cancel: Call pre/post-completion at the end, Dmitry Gutov, 2016/06/22
- [elpa] master cd69d7b 119/173: Add company-semantic-begin-after-member-access, Dmitry Gutov, 2016/06/22
- [elpa] master 724e6dd 136/173: Delete the cache when async completion aborts, Dmitry Gutov, 2016/06/22
- [elpa] master e251568 137/173: Update test for the latest change, Dmitry Gutov, 2016/06/22
- [elpa] master 7afffbc 068/173: Spell "backend" and "frontend" without hyphens, Dmitry Gutov, 2016/06/22
- [elpa] master 5565541 126/173: Option to have tempo expand tags after completion., Dmitry Gutov, 2016/06/22
- [elpa] master ec9f6c7 127/173: Moved company-tempo-insert call to post-completion, Dmitry Gutov, 2016/06/22
- [elpa] master bdf6b22 138/173: Fix #474 by filtering dabbrev completions at the end, Dmitry Gutov, 2016/06/22
- [elpa] master e65ab4c 111/173: Merge pull request #453 from jtatarik/bbdb-multiple-recipients, Dmitry Gutov, 2016/06/22
- [elpa] master 077182c 154/173: Add autoload cookies, Dmitry Gutov, 2016/06/22
- [elpa] master a619a93 132/173: Merge pull request #465 from vspinu/files-optim,
Dmitry Gutov <=
- [elpa] master e357eb6 164/173: Remove the [return] binding (#530), Dmitry Gutov, 2016/06/22
- [elpa] master b8f8777 161/173: New transformer: company-sort-prefer-same-case-prefix, Dmitry Gutov, 2016/06/22
- [elpa] master 8cc284e 162/173: Merge pull request #531 from juergenhoetzel/master, Dmitry Gutov, 2016/06/22
- [elpa] master 387b4d1 106/173: Fix "obsolete function" warning, Dmitry Gutov, 2016/06/22
- [elpa] master 0a6bfa9 108/173: company-capf: Add :company-prefix-length property function, Dmitry Gutov, 2016/06/22
- [elpa] master 1f5389b 146/173: Merge pull request #483 from stardiviner/add-julia-keywords, Dmitry Gutov, 2016/06/22
- [elpa] master 6c8763a 151/173: Fixed lighter for grouped backends, Dmitry Gutov, 2016/06/22
- [elpa] master 7d0db9e 135/173: Move company-files closer to the front of company-backends, Dmitry Gutov, 2016/06/22
- [elpa] master b001e91 099/173: Fix a test (after adding `should`), Dmitry Gutov, 2016/06/22
- [elpa] master 779de03 117/173: Merge pull request #457 from cpitclaudel/wip-simplify-electric, Dmitry Gutov, 2016/06/22