summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--elisp/geiser-chicken.el5
-rw-r--r--elisp/geiser-connection.el2
-rw-r--r--scheme/chicken/geiser/emacs.scm37
3 files changed, 25 insertions, 19 deletions
diff --git a/elisp/geiser-chicken.el b/elisp/geiser-chicken.el
index a68ab7b..88d60cf 100644
--- a/elisp/geiser-chicken.el
+++ b/elisp/geiser-chicken.el
@@ -143,8 +143,9 @@ This function uses `geiser-chicken-init-file' if it exists."
(defun geiser-chicken--geiser-procedure (proc &rest args)
(case proc
((eval compile)
- (let ((form (mapconcat 'identity (cdr args) " ")))
- (format "(geiser-eval %s '%s)" (or (car args) "#f") form)))
+ (let ((form (mapconcat 'identity (cdr args) " "))
+ (module (if (car args) (concat "'" (car args)) "#f")))
+ (format "(geiser-eval %s '%s)" module form)))
((load-file compile-file)
(format "(geiser-load-file %s)" (car args)))
((no-values)
diff --git a/elisp/geiser-connection.el b/elisp/geiser-connection.el
index e466cd3..8a3de31 100644
--- a/elisp/geiser-connection.el
+++ b/elisp/geiser-connection.el
@@ -202,7 +202,7 @@
`((error (key . geiser-debugger))
(output . ,answer))
(condition-case err
- (let ((start (string-match "((\\(?:result)?\\|error\\) " answer)))
+ (let ((start (string-match "((\\(?:result)?\\|error\\|Error\\) " answer)))
(or (and start (car (read-from-string answer start)))
`((error (key . retort-syntax)) (output . ,answer))))
(error `((error (key . geiser-con-error))
diff --git a/scheme/chicken/geiser/emacs.scm b/scheme/chicken/geiser/emacs.scm
index 401eb90..f31bba9 100644
--- a/scheme/chicken/geiser/emacs.scm
+++ b/scheme/chicken/geiser/emacs.scm
@@ -432,21 +432,20 @@
;; Builds a signature list from an identifier
(define (find-signatures sym)
- (let ((str (->string sym)))
+ (map
+ (cut fmt sym <>)
+ (filter
+ (lambda (v)
+ (eq? (car v) sym))
(map
- (cut fmt sym <>)
- (filter
- (lambda (v)
- (eq? (car v) sym))
- (map
- (lambda (s)
- ;; Remove egg name and add module
- (let-values
- (((name module) (remove-internal-name-mangling (car s))))
- (cons (string->symbol name)
- (cons (if (string? module) (string->symbol module) module)
- (cdr s)))))
- (apropos-information-list sym #:macros? #t))))))
+ (lambda (s)
+ ;; Remove egg name and add module
+ (let-values
+ (((name module) (remove-internal-name-mangling (car s))))
+ (cons (string->symbol name)
+ (cons (if (string? module) (string->symbol module) module)
+ (cdr s)))))
+ (apropos-information-list sym #:macros? #t)))))
;; Builds the documentation from Chicken Doc for a specific symbol
(define (make-doc symbol #!optional (filter-for-type #f))
@@ -482,14 +481,18 @@
geiser-module-exports geiser-module-path geiser-module-location
geiser-module-completions geiser-use-debug-log)))
- (when (and module
- (not (symbol? module)))
+ (define (form-has-any-geiser? form)
+ (string-has-prefix? (->string (car form)) "geiser-"))
+
+ (when (and module (not (symbol? module)))
(error "Module should be a symbol"))
;; All calls start at toplevel
(let* ((is-module? (form-has-module? form))
+ (is-geiser? (form-has-any-geiser? form))
(is-safe-geiser? (form-has-safe-geiser? form))
(host-module (and (not is-module?)
+ (not is-geiser?)
(any (cut equal? module <>) (list-modules))
module))
(thunk (lambda () (eval form))))
@@ -567,6 +570,8 @@
((null? ids) '())
((not (list? ids))
(geiser-autodoc (list ids)))
+ ((not (symbol? (car ids)))
+ (geiser-autodoc (cdr ids)))
(else
(let ((details (find-signatures (car ids))))
(if (null? details)