summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--elisp/geiser-connection.el25
-rw-r--r--elisp/geiser-repl.el7
2 files changed, 26 insertions, 6 deletions
diff --git a/elisp/geiser-connection.el b/elisp/geiser-connection.el
index d3c99cb..fb16aa6 100644
--- a/elisp/geiser-connection.el
+++ b/elisp/geiser-connection.el
@@ -104,6 +104,7 @@
(cons :eot (geiser-con--connection-eot-re prompt debug-prompt))
(cons :prompt prompt)
(cons :debug-prompt debug-prompt)
+ (cons :is-debugging nil)
(cons :count 0)
(cons :completed (make-hash-table :weakness 'value))))
@@ -128,6 +129,18 @@
(defsubst geiser-con--connection-debug-prompt (c)
(cdr (assoc :debug-prompt c)))
+(defsubst geiser-con--connection-is-debugging (c)
+ (cdr (assoc :is-debugging c)))
+
+(defsubst geiser-con--connection-set-debugging (c d)
+ (setcdr (assoc :is-debugging c) d))
+
+(defun geiser-con--connection-update-debugging (c txt)
+ (let* ((dp (geiser-con--connection-debug-prompt c))
+ (is-d (and (stringp dp) (string-match dp txt))))
+ (geiser-con--connection-set-debugging c is-d)
+ is-d))
+
(defsubst geiser-con--connection-completed (c r)
(geiser-con--request-deactivate r)
(puthash (geiser-con--request-id r) r (cdr (assoc :completed c))))
@@ -142,8 +155,8 @@
new))
(defun geiser-con--has-entered-debugger (con answer)
- (let ((dp (geiser-con--connection-debug-prompt con)))
- (and (stringp dp) (string-match dp answer))))
+ (and (not (geiser-con--connection-is-debugging con))
+ (geiser-con--connection-update-debugging con answer)))
(defun geiser-con--connection-close (con)
(let ((tq (geiser-con--connection-tq con)))
@@ -184,10 +197,10 @@
`((error (key . geiser-debugger))
(output . ,answer))
(condition-case err
- (let* ((start (and (string-match "((\\(?:result\\|error\\)" answer)
- (match-beginning 0)))
- (form (car (read-from-string answer start))))
- (and (listp form) form))
+ (let* ((start (string-match "((\\(?:result\\|error\\) " answer))
+ (form (or (and start (car (read-from-string answer start)))
+ `((error . retort-syntax) (output . ,answer)))))
+ form)
(error `((error (key . geiser-con-error))
(output . ,(format "%s\n(%s)"
answer
diff --git a/elisp/geiser-repl.el b/elisp/geiser-repl.el
index cbaaf24..fd274a7 100644
--- a/elisp/geiser-repl.el
+++ b/elisp/geiser-repl.el
@@ -243,6 +243,9 @@ module command as a string")
(geiser-repl--host)
(geiser-repl--port)))))
+(defun geiser-repl--update-debugging (txt)
+ (geiser-con--connection-update-debugging geiser-repl--connection txt))
+
(defun geiser-repl--start-repl (impl address)
(message "Starting Geiser REPL for %s ..." impl)
(geiser-repl--to-repl-buffer impl)
@@ -267,6 +270,10 @@ module command as a string")
(geiser-repl--startup impl address)
(geiser-repl--autodoc-mode 1)
(geiser-company--setup geiser-repl-company-p)
+ (add-hook 'comint-output-filter-functions
+ 'geiser-repl--update-debugging
+ nil
+ t)
(message "%s up and running!" (geiser-repl--repl-name impl))))
(defun geiser-repl--start-scheme (impl address prompt)