Round 147: Add 20 ELP, Trace, Debugger, Edebug, ERT, Testcover commands

ober

fbf8081e8649724ad66d2767ad87da3c71486a6e

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index 7fe4832..f51b382 100644
--- a/docs/jemacs-vs-emacs.md
+++ b/docs/jemacs-vs-emacs.md
@@ -4583,6 +4583,31 @@ No remaining Tier 1 gaps. All core editing, completion, and navigation features 
 | ebib-import-file | :orange_circle: | Import file into Ebib |
 | ebib-push-citation | :orange_circle: | Push Ebib citation to buffer |
 
+### Round 147 — ELP, Trace, Debugger, Edebug, ERT, Testcover
+
+| Feature | Status | Notes |
+|---|---|---|
+| `elp-restore-all` | :orange_circle: | Restore all ELP-instrumented functions |
+| `trace-function-foreground` | :orange_circle: | Trace function in foreground |
+| `trace-function-background` | :orange_circle: | Trace function in background |
+| `cancel-edebug-on-entry` | :orange_circle: | Cancel edebug-on-entry |
+| `cancel-debug-on-variable-change` | :orange_circle: | Cancel variable watch |
+| `backtrace-toggle-locals` | :orange_circle: | Toggle locals in backtrace |
+| `debugger-step-through` | :orange_circle: | Step through in debugger |
+| `debugger-continue` | :orange_circle: | Continue execution |
+| `debugger-return-value` | :orange_circle: | Return value from frame |
+| `debugger-frame` | :orange_circle: | Show current frame |
+| `ert-run-tests-batch` | :orange_circle: | Run ERT tests in batch |
+| `ert-results-rerun-test-at-point` | :orange_circle: | Rerun test at point |
+| `testcover-start` | :orange_circle: | Start testcover instrumentation |
+| `testcover-mark-all` | :orange_circle: | Mark all uncovered forms |
+| `testcover-next-mark` | :orange_circle: | Next uncovered mark |
+| `benchmark-progn` | :orange_circle: | Benchmark expression |
+| `debug-on-message` | :orange_circle: | Break on matching message |
+| `edebug-remove-instrumentation` | :orange_circle: | Remove edebug instrumentation |
+| `edebug-next-breakpoint` | :orange_circle: | Next edebug breakpoint |
+| `edebug-step-in` | :orange_circle: | Step into function |
+
 ### Round 146 — ERC Extended, Rcirc, SX, Debbugs, Bug-hunter, Misc
 
 | Feature | Status | Notes |
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index 4e8b911..911c5d7 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -15569,3 +15569,55 @@
 (def (cmd-sx-inbox app)
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "SX: showing inbox notifications")))
+
+;; ============================================================
+;; Round 147 — ERT, Testcover, Benchmark, Edebug extended (batch 2)
+;; ============================================================
+
+(def (cmd-ert-run-tests-batch app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Test selector: "
+      (lambda (sel)
+        (echo-message! echo (str "ERT: running tests batch '" sel "'"))))))
+
+(def (cmd-testcover-start app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "File to instrument for coverage: "
+      (lambda (f)
+        (echo-message! echo (str "Testcover: instrumenting " f))))))
+
+(def (cmd-testcover-mark-all app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Testcover: marked all uncovered forms")))
+
+(def (cmd-testcover-next-mark app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Testcover: moved to next uncovered mark")))
+
+(def (cmd-benchmark-progn app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Expression to benchmark: "
+      (lambda (expr)
+        (echo-message! echo (str "Benchmark: " expr " (scaffolded)"))))))
+
+(def (cmd-ert-results-rerun-test-at-point app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "ERT: rerunning test at point")))
+
+(def (cmd-debug-on-message app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Debug on message matching: "
+      (lambda (pat)
+        (echo-message! echo (str "Debug: will break on message matching '" pat "'"))))))
+
+(def (cmd-edebug-remove-instrumentation app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Edebug: removed instrumentation from current defun")))
+
+(def (cmd-edebug-next-breakpoint app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Edebug: moved to next breakpoint")))
+
+(def (cmd-edebug-step-in app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Edebug: stepped into function")))
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index e2eeeeb..6b340ca 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -16186,3 +16186,57 @@
 (def (cmd-clm-open-command-log-buffer app)
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "Command Log: opened log buffer")))
+
+;; ============================================================
+;; Round 147 — ELP, Trace, Debugger, Edebug, ERT (batch 1)
+;; ============================================================
+
+(def (cmd-elp-restore-all app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "ELP: restored all instrumented functions")))
+
+(def (cmd-trace-function-foreground app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Function to trace (foreground): "
+      (lambda (fn)
+        (echo-message! echo (str "Tracing " fn " in foreground"))))))
+
+(def (cmd-trace-function-background app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Function to trace (background): "
+      (lambda (fn)
+        (echo-message! echo (str "Tracing " fn " in background"))))))
+
+(def (cmd-cancel-edebug-on-entry app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Cancel edebug-on-entry for: "
+      (lambda (fn)
+        (echo-message! echo (str "Cancelled edebug-on-entry for " fn))))))
+
+(def (cmd-cancel-debug-on-variable-change app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Cancel debug-on-variable-change for: "
+      (lambda (var)
+        (echo-message! echo (str "Cancelled debug-on-variable-change for " var))))))
+
+(def (cmd-backtrace-toggle-locals app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Backtrace: toggled local variables display")))
+
+(def (cmd-debugger-step-through app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Debugger: stepping through")))
+
+(def (cmd-debugger-continue app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Debugger: continuing execution")))
+
+(def (cmd-debugger-return-value app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Return value: "
+      (lambda (val)
+        (echo-message! echo (str "Debugger: returning " val))))))
+
+(def (cmd-debugger-frame app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Debugger: showing current frame")))
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index a8fa4b3..16ddeef 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -4520,4 +4520,25 @@
   (register-command! 'rcirc-track-minor-mode cmd-rcirc-track-minor-mode)
   (register-command! 'rcirc-multiline-minor-mode cmd-rcirc-multiline-minor-mode)
   (register-command! 'sx-inbox cmd-sx-inbox)
+  ;; Round 147
+  (register-command! 'elp-restore-all cmd-elp-restore-all)
+  (register-command! 'trace-function-foreground cmd-trace-function-foreground)
+  (register-command! 'trace-function-background cmd-trace-function-background)
+  (register-command! 'cancel-edebug-on-entry cmd-cancel-edebug-on-entry)
+  (register-command! 'cancel-debug-on-variable-change cmd-cancel-debug-on-variable-change)
+  (register-command! 'backtrace-toggle-locals cmd-backtrace-toggle-locals)
+  (register-command! 'debugger-step-through cmd-debugger-step-through)
+  (register-command! 'debugger-continue cmd-debugger-continue)
+  (register-command! 'debugger-return-value cmd-debugger-return-value)
+  (register-command! 'debugger-frame cmd-debugger-frame)
+  (register-command! 'ert-run-tests-batch cmd-ert-run-tests-batch)
+  (register-command! 'testcover-start cmd-testcover-start)
+  (register-command! 'testcover-mark-all cmd-testcover-mark-all)
+  (register-command! 'testcover-next-mark cmd-testcover-next-mark)
+  (register-command! 'benchmark-progn cmd-benchmark-progn)
+  (register-command! 'ert-results-rerun-test-at-point cmd-ert-results-rerun-test-at-point)
+  (register-command! 'debug-on-message cmd-debug-on-message)
+  (register-command! 'edebug-remove-instrumentation cmd-edebug-remove-instrumentation)
+  (register-command! 'edebug-next-breakpoint cmd-edebug-next-breakpoint)
+  (register-command! 'edebug-step-in cmd-edebug-step-in)
 )