diff options
-rw-r--r-- | elisp/geiser-chicken.el | 5 | ||||
-rw-r--r-- | elisp/geiser-connection.el | 2 | ||||
-rw-r--r-- | scheme/chicken/geiser/emacs.scm | 37 |
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) |