summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--elisp/geiser-completion.el5
-rw-r--r--elisp/geiser-edit.el16
-rw-r--r--scheme/guile/geiser/doc.scm13
3 files changed, 26 insertions, 8 deletions
diff --git a/elisp/geiser-completion.el b/elisp/geiser-completion.el
index 5c2f604..d346190 100644
--- a/elisp/geiser-completion.el
+++ b/elisp/geiser-completion.el
@@ -214,6 +214,11 @@ we're looking for a module name.")
(defsubst geiser-completion--symbol-begin (module)
(funcall geiser-completion--symbol-begin-function module))
+(defun geiser-completion--module-at-point ()
+ (save-excursion
+ (goto-char (geiser-completion--symbol-begin t))
+ (ignore-errors (thing-at-point 'sexp))))
+
(defsubst geiser-completion--prefix (module)
(buffer-substring-no-properties (geiser-completion--symbol-begin module)
(point)))
diff --git a/elisp/geiser-edit.el b/elisp/geiser-edit.el
index e8e439c..4d61edc 100644
--- a/elisp/geiser-edit.el
+++ b/elisp/geiser-edit.el
@@ -205,8 +205,10 @@ With prefix, asks for the symbol to edit."
(geiser-completion--read-symbol "Edit symbol: ")))
(cmd `(:eval (:ge symbol-location ',symbol)))
(marker (point-marker)))
- (geiser-edit--try-edit symbol (geiser-eval--send/wait cmd))
- (when marker (ring-insert find-tag-marker-ring marker))))
+ (condition-case nil
+ (progn (geiser-edit--try-edit symbol (geiser-eval--send/wait cmd))
+ (when marker (ring-insert find-tag-marker-ring marker)))
+ (error (geiser-edit-module-at-point)))))
(defun geiser-pop-symbol-stack ()
"Pop back to where \\[geiser-edit-symbol-at-point] was last invoked."
@@ -221,6 +223,16 @@ With prefix, asks for the symbol to edit."
(let ((cmd `(:eval (:ge module-location '(:module ,module)))))
(geiser-edit--try-edit module (geiser-eval--send/wait cmd) method)))
+
+(defun geiser-edit-module-at-point ()
+ "Opens a new window visiting the module at point."
+ (interactive)
+ (let ((marker (point-marker)))
+ (geiser-edit-module (or (geiser-completion--module-at-point)
+ (geiser-completion--read-module)))
+ (when marker (ring-insert find-tag-marker-ring marker))))
+
+
(provide 'geiser-edit)
;;; geiser-edit.el ends here
diff --git a/scheme/guile/geiser/doc.scm b/scheme/guile/geiser/doc.scm
index f5471b5..902f2a3 100644
--- a/scheme/guile/geiser/doc.scm
+++ b/scheme/guile/geiser/doc.scm
@@ -66,16 +66,17 @@
(else 'variable)))
(define (arguments proc)
- (define (p-arguments prog)
- (map (lambda (a) ((@@ (system vm program) arity->arguments-alist) prog a))
- (or (program-arities prog) '())))
+ (define (p-args prog)
+ (let ((as (map (lambda (a)
+ ((@@ (system vm program) arity->arguments-alist) prog a))
+ (or (program-arities prog) '()))))
+ (and (not (null? as)) as)))
(define (clist f) (lambda (x) (let ((y (f x))) (and y (list y)))))
(cond ((is-a? proc <generic>) (generic-args proc))
+ ((doc->args proc) => list)
((procedure-property proc 'arglist) => (clist arglist->args))
((procedure-source proc) => (clist source->args))
- ((doc->args proc) => list)
- ((program? proc) (let ((a (p-arguments proc)))
- (and (not (null? a)) a)))
+ ((and (program? proc) (p-args proc)))
((procedure-property proc 'arity) => (clist arity->args))
(else #f)))