]> code.delx.au - gnu-emacs-elpa/blobdiff - company-files.el
Actually use cache in company-files.
[gnu-emacs-elpa] / company-files.el
index c081558dd94435759d4102f2ec1b1980fee4fe09..1fc3c5b1df90f5fb31b6f6a478f89969c6a63917 100644 (file)
@@ -2,7 +2,7 @@
 ;;
 ;; Copyright (C) 2009 Nikolaj Schumacher
 ;;
-;; This file is part of company 0.3.
+;; This file is part of company 0.4.1.
 ;;
 ;; This program is free software; you can redistribute it and/or
 ;; modify it under the terms of the GNU General Public License
         (directory-files dir nil "\\`[^.]\\|\\`.[^.]")
       (file-name-all-completions prefix dir))))
 
+(defvar company-files-regexps
+  (let ((begin (if (eq system-type 'windows-nt)
+                   "[a-z][A-Z]\\"
+                 "~?/")))
+    (list (concat "\"\\(" begin "[^\"\n]*\\)")
+          (concat "\'\\(" begin "[^\'\n]*\\)")
+          (concat "\\(?:[ \t]\\|^\\)\\(" begin "[^ \t\n]*\\)"))))
+
 (defun company-files-grab-existing-name ()
   ;; Grab file names with spaces, only when they include quotes.
-  (let ((file (or (company-grab-line "\"\\(~?/[^\"\n]*\\)" 1)
-                  (company-grab-line "\'\\(~?/[^\'\n]*\\)" 1)
-                  (company-grab-line "[ \t\n]\\(~?/[^ \t\n]*\\)" 1)))
-        dir)
-    (and file
+  (let (file dir)
+    (and (dolist (regexp company-files-regexps)
+           (when (setq file (company-grab-line regexp 1))
+             (return file)))
          (setq dir (file-name-directory file))
          (file-exists-p dir)
          (file-name-all-completions (file-name-nondirectory file) dir)
@@ -44,7 +51,6 @@
   (let* ((dir (file-name-directory prefix))
          (file (file-name-nondirectory prefix))
          candidates)
-    (setq company-files-completion-cache nil)
     (unless (equal dir (car company-files-completion-cache))
       (dolist (file (company-files-directory-files dir file))
         (setq file (concat dir file))