diff options
| -rw-r--r-- | elisp/geiser-connection.el | 24 | ||||
| -rw-r--r-- | elisp/geiser-repl.el | 14 | 
2 files changed, 33 insertions, 5 deletions
| diff --git a/elisp/geiser-connection.el b/elisp/geiser-connection.el index 577ca97..dfdb21d 100644 --- a/elisp/geiser-connection.el +++ b/elisp/geiser-connection.el @@ -126,8 +126,15 @@  (make-variable-buffer-local   (defvar geiser-con--debugging-prompt-regexp nil)) +(make-variable-buffer-local + (defvar geiser-con--debugging-inhibits-eval t)) + +(make-variable-buffer-local + (defvar geiser-con--debugging-preamble-regexp nil)) +  (defun geiser-con--is-debugging ()    (and geiser-con--debugging-prompt-regexp +       geiser-con--debugging-inhibits-eval         comint-last-prompt-overlay         (string-match-p geiser-con--debugging-prompt-regexp                         (buffer-substring (overlay-start @@ -135,16 +142,25 @@                                           (overlay-end                                            comint-last-prompt-overlay))))) +(defsubst geiser-con--has-entered-debugger () +  (and geiser-con--debugging-prompt-regexp +       (re-search-backward geiser-con--debugging-prompt-regexp nil t) +       (or (null geiser-con--debugging-preamble-regexp) +           (save-excursion +             (re-search-backward geiser-con--debugging-preamble-regexp nil t))))) +  (defun geiser-con--cleanup-connection (c)    (geiser-con--connection-cancel-timer c))  (defun geiser-con--setup-connection (buffer                                       prompt-regexp -                                     &optional debug-prompt-regexp) +                                     &optional debug-prompt-regexp +                                     debug-preamble-regexp)    (with-current-buffer buffer      (when geiser-con--connection        (geiser-con--cleanup-connection geiser-con--connection))      (setq geiser-con--debugging-prompt-regexp debug-prompt-regexp) +    (setq geiser-con--debugging-preamble-regexp debug-preamble-regexp)      (setq geiser-con--connection (geiser-con--make-connection buffer))      (geiser-con--setup-comint prompt-regexp debug-prompt-regexp)      (geiser-con--connection-start-timer geiser-con--connection) @@ -169,8 +185,7 @@  (defun geiser-con--comint-buffer-form ()    (with-current-buffer (geiser-con--comint-buffer)      (goto-char (point-max)) -    (if (and geiser-con--debugging-prompt-regexp -             (re-search-backward geiser-con--debugging-prompt-regexp nil t)) +    (if (geiser-con--has-entered-debugger)          `((error (key . geiser-debugger))            (output . ,(buffer-substring (point-min) (point))))        (condition-case nil @@ -188,6 +203,8 @@      (let* ((buffer (geiser-con--connection-buffer con))             (debug-prompt (with-current-buffer buffer                             geiser-con--debugging-prompt-regexp)) +           (debug-preamble (with-current-buffer buffer +                             geiser-con--debugging-preamble-regexp))             (req (geiser-con--connection-pop-request con))             (str (and req (geiser-con--request-string req)))             (cbuf (geiser-con--comint-buffer))) @@ -197,6 +214,7 @@            (with-current-buffer cbuf              (setq comint-redirect-echo-input nil)              (setq geiser-con--debugging-prompt-regexp debug-prompt) +            (setq geiser-con--debugging-preamble-regexp debug-preamble)              (delete-region (point-min) (point-max)))            (set-buffer buffer)            (if (geiser-con--is-debugging) diff --git a/elisp/geiser-repl.el b/elisp/geiser-repl.el index f1da27f..694f21b 100644 --- a/elisp/geiser-repl.el +++ b/elisp/geiser-repl.el @@ -149,6 +149,11 @@ expression for this implementation's scheme prompt.")    "A variable (or thunk returning a value) giving the regular  expression for this implementation's debugging prompt.") +(geiser-impl--define-caller +    geiser-repl--debugger-preamble-regexp debugger-preamble-regexp () +  "A variable (or thunk returning a value) used to determine whether +the REPL has entered debugging mode.") +  (geiser-impl--define-caller geiser-repl--startup startup ()    "Function taking no parameters that is called after the REPL  has been initialised. All Geiser functionality is available to @@ -161,6 +166,7 @@ you at that point.")          (args (geiser-repl--arglist impl))          (prompt-rx (geiser-repl--prompt-regexp impl))          (deb-prompt-rx (geiser-repl--debugger-prompt-regexp impl)) +        (deb-preamble-rx (geiser-repl--debugger-preamble-regexp impl))          (cname (geiser-repl--repl-name impl)))      (unless (and binary prompt-rx)        (error "Sorry, I don't know how to start a REPL for %s" impl)) @@ -169,7 +175,10 @@ you at that point.")             `(,cname ,(current-buffer) ,binary nil ,@args))      (geiser-repl--wait-for-prompt 10000)      (geiser-repl--history-setup) -    (geiser-con--setup-connection (current-buffer) prompt-rx deb-prompt-rx) +    (geiser-con--setup-connection (current-buffer) +                                  prompt-rx +                                  deb-prompt-rx +                                  deb-preamble-rx)      (add-to-list 'geiser-repl--repls (current-buffer))      (geiser-repl--set-this-buffer-repl (current-buffer))      (geiser-repl--startup impl))) @@ -279,7 +288,8 @@ module command as a string")    (comint-redirect-cleanup)    (geiser-con--setup-connection (current-buffer)                                  comint-prompt-regexp -                                geiser-con--debugging-prompt-regexp)) +                                geiser-con--debugging-prompt-regexp +                                geiser-con--debugging-preamble-regexp))  ;;; REPL history and clean-up: | 
