X-Git-Url: https://code.delx.au/gnu-emacs-elpa/blobdiff_plain/8ae29175171b6945008744b051f3f6efb82de6db..900ae0d7a2270ea1d2ea00567e80a619333fd4e5:/company-files.el diff --git a/company-files.el b/company-files.el index 5a77699da..53730c6e0 100644 --- a/company-files.el +++ b/company-files.el @@ -1,6 +1,6 @@ -;;; company-files.el --- company-mode completion back-end for file paths +;;; company-files.el --- company-mode completion backend for file paths -;; Copyright (C) 2009-2011, 2014 Free Software Foundation, Inc. +;; Copyright (C) 2009-2011, 2014-2015 Free Software Foundation, Inc. ;; Author: Nikolaj Schumacher @@ -50,26 +50,34 @@ (and (cl-dolist (regexp company-files--regexps) (when (setq file (company-grab-line regexp 1)) (cl-return file))) + (company-files--connected-p file) (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))) + (defvar company-files--completion-cache nil) (defun company-files--complete (prefix) (let* ((dir (file-name-directory prefix)) - (key (cons (expand-file-name dir) + (key (list (file-name-nondirectory prefix) + (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) - (unless (equal key (car company-files--completion-cache)) + (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)) - (push file candidates) - (when (file-directory-p file) - (push file directories))) + (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 "")) @@ -80,9 +88,13 @@ (all-completions prefix (cdr company-files--completion-cache)))) +(defun company-file--keys-match-p (new old) + (and (equal (cdr old) (cdr new)) + (string-prefix-p (car old) (car new)))) + ;;;###autoload (defun company-files (command &optional arg &rest ignored) - "`company-mode' completion back-end existing file names. + "`company-mode' completion backend existing file names. Completions works for proper absolute and relative files paths. File paths with spaces are only supported inside strings." (interactive (list 'interactive))