summaryrefslogtreecommitdiff
path: root/elisp
diff options
context:
space:
mode:
authorJose Antonio Ortega Ruiz <jao@gnu.org>2009-02-13 00:54:26 +0100
committerJose Antonio Ortega Ruiz <jao@gnu.org>2009-02-13 00:54:26 +0100
commit1369b62d71e06735a3e4d2b8349cfffe6de12a6c (patch)
tree95a94341a018972758ccf602bdbc961daea5707a /elisp
parent432e405274205c91784456449f344044c8d62e48 (diff)
downloadgeiser-guile-1369b62d71e06735a3e4d2b8349cfffe6de12a6c.tar.gz
geiser-guile-1369b62d71e06735a3e4d2b8349cfffe6de12a6c.tar.bz2
Faster, asynchronous autodoc.
Diffstat (limited to 'elisp')
-rw-r--r--elisp/geiser-autodoc.el38
1 files changed, 24 insertions, 14 deletions
diff --git a/elisp/geiser-autodoc.el b/elisp/geiser-autodoc.el
index f5db63b..9c3c40b 100644
--- a/elisp/geiser-autodoc.el
+++ b/elisp/geiser-autodoc.el
@@ -67,13 +67,29 @@ when `geiser-autodoc-display-module-p' is on."
(make-variable-buffer-local
(defvar geiser-autodoc--last nil))
-(defun geiser-autodoc--function-args (fun)
- (if (eq fun (car geiser-autodoc--last))
- (cdr geiser-autodoc--last)
- (let ((result (geiser-eval--send/result `(:gs ((:ge proc-args) ',fun)))))
- (when (not (listp result)) (setq result 'undefined))
- (setq geiser-autodoc--last (cons fun result))
- result)))
+(make-variable-buffer-local
+ (defvar geiser-autodoc--last-funs nil))
+
+(defun geiser-autodoc--function-args (funs)
+ (let ((pr (and (eq (car geiser-autodoc--last) (caar funs)) (car funs))))
+ (if pr (geiser-autodoc--fun-args-str (car pr)
+ (cdr geiser-autodoc--last)
+ (cdr pr))
+ (setq geiser-autodoc--last-funs funs)
+ (geiser-eval--send `(:gs ((:ge arguments) ,@(mapcar (lambda (f) (list 'quote (car f)))
+ funs)))
+ 'geiser-autodoc--function-args-cont)
+ nil)))
+
+(defun geiser-autodoc--function-args-cont (ret)
+ (let ((result (geiser-eval--retort-result ret)))
+ (when (listp result)
+ (setq geiser-autodoc--last result)
+ (eldoc-message
+ (geiser-autodoc--fun-args-str (car result)
+ (cdr result)
+ (or (cdr (assoc (car result)
+ geiser-autodoc--last-funs))))))))
(defun geiser-autodoc--insert (sym current pos)
(let ((str (format "%s" sym)))
@@ -111,13 +127,7 @@ when `geiser-autodoc-display-module-p' is on."
;;; Autodoc function:
(defun geiser-autodoc--eldoc-function ()
- (let ((data (geiser-syntax--enclosing-form-data)))
- (catch 'doc-msg
- (dolist (f/a data)
- (let ((args (geiser-autodoc--function-args (car f/a))))
- (when (listp args)
- (throw 'doc-msg
- (geiser-autodoc--fun-args-str (car f/a) args (cdr f/a)))))))))
+ (geiser-autodoc--function-args (geiser-syntax--enclosing-form-data)))
;;; Autodoc mode: