summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Mendler <mail@daniel-mendler.de>2023-02-10 11:17:13 +0100
committerDaniel Mendler <mail@daniel-mendler.de>2023-02-10 11:17:36 +0100
commite057b02ea671b8667eb8101534740ad56f4494ee (patch)
treebae4a8bbb9aa85d8bb5ba45797dbc3dd72f0fa4e
parent56601bbccb1371ec6ab3788140a9f0440dccc914 (diff)
cape-company-to-capf: Use company-init symbol property
-rw-r--r--cape.el89
1 files changed, 45 insertions, 44 deletions
diff --git a/cape.el b/cape.el
index 4403bad..af2d36f 100644
--- a/cape.el
+++ b/cape.el
@@ -683,50 +683,51 @@ This feature is experimental."
"Convert Company BACKEND function to Capf.
VALID is the input comparator, see `cape--input-valid-p'.
This feature is experimental."
- (let ((init (make-variable-buffer-local (make-symbol "cape--company-init"))))
- (lambda ()
- (when (and (symbolp backend) (not (fboundp backend)))
- (ignore-errors (require backend nil t)))
- (unless (symbol-value init)
- (cape--company-call backend 'init)
- (set init t))
- (when-let ((prefix (cape--company-call backend 'prefix))
- (initial-input (if (stringp prefix) prefix (car-safe prefix))))
- (let* ((end (point)) (beg (- end (length initial-input)))
- (dups (cape--company-call backend 'duplicates))
- candidates)
- (list beg end
- (funcall
- (if (cape--company-call backend 'ignore-case)
- #'completion-table-case-fold
- #'identity)
- (cape--table-with-properties
- (cape--cached-table
- beg end
- (lambda (input)
- (setq candidates (cape--company-call backend 'candidates input))
- (when dups (setq candidates (delete-dups candidates)))
- candidates)
- (if (cape--company-call backend 'no-cache initial-input)
- 'never valid))
- :category backend
- :sort (not (cape--company-call backend 'sorted))))
- :exclusive 'no
- :company-prefix-length (cdr-safe prefix)
- :company-doc-buffer (lambda (x) (cape--company-call backend 'doc-buffer x))
- :company-location (lambda (x) (cape--company-call backend 'location x))
- :company-docsig (lambda (x) (cape--company-call backend 'meta x))
- :company-deprecated (lambda (x) (cape--company-call backend 'deprecated x))
- :company-kind (lambda (x) (cape--company-call backend 'kind x))
- :annotation-function (lambda (x)
- (when-let (ann (cape--company-call backend 'annotation x))
- (if (string-match-p "^[ \t]" ann)
- ann
- (concat " " ann))))
- :exit-function
- (lambda (x _status)
- (cape--company-call backend 'post-completion
- (or (car (member x candidates)) x)))))))))
+ (lambda ()
+ ;; Load backend with symbol name
+ (when (and (symbolp backend) (not (fboundp backend)))
+ (ignore-errors (require backend nil t)))
+ ;; Initialize backend with symbol name (lambdas are not initialized)
+ (when (and (symbolp backend) (not (get backend 'company-init)))
+ (funcall backend 'init)
+ (put backend 'company-init t))
+ (when-let ((prefix (cape--company-call backend 'prefix))
+ (initial-input (if (stringp prefix) prefix (car-safe prefix))))
+ (let* ((end (point)) (beg (- end (length initial-input)))
+ (dups (cape--company-call backend 'duplicates))
+ candidates)
+ (list beg end
+ (funcall
+ (if (cape--company-call backend 'ignore-case)
+ #'completion-table-case-fold
+ #'identity)
+ (cape--table-with-properties
+ (cape--cached-table
+ beg end
+ (lambda (input)
+ (setq candidates (cape--company-call backend 'candidates input))
+ (when dups (setq candidates (delete-dups candidates)))
+ candidates)
+ (if (cape--company-call backend 'no-cache initial-input)
+ 'never valid))
+ :category backend
+ :sort (not (cape--company-call backend 'sorted))))
+ :exclusive 'no
+ :company-prefix-length (cdr-safe prefix)
+ :company-doc-buffer (lambda (x) (cape--company-call backend 'doc-buffer x))
+ :company-location (lambda (x) (cape--company-call backend 'location x))
+ :company-docsig (lambda (x) (cape--company-call backend 'meta x))
+ :company-deprecated (lambda (x) (cape--company-call backend 'deprecated x))
+ :company-kind (lambda (x) (cape--company-call backend 'kind x))
+ :annotation-function (lambda (x)
+ (when-let (ann (cape--company-call backend 'annotation x))
+ (if (string-match-p "^[ \t]" ann)
+ ann
+ (concat " " ann))))
+ :exit-function
+ (lambda (x _status)
+ (cape--company-call backend 'post-completion
+ (or (car (member x candidates)) x))))))))
;;;###autoload
(defun cape-interactive (&rest capfs)