]> code.delx.au - gnu-emacs-elpa/blobdiff - company-capf.el
Remove completions without annotations when considering duplicates
[gnu-emacs-elpa] / company-capf.el
index b630025690f498063f554fb75463d2c07fa0f678..0b88e2ba4feca032a2f7a8ba877977376159e49a 100644 (file)
@@ -1,6 +1,6 @@
-;;; company-capf.el --- company-mode completion-at-point-functions back-end -*- lexical-binding: t -*-
+;;; company-capf.el --- company-mode completion-at-point-functions backend -*- lexical-binding: t -*-
 
-;; Copyright (C) 2013-2014  Free Software Foundation, Inc.
+;; Copyright (C) 2013-2015  Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 
              (data (run-hook-wrapped 'completion-at-point-functions
                                      ;; Ignore misbehaving functions.
                                      #'completion--capf-wrapper 'optimist)))
-    (when (and (consp (cdr data)) (numberp (nth 1 data))) data)))
+    (when (and (consp (cdr data)) (integer-or-marker-p (nth 1 data))) data)))
 
 (defun company-capf (command &optional arg &rest _args)
-  "`company-mode' back-end using `completion-at-point-functions'."
+  "`company-mode' backend using `completion-at-point-functions'."
   (interactive (list 'interactive))
   (pcase command
     (`interactive (company-begin-backend 'company-capf))
     (`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)))
+            (exit-function (plist-get (nthcdr 4 res) :exit-function))
+            (table (nth 3 res))
+            (pred (plist-get (nthcdr 4 res) :predicate)))
        (if exit-function
-           (funcall exit-function arg 'finished))))
+           ;; Follow the example of `completion--done'.
+           (funcall exit-function arg
+                    (if (eq (try-completion arg table pred) t)
+                        'finished 'sole)))))
     ))
 
 (provide 'company-capf)