diff options
-rw-r--r-- | elisp/geiser-doc.el | 11 | ||||
-rw-r--r-- | elisp/geiser-impl.el | 20 | ||||
-rw-r--r-- | elisp/geiser-repl.el | 8 |
3 files changed, 25 insertions, 14 deletions
diff --git a/elisp/geiser-doc.el b/elisp/geiser-doc.el index 1bf9725..34ed832 100644 --- a/elisp/geiser-doc.el +++ b/elisp/geiser-doc.el @@ -189,13 +189,14 @@ With prefix argument, ask for symbol (with completion)." (when symbol (geiser-doc-symbol symbol)))) -(defun geiser-doc-module (module &optional impl) +(defun geiser-doc-module (&optional module impl) "Display information about a given module." - (interactive (list (geiser-completion--read-module))) - (let ((children (geiser-doc--get-module-children module)) - (impl (or impl geiser-impl--implementation))) + (interactive) + (let* ((module (geiser-completion--read-module)) + (children (geiser-doc--get-module-children module)) + (impl (or impl geiser-impl--implementation))) (if (not children) - (message "No info available for %s" module) + (message "No information available for %s" module) (geiser-doc--with-buffer (erase-buffer) (geiser-doc--insert-title (format "%s" module)) diff --git a/elisp/geiser-impl.el b/elisp/geiser-impl.el index b50f7be..4f70b29 100644 --- a/elisp/geiser-impl.el +++ b/elisp/geiser-impl.el @@ -100,21 +100,25 @@ (when (geiser-impl--fboundp imp name) (apply (geiser-impl--value imp name t) args))) -(defun geiser-impl--install-eval (imp) - (setq geiser-eval--get-module-function - (geiser-impl--sym imp "get-module") - geiser-eval--geiser-procedure-function - (geiser-impl--sym imp "geiser-procedure"))) +(defsubst geiser-impl--module-function (impl) + (geiser-impl--sym impl "get-module")) + +(defsubst geiser-impl--geiser-procedure-function (impl) + (geiser-impl--sym imp "geiser-procedure")) + +(defun geiser-impl--install-eval (impl) + (setq geiser-eval--get-module-function (geiser-impl--module-function impl)) + (setq geiser-eval--geiser-procedure-function + (geiser-impl--geiser-procedure-function impl))) ;;; Evaluating Elisp in a given implementation context: (defun with--geiser-implementation (imp thunk) (let ((geiser-impl--implementation imp) - (geiser-eval--get-module-function - (geiser-impl--sym imp "get-module")) + (geiser-eval--get-module-function (geiser-impl--module-function imp)) (geiser-eval--geiser-procedure-function - (geiser-impl--sym imp "geiser-procedure"))) + (geiser-impl--geiser-procedure-function imp))) (funcall thunk))) (put 'with--geiser-implementation 'lisp-indent-function 1) diff --git a/elisp/geiser-repl.el b/elisp/geiser-repl.el index 10a91a4..c362787 100644 --- a/elisp/geiser-repl.el +++ b/elisp/geiser-repl.el @@ -248,6 +248,12 @@ If no REPL is running, execute `run-geiser' to start a fresh one." (defun geiser-repl--module-function (&optional ignore) :f) +(defun geiser-repl--doc-module () + (interactive) + (let ((geiser-eval--get-module-function + (geiser-impl--module-function geiser-impl--implementation))) + (geiser-doc-module))) + (define-derived-mode geiser-repl-mode comint-mode "Geiser REPL" "Major mode for interacting with an inferior scheme repl process. \\{geiser-repl-mode-map}" @@ -265,7 +271,7 @@ If no REPL is running, execute `run-geiser' to start a fresh one." (define-key geiser-repl-mode-map "\C-a" 'geiser-repl--bol) (define-key geiser-repl-mode-map "\C-ca" 'geiser-autodoc-mode) (define-key geiser-repl-mode-map "\C-cd" 'geiser-doc-symbol-at-point) -(define-key geiser-repl-mode-map "\C-cm" 'geiser-doc-module) +(define-key geiser-repl-mode-map "\C-cm" 'geiser-repl--doc-module) (define-key geiser-repl-mode-map "\C-ck" 'geiser-compile-file) (define-key geiser-repl-mode-map "\C-cl" 'geiser-load-file) |