branch: externals/dape
commit 5fdf935f78fd40fa2e4bcc4560013a483cc3da1c
Author: Daniel Pettersson <dan...@dpettersson.net>
Commit: Daniel Pettersson <dan...@dpettersson.net>

    Add run until point command
---
 dape.el | 37 +++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/dape.el b/dape.el
index aa31e431fa..03beb515c5 100644
--- a/dape.el
+++ b/dape.el
@@ -4976,6 +4976,41 @@ Update `dape--inlay-hint-overlays' from SCOPES."
 (add-hook 'dape-active-mode-hook #'dape--inlay-hints-clean-up)
 
 
+;;; Run until point
+
+(defvar dape--until-breakpoints nil)
+
+(defun dape-until (conn)
+  "Run until point.
+CONN is inferred for interactive invocations."
+  (interactive (list (or (dape--live-connection 'stopped t)
+                         (dape--live-connection 'last))))
+  (let (;; Block to ensure breakpoints changes before continue
+        (dape--request-blocking t))
+    ;; Disable all non disabled breakpoints temporarily
+    (cl-loop for breakpoint in dape--breakpoints
+             unless (dape--breakpoint-disabled breakpoint)
+             do (dape--breakpoint-disable breakpoint 'until)
+             finally do (dape--breakpoints-update))
+    ;; Bookkeeping - store run to point breakpoint
+    (push (dape-breakpoint-toggle) dape--until-breakpoints))
+  (when (dape--stopped-threads conn)
+    (dape-continue conn)))
+
+(defun dape--until-reset ()
+  "Reset until state."
+  (cl-loop for breakpoint in dape--breakpoints
+           when (eq (dape--breakpoint-disabled breakpoint) 'until)
+           do (dape--breakpoint-disable breakpoint nil)
+           finally do (dape--breakpoints-update))
+  (cl-loop for breakpoint in dape--until-breakpoints
+           when breakpoint do (dape--breakpoint-remove breakpoint)
+           finally do (setq dape--until-breakpoints nil)))
+
+(add-hook 'dape-active-mode-hook #'dape--until-reset)
+(add-hook 'dape-stopped-hook #'dape--until-reset)
+
+
 ;;; Minibuffer config hints
 
 (defface dape-minibuffer-hint-separator-face '((t :inherit shadow
@@ -5527,6 +5562,7 @@ mouse-1: Display minor mode menu"
     (define-key map "o" #'dape-step-out)
     (define-key map "r" #'dape-restart)
     (define-key map "f" #'dape-restart-frame)
+    (define-key map "u" #'dape-until)
     (define-key map "i" #'dape-info)
     (define-key map "R" #'dape-repl)
     (define-key map "m" #'dape-memory)
@@ -5554,6 +5590,7 @@ mouse-1: Display minor mode menu"
                dape-step-out
                dape-restart
                dape-restart-frame
+               dape-until
                dape-breakpoint-log
                dape-breakpoint-expression
                dape-breakpoint-hits

Reply via email to