summaryrefslogtreecommitdiff
path: root/elisp/geiser-debug.el
diff options
context:
space:
mode:
Diffstat (limited to 'elisp/geiser-debug.el')
-rw-r--r--elisp/geiser-debug.el26
1 files changed, 24 insertions, 2 deletions
diff --git a/elisp/geiser-debug.el b/elisp/geiser-debug.el
index f5b98a3..1953408 100644
--- a/elisp/geiser-debug.el
+++ b/elisp/geiser-debug.el
@@ -120,13 +120,16 @@ all ANSI sequences."
ret
(geiser-eval--retort-result-str ret nil)))
+(defun geiser-debug--send-dbg-and-display (thing)
+ (when-let (ret (geiser-debug--send-dbg thing))
+ (geiser-debug--debugger-display thing ret)))
+
(defun geiser-debug--send-to-repl (thing)
(unless (and geiser-debug--debugger-active-p geiser-debug--sender-buffer)
(error "Debugger not active"))
(save-window-excursion
(with-current-buffer geiser-debug--sender-buffer
- (when-let (ret (geiser-debug--send-dbg thing))
- (geiser-debug--debugger-display thing ret)))))
+ (geiser-debug--send-dbg-and-display thing))))
(defun geiser-debug-switch-to-buffer ()
"Return to the scheme buffer that pooped this debug window."
@@ -159,6 +162,24 @@ all ANSI sequences."
(interactive)
(geiser-debug--send-to-repl 'error))
+(defun geiser-debug-debugger-next ()
+ "Step to next source location."
+ (interactive)
+ (geiser-debug--send-to-repl 'next))
+
+(defun geiser-debug-set-breakpoint-loc (&optional file line)
+ "Set breakpoint at FILE and LINE, or current position if not given."
+ (interactive)
+ (let ((file (or file (buffer-file-name)))
+ (line (or line (line-number-at-pos))))
+ (geiser-debug--send-dbg-and-display `(break-at-source ,file ,line))))
+
+(defun geiser-debug-set-breakpoint-func ()
+ "Ask for a function name and set a breakpoint on entering it."
+ (interactive)
+ (let ((fn (geiser-completion--read-symbol "Set breakpoint for: ")))
+ (geiser-debug--send-dbg-and-display `(break ,fn))))
+
(transient-define-prefix geiser-debug--debugger-transient ()
"Debugging meta-commands."
[:description (lambda () (format "%s debugger" (geiser-impl--impl-str)))
@@ -169,6 +190,7 @@ all ANSI sequences."
("l" "locals" geiser-debug-debugger-locals)
("r" " registers" geiser-debug-debugger-registers)]
["Go"
+ ("n" "Step next" geiser-debug-debugger-next)
("jn" "Jump to next error" next-error)
("jp" "Jump to previous error" previous-error)
("x" "Exit debug level" geiser-debug-debugger-quit)]])