diff options
-rw-r--r-- | elisp/geiser-connection.el | 6 | ||||
-rw-r--r-- | elisp/geiser-eval.el | 11 | ||||
-rw-r--r-- | elisp/geiser-mode.el | 4 |
3 files changed, 15 insertions, 6 deletions
diff --git a/elisp/geiser-connection.el b/elisp/geiser-connection.el index 87f5f7f..19cbaee 100644 --- a/elisp/geiser-connection.el +++ b/elisp/geiser-connection.el @@ -262,12 +262,14 @@ (defun geiser-con--wait (req timeout) "Wait for the given request REQ to finish, up to TIMEOUT secs, returning its result." - (let* ((con (geiser-con--request-connection req)) + (let* ((con (or (geiser-con--request-connection req) + (error "Geiser connection not active"))) + (proc (geiser-con--connection-process con)) (id (geiser-con--request-id req)) (timeout (/ (or timeout geiser-connection-timeout) 1000.0)) (step (/ timeout 10))) (with-timeout (timeout (geiser-con--request-deactivate req)) - (condition-case nil + (condition-case e (while (and (geiser-con--connection-process con) (not (geiser-con--connection-completed-p con id))) (accept-process-output proc step)) diff --git a/elisp/geiser-eval.el b/elisp/geiser-eval.el index 424d8e2..abf0b5c 100644 --- a/elisp/geiser-eval.el +++ b/elisp/geiser-eval.el @@ -1,4 +1,4 @@ -;;; geiser-eval.el -- sending scheme code for evaluation +;;; geiser-eval.el -- sending scheme code for evaluation -*- lexical-binding: t; -*- ;; Copyright (C) 2009, 2010, 2011, 2012, 2013, 2015, 2021 Jose Antonio Ortega Ruiz @@ -137,12 +137,19 @@ module-exports, autodoc, callers, callees and generic-methods.") (defsubst geiser-eval--code-str (code) (if (stringp code) code (geiser-eval--scheme-str code))) +(defvar geiser-eval--async-retort nil) (defsubst geiser-eval--send (code cont &optional buffer) + (setq geiser-eval--async-retort nil) (geiser-con--send-string (geiser-eval--connection) (geiser-eval--code-str code) - cont + (lambda (s) + (setq geiser-eval--async-retort s) + (funcall cont s)) buffer)) +(defun geiser-eval--wait (req timeout) + (or (geiser-con--wait req timeout) geiser-eval--async-retort)) + (defvar geiser-eval--sync-retort nil) (defun geiser-eval--set-sync-retort (s) (setq geiser-eval--sync-retort (geiser-eval--log s))) diff --git a/elisp/geiser-mode.el b/elisp/geiser-mode.el index 06e6655..0e61d90 100644 --- a/elisp/geiser-mode.el +++ b/elisp/geiser-mode.el @@ -95,14 +95,14 @@ result is an error msg." (push-mark) (goto-char (point-max))) -(defun geiser-eval-wait (req timeout) +(defun geiser-wait-eval (req timeout) "Use REQ, the result of computing an evaluation, to wait for its result. TIMEOUT is the number of seconds to wait for evaluation completion. Functions returning a waitable REQ are `geiser-eval-region' and its derivatives evaluating buffers or individual sexps." - (geiser-con--wait req timeout)) + (geiser-eval--wait req timeout)) (defun geiser-eval-region (start end &optional and-go raw nomsg) "Eval the current region in the Geiser REPL. |