emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] master 373c078 2/8: company-capf: Use exit-function that came wit


From: Dmitry Gutov
Subject: [elpa] master 373c078 2/8: company-capf: Use exit-function that came with the completion table in use
Date: Sat, 8 Dec 2018 19:13:04 -0500 (EST)

branch: master
commit 373c0789070017446c8b0b1dc115c154bfbdac53
Author: João Távora <address@hidden>
Commit: Dmitry Gutov <address@hidden>

    company-capf: Use exit-function that came with the completion table in use
    
    Before, capf-data was fetched again after the completion is inserted,
    which caused problems when exit-function is a closure that references
    some data dependent on the current buffer contents.
    
    * company-capf.el (company-capf--current-completion-data): New variable.
    (company-capf): Set it in `candidates'.
    (company--capf-post-completion): Use it.
    
    Closes #845.
---
 company-capf.el | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/company-capf.el b/company-capf.el
index faac44c..9b353a7 100644
--- a/company-capf.el
+++ b/company-capf.el
@@ -34,6 +34,9 @@
 
 (defvar company--capf-cache nil)
 
+(defvar company-capf--current-completion-data nil
+  "Value last returned by `company-capf' when called with `candidates'.")
+
 (defun company--capf-data ()
   (let ((cache company--capf-cache))
     (if (and (equal (current-buffer) (car cache))
@@ -84,6 +87,7 @@
             (t prefix))))))
     (`candidates
      (let ((res (company--capf-data)))
+       (setq company-capf--current-completion-data res)
        (when res
          (let* ((table (nth 3 res))
                 (pred (plist-get (nthcdr 4 res) :predicate))
@@ -157,7 +161,11 @@
     ))
 
 (defun company--capf-post-completion (arg)
-  (let* ((res (company--capf-data))
+  ;; FIXME: Note the access to `company-capf--current-completion-data' and not
+  ;; `company--capf-data'.  It should happen to contain just the data we need,
+  ;; which includes the `:exit-function' that we got when we received the
+  ;; original completion table, not the one we get when we re-call capf.
+  (let* ((res company-capf--current-completion-data)
          (exit-function (plist-get (nthcdr 4 res) :exit-function))
          (table (nth 3 res))
          (pred (plist-get (nthcdr 4 res) :predicate)))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]