summaryrefslogtreecommitdiff
path: root/elisp/geiser-capf.el
diff options
context:
space:
mode:
authorjao <jao@gnu.org>2022-10-13 02:44:59 +0100
committerjao <jao@gnu.org>2022-10-13 02:44:59 +0100
commit727d2dfe988943c277804d87ac9cd40f2ddc65e0 (patch)
tree3ff4c73784c03f6b096ffc57a5e15e94e5f2a6b8 /elisp/geiser-capf.el
parenta9b17f08a0c40d2b2ac5d3d130a8b40f5890ccfa (diff)
downloadgeiser-727d2dfe988943c277804d87ac9cd40f2ddc65e0.tar.gz
geiser-727d2dfe988943c277804d87ac9cd40f2ddc65e0.tar.bz2
autodoc: correctly display docsigs for in-region completions (#56)
we were doing it really wrong: first, by not setting the evaluation environment when things are computed outside the original buffer (the completion in region case for consult and the likes, where the current buffer is the minibuffer) and, to add insult to injury, by not waiting for a response from the scheme side! actually waiting can make things a tad laggy when the scheme is not as fast as, say, chez and there are lots of completions (if one uses completion-in-region; for pop ups like company it's fine), so i've also added a flag, geiser-autodoc-use-docsig, to turn the functionality off.
Diffstat (limited to 'elisp/geiser-capf.el')
-rw-r--r--elisp/geiser-capf.el46
1 files changed, 27 insertions, 19 deletions
diff --git a/elisp/geiser-capf.el b/elisp/geiser-capf.el
index 1372f8a..e2b80ea 100644
--- a/elisp/geiser-capf.el
+++ b/elisp/geiser-capf.el
@@ -18,31 +18,38 @@
(require 'geiser-completion)
(require 'geiser-edit)
+(defvar geiser-capf--buffer nil)
+
(defun geiser-capf--company-docsig (id)
(ignore-errors
- (when (not (geiser-autodoc--inhibit))
- (let ((help (geiser-autodoc--autodoc `((,id 0)) nil)))
- (and help (substring-no-properties help))))))
+ (when (and geiser-capf--buffer (not (geiser-autodoc--inhibit)))
+ (with-current-buffer geiser-capf--buffer
+ (let* ((id (substring-no-properties id))
+ (help (geiser-autodoc--autodoc `((,id 0) (,id 0)) nil)))
+ (and help (substring-no-properties help)))))))
(defun geiser-capf--company-doc-buffer (id)
- (let* ((impl geiser-impl--implementation)
- (module (geiser-eval--get-module))
- (symbol (make-symbol id))
- (ds (geiser-doc--get-docstring symbol module)))
- (when (consp ds)
- (with-current-buffer (get-buffer-create "*company-documentation*")
- (geiser-doc--render-docstring ds symbol module impl)
- (current-buffer)))))
+ (when geiser-capf--buffer
+ (with-current-buffer geiser-capf--buffer
+ (let* ((module (geiser-eval--get-module))
+ (symbol (make-symbol id))
+ (ds (geiser-doc--get-docstring symbol module)))
+ (when (consp ds)
+ (with-current-buffer (get-buffer-create "*company-documentation*")
+ (geiser-doc--render-docstring ds symbol module)
+ (current-buffer)))))))
(defun geiser-capf--company-location (id)
(ignore-errors
- (when (not (geiser-autodoc--inhibit))
- (let ((id (make-symbol id)))
- (condition-case nil
- (geiser-edit-module id 'noselect)
- (error (geiser-edit-symbol id 'noselect)))))))
-
-(defun geiser-capf--thing-at-point (module &optional predicate)
+ (when (and geiser-capf--buffer (not (geiser-autodoc--inhibit)))
+ (with-current-buffer geiser-capf--buffer
+ (let ((id (make-symbol id)))
+ (condition-case nil
+ (geiser-edit-module id 'noselect)
+ (error (geiser-edit-symbol id 'noselect))))))))
+
+(defun geiser-capf--thing-at-point (module &optional _predicate)
+ (setq geiser-capf--buffer (current-buffer))
(with-syntax-table scheme-mode-syntax-table
(let* ((beg (geiser-completion--symbol-begin module))
(end (or (geiser-completion--prefix-end beg module) beg))
@@ -54,7 +61,8 @@
(cmps (and prefix (geiser-completion--complete prefix module))))
(when cmps
(list beg end cmps
- :company-docsig #'geiser-capf--company-docsig
+ :company-docsig
+ (and geiser-autodoc-use-docsig #'geiser-capf--company-docsig)
:company-doc-buffer #'geiser-capf--company-doc-buffer
:company-location #'geiser-capf--company-location)))))