From 55c37c72c7a0c04c1ca2e1642776c673c6c6a3a7 Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Tue, 26 Jan 2010 18:08:39 +0100 Subject: 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(-) (limited to 'elisp') 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. @@ -62,10 +64,32 @@ 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) -- cgit v1.2.3