X-Git-Url: https://code.delx.au/gnu-emacs-elpa/blobdiff_plain/b717b0ee04ffdfd6c44c24cec77ef464fa8d4b95..2d44e7fef7e7388759518cba1a424495119679d1:/packages/company/company-files.el diff --git a/packages/company/company-files.el b/packages/company/company-files.el index 26a611e74..3dc4d867f 100644 --- a/packages/company/company-files.el +++ b/packages/company/company-files.el @@ -1,6 +1,6 @@ -;;; company-files.el --- a company-mode completion back-end for file names +;;; company-files.el --- company-mode completion back-end for file names -;; Copyright (C) 2009, 2010 Free Software Foundation, Inc. +;; Copyright (C) 2009-2011, 2013 Free Software Foundation, Inc. ;; Author: Nikolaj Schumacher @@ -19,10 +19,14 @@ ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs. If not, see . + +;;; Commentary: +;; + ;;; Code: (require 'company) -(eval-when-compile (require 'cl)) +(require 'cl-lib) (defun company-files-directory-files (dir prefix) (ignore-errors @@ -41,9 +45,9 @@ (defun company-files-grab-existing-name () ;; Grab file names with spaces, only when they include quotes. (let (file dir) - (and (dolist (regexp company-files-regexps) + (and (cl-dolist (regexp company-files-regexps) (when (setq file (company-grab-line regexp 1)) - (return file))) + (cl-return file))) (setq dir (file-name-directory file)) (not (string-match "//" dir)) (file-exists-p dir) @@ -55,30 +59,35 @@ (defun company-files-complete (prefix) (let* ((dir (file-name-directory prefix)) (file (file-name-nondirectory prefix)) - candidates) + candidates directories) (unless (equal dir (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) - ;; Add one level of children. - (dolist (child (company-files-directory-files file "")) - (push (concat file child) candidates)))) + (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 (nreverse candidates)))) - (cdr company-files-completion-cache))) + (all-completions prefix + (cdr company-files-completion-cache)))) ;;;###autoload (defun company-files (command &optional arg &rest ignored) - "a `company-mode' completion back-end existing file names." + "`company-mode' completion back-end existing file names." (interactive (list 'interactive)) - (case command - ('interactive (company-begin-backend 'company-files)) - ('prefix (company-files-grab-existing-name)) - ('candidates (company-files-complete arg)) - ('location (cons (dired-noselect - (file-name-directory (directory-file-name arg))) 1)) - ('sorted t) - ('no-cache t))) + (cl-case command + (interactive (company-begin-backend 'company-files)) + (prefix (company-files-grab-existing-name)) + (candidates (company-files-complete arg)) + (location (cons (dired-noselect + (file-name-directory (directory-file-name arg))) 1)) + (sorted t) + (no-cache t))) (provide 'company-files) ;;; company-files.el ends here