From 1331b718431597d4dcf2bf432ec642b456fe408b Mon Sep 17 00:00:00 2001 From: Dmitry Gutov Date: Thu, 9 May 2013 23:14:31 +0400 Subject: [PATCH] Move company-capf to a separate file --- company-capf.el | 80 +++++++++++++++++++++++++++++++++++++++++++++++++ company.el | 51 +------------------------------ 2 files changed, 81 insertions(+), 50 deletions(-) create mode 100644 company-capf.el diff --git a/company-capf.el b/company-capf.el new file mode 100644 index 000000000..455e9923f --- /dev/null +++ b/company-capf.el @@ -0,0 +1,80 @@ +;;; company-capf.el --- company-mode completion-at-point-functions back-end -*- lexical-binding: t -*- + +;; Copyright (C) 2013 Free Software Foundation, Inc. + +;; Author: Stefan Monnier + +;; This file is part of GNU Emacs. + +;; GNU Emacs is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs. If not, see . + + +;;; Commentary: +;; + +;;; Code: + +(defun company--capf-data () + (let ((data (run-hook-wrapped 'completion-at-point-functions + ;; Ignore misbehaving functions. + #'completion--capf-wrapper 'optimist))) + (when (consp data) data))) + +(defun company-capf (command &optional arg &rest _args) + "`company-mode' back-end using `completion-at-point-functions'. +Requires Emacs 24.1 or newer." + (interactive (list 'interactive)) + (case command + (interactive (company-begin-backend 'company-capf)) + (prefix + (let ((res (company--capf-data))) + (when res + (if (> (nth 2 res) (point)) + 'stop + (buffer-substring-no-properties (nth 1 res) (point)))))) + (candidates + (let ((res (company--capf-data))) + (when res + (let* ((table (nth 3 res)) + (pred (plist-get (nthcdr 4 res) :predicate)) + (meta (completion-metadata + (buffer-substring (nth 1 res) (nth 2 res)) + table pred)) + (sortfun (cdr (assq 'display-sort-function meta))) + (candidates (all-completions arg table pred))) + (if sortfun (funcall sortfun candidates) candidates))))) + (sorted + (let ((res (company--capf-data))) + (when res + (let ((meta (completion-metadata + (buffer-substring (nth 1 res) (nth 2 res)) + (nth 3 res) (plist-get (nthcdr 4 res) :predicate)))) + (cdr (assq 'display-sort-function meta)))))) + (duplicates nil) ;Don't bother. + (no-cache t) ;FIXME: Improve! + (meta nil) ;FIXME: Return one-line docstring for `arg'. + (doc-buffer nil) ;FIXME: Return help buffer for `arg'. + (location nil) ;FIXME: Return (BUF . POS) or (FILE . LINENB) of `arg'. + (require-match nil) ;This should be a property of the front-end! + (init nil) ;Don't bother: plenty of other ways to initialize the code. + (post-completion + (let* ((res (company--capf-data)) + (exit-function (plist-get (nthcdr 4 res) :exit-function))) + (if exit-function + (funcall exit-function arg 'finished)))) + )) + +(provide 'company-capf) + +;;; company-capf.el ends here diff --git a/company.el b/company.el index 2bd611455..4328924c3 100644 --- a/company.el +++ b/company.el @@ -213,6 +213,7 @@ If this many lines are not available, prefer to display the tooltip above." (defvar company-safe-backends '((company-abbrev . "Abbrev") + (company-capf . "completion-at-point-functions") (company-clang . "Clang") (company-css . "CSS") (company-dabbrev . "dabbrev for plain text") @@ -241,56 +242,6 @@ If this many lines are not available, prefer to display the tooltip above." (assq backend company-safe-backends)) (return t)))))) -(defun company--capf-data () - (let ((data (run-hook-wrapped 'completion-at-point-functions - ;; Ignore misbehaving functions. - #'completion--capf-wrapper 'optimist))) - (when (consp data) data))) - -(defun company-capf (command &optional arg &rest _args) - "`company-mode' back-end using `completion-at-point-functions'. -Requires Emacs 24.1 or newer." - (interactive (list 'interactive)) - (case command - (interactive (company-begin-backend 'company-capf)) - (prefix - (let ((res (company--capf-data))) - (when res - (if (> (nth 2 res) (point)) - 'stop - (buffer-substring-no-properties (nth 1 res) (point)))))) - (candidates - (let ((res (company--capf-data))) - (when res - (let* ((table (nth 3 res)) - (pred (plist-get (nthcdr 4 res) :predicate)) - (meta (completion-metadata - (buffer-substring (nth 1 res) (nth 2 res)) - table pred)) - (sortfun (cdr (assq 'display-sort-function meta))) - (candidates (all-completions arg table pred))) - (if sortfun (funcall sortfun candidates) candidates))))) - (sorted - (let ((res (company--capf-data))) - (when res - (let ((meta (completion-metadata - (buffer-substring (nth 1 res) (nth 2 res)) - (nth 3 res) (plist-get (nthcdr 4 res) :predicate)))) - (cdr (assq 'display-sort-function meta)))))) - (duplicates nil) ;Don't bother. - (no-cache t) ;FIXME: Improve! - (meta nil) ;FIXME: Return one-line docstring for `arg'. - (doc-buffer nil) ;FIXME: Return help buffer for `arg'. - (location nil) ;FIXME: Return (BUF . POS) or (FILE . LINENB) of `arg'. - (require-match nil) ;This should be a property of the front-end! - (init nil) ;Don't bother: plenty of other ways to initialize the code. - (post-completion - (let* ((res (company--capf-data)) - (exit-function (plist-get (nthcdr 4 res) :exit-function))) - (if exit-function - (funcall exit-function arg 'finished)))) - )) - (defcustom company-backends '(company-elisp company-nxml company-css company-semantic company-clang company-eclim company-xcode company-ropemacs -- 2.39.2