emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/geiser-guile 55c37c7 109/284: Guile: Minimal support for t


From: Philip Kaludercic
Subject: [nongnu] elpa/geiser-guile 55c37c7 109/284: Guile: Minimal support for the new REPL debug mode.
Date: Sun, 1 Aug 2021 18:29:26 -0400 (EDT)

branch: elpa/geiser-guile
commit 55c37c72c7a0c04c1ca2e1642776c673c6c6a3a7
Author: Jose Antonio Ortega Ruiz <jao@gnu.org>
Commit: Jose Antonio Ortega Ruiz <jao@gnu.org>

    Guile: Minimal support for the new REPL debug mode.
    
    We just don't hang when the REPL enters its debug mode, and salute any
    attempt at using a Geiser command with a warning (and no result).
---
 elisp/geiser-guile.el | 28 ++++++++++++++++++++++++++--
 1 file changed, 26 insertions(+), 2 deletions(-)

diff --git a/elisp/geiser-guile.el b/elisp/geiser-guile.el
index ccc048c..3008878 100644
--- a/elisp/geiser-guile.el
+++ b/elisp/geiser-guile.el
@@ -48,7 +48,9 @@ started."
 ;;; REPL support:
 
 (defun geiser-guile--binary ()
-  (if (listp geiser-guile-binary) (car geiser-guile-binary) 
geiser-guile-binary))
+  (if (listp geiser-guile-binary)
+      (car geiser-guile-binary)
+    geiser-guile-binary))
 
 (defun geiser-guile--parameters ()
   "Return a list with all parameters needed to start Guile.
@@ -63,9 +65,31 @@ This function uses `geiser-guile-init-file' if it exists."
 (defconst geiser-guile--prompt-regexp "^[^() \n]+@([^)]*?)> ")
 
 
+;;; Catching the debugger
+(make-variable-buffer-local
+ (defvar geiser-guile--is-debugging nil))
+
+(defun geiser-guile--is-debugging ()
+  (with-current-buffer (geiser-repl--get-repl geiser-impl--implementation)
+    geiser-guile--is-debugging))
+
+(defvar geiser-guile--debugger-prompt-regexp "[0-9]+ debug> *$")
+(defun geiser-guile--watch-debugger (str)
+  (setq geiser-guile--is-debugging
+        (string-match-p geiser-guile--debugger-prompt-regexp str)))
+
+(defun geiser-guile--startup ()
+  (add-hook 'comint-output-filter-functions
+            'geiser-guile--watch-debugger
+            nil
+            t))
+
+
 ;;; Evaluation support:
 
 (defun geiser-guile--geiser-procedure (proc)
+  (when (geiser-guile--is-debugging)
+    (error "(Guile REPL is in debug mode)"))
   (let ((proc (intern (format "ge:%s" (if (eq proc 'eval) 'compile proc)))))
     `(@ (geiser emacs) ,proc)))
 
@@ -145,7 +169,7 @@ This function uses `geiser-guile-init-file' if it exists."
 (define-geiser-implementation guile
   (binary geiser-guile--binary)
   (arglist geiser-guile--parameters)
-  (startup)
+  (startup geiser-guile--startup)
   (prompt-regexp geiser-guile--prompt-regexp)
   (marshall-procedure geiser-guile--geiser-procedure)
   (find-module geiser-guile--get-module)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]