Round 172: Helpful, Elisp-refs, Macrostep, Inspector commands

ober

904d56e9ff3b13c5e2b7f59e793cf04b83cfe7dc

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index b447af7..1e9bdd3 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 172 — Helpful, Elisp-refs, Macrostep, Inspector
+
+| Feature | Status | Notes |
+|---|---|---|
+| helpful-callable | :orange_circle: | Show help for callable symbol |
+| helpful-key | :orange_circle: | Show help for key binding |
+| helpful-variable | :orange_circle: | Show help for variable |
+| helpful-update | :orange_circle: | Update helpful buffer |
+| helpful-visit-reference | :orange_circle: | Visit reference at point |
+| elisp-refs-special | :orange_circle: | Find references to special form |
+| elisp-refs-read | :orange_circle: | Find read references to symbol |
+| elisp-refs-widget | :orange_circle: | Find widget references |
+| macrostep-collapse | :orange_circle: | Collapse macro expansion |
+| macrostep-prev-macro | :orange_circle: | Move to previous macro |
+| macrostep-next-macro | :orange_circle: | Move to next macro |
+| macrostep-mode | :orange_circle: | Toggle macrostep mode |
+| macrostep-environment | :orange_circle: | Show expansion environment |
+| inspector-inspect | :orange_circle: | Inspect an object |
+| inspector-pop | :orange_circle: | Pop to previous inspected object |
+| inspector-quit | :orange_circle: | Quit inspector |
+| inspector-next-reference | :orange_circle: | Move to next reference |
+| inspector-inspect-expression | :orange_circle: | Inspect arbitrary expression |
+| inspector-inspect-last-sexp | :orange_circle: | Inspect last sexp |
+| inspector-copy-down | :orange_circle: | Copy inspected object down |
+
 ### Round 171 — Selectrum, Icomplete-ext, Mct, Ivy-posframe
 
 | Feature | Status | Notes |
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index 6b761d2..6da9bd8 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -16824,3 +16824,51 @@
     (if (mode-enabled? app 'all-the-icons-ivy-rich)
       (echo-message! echo "All-the-icons-ivy-rich mode enabled")
       (echo-message! echo "All-the-icons-ivy-rich mode disabled"))))
+
+;; Round 172 — Helpful, Elisp-refs, Macrostep, Inspector (batch 2)
+(def (cmd-macrostep-next-macro app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Macrostep: moved to next macro")))
+
+(def (cmd-macrostep-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'macrostep)
+    (if (mode-enabled? app 'macrostep)
+      (echo-message! echo "Macrostep mode enabled")
+      (echo-message! echo "Macrostep mode disabled"))))
+
+(def (cmd-macrostep-environment app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Macrostep: showing expansion environment")))
+
+(def (cmd-inspector-inspect app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Inspect: "
+      (lambda (expr)
+        (echo-message! echo (str "Inspector: inspecting " expr))))))
+
+(def (cmd-inspector-pop app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Inspector: popped to previous object")))
+
+(def (cmd-inspector-quit app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Inspector: closed")))
+
+(def (cmd-inspector-next-reference app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Inspector: moved to next reference")))
+
+(def (cmd-inspector-inspect-expression app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Expression: "
+      (lambda (expr)
+        (echo-message! echo (str "Inspector: inspecting expression " expr))))))
+
+(def (cmd-inspector-inspect-last-sexp app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Inspector: inspecting last sexp")))
+
+(def (cmd-inspector-copy-down app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Inspector: copied object down")))
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index 1918fbb..05e1b2e 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -17441,3 +17441,56 @@
     (if (mode-enabled? app 'mct-region)
       (echo-message! echo "Mct region mode enabled")
       (echo-message! echo "Mct region mode disabled"))))
+
+;; Round 172 — Helpful, Elisp-refs, Macrostep, Inspector (batch 1)
+(def (cmd-helpful-callable app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Callable: "
+      (lambda (name)
+        (echo-message! echo (str "Helpful: showing docs for callable " name))))))
+
+(def (cmd-helpful-key app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Key: "
+      (lambda (key)
+        (echo-message! echo (str "Helpful: showing docs for key " key))))))
+
+(def (cmd-helpful-variable app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Variable: "
+      (lambda (name)
+        (echo-message! echo (str "Helpful: showing docs for variable " name))))))
+
+(def (cmd-helpful-update app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Helpful: buffer updated")))
+
+(def (cmd-helpful-visit-reference app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Helpful: visiting reference at point")))
+
+(def (cmd-elisp-refs-special app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Special form: "
+      (lambda (name)
+        (echo-message! echo (str "Elisp-refs: finding references to " name))))))
+
+(def (cmd-elisp-refs-read app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Read symbol: "
+      (lambda (name)
+        (echo-message! echo (str "Elisp-refs: finding read references to " name))))))
+
+(def (cmd-elisp-refs-widget app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Widget: "
+      (lambda (name)
+        (echo-message! echo (str "Elisp-refs: finding widget references to " name))))))
+
+(def (cmd-macrostep-collapse app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Macrostep: collapsed macro expansion")))
+
+(def (cmd-macrostep-prev-macro app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Macrostep: moved to previous macro")))
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index aa3a276..802edfa 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -5045,4 +5045,25 @@
   (register-command! 'ivy-rich-modify-columns cmd-ivy-rich-modify-columns)
   (register-command! 'ivy-rich-set-display-transformer cmd-ivy-rich-set-display-transformer)
   (register-command! 'all-the-icons-ivy-rich-mode cmd-all-the-icons-ivy-rich-mode)
+  ;; Round 172 — Helpful, Elisp-refs, Macrostep, Inspector
+  (register-command! 'helpful-callable cmd-helpful-callable)
+  (register-command! 'helpful-key cmd-helpful-key)
+  (register-command! 'helpful-variable cmd-helpful-variable)
+  (register-command! 'helpful-update cmd-helpful-update)
+  (register-command! 'helpful-visit-reference cmd-helpful-visit-reference)
+  (register-command! 'elisp-refs-special cmd-elisp-refs-special)
+  (register-command! 'elisp-refs-read cmd-elisp-refs-read)
+  (register-command! 'elisp-refs-widget cmd-elisp-refs-widget)
+  (register-command! 'macrostep-collapse cmd-macrostep-collapse)
+  (register-command! 'macrostep-prev-macro cmd-macrostep-prev-macro)
+  (register-command! 'macrostep-next-macro cmd-macrostep-next-macro)
+  (register-command! 'macrostep-mode cmd-macrostep-mode)
+  (register-command! 'macrostep-environment cmd-macrostep-environment)
+  (register-command! 'inspector-inspect cmd-inspector-inspect)
+  (register-command! 'inspector-pop cmd-inspector-pop)
+  (register-command! 'inspector-quit cmd-inspector-quit)
+  (register-command! 'inspector-next-reference cmd-inspector-next-reference)
+  (register-command! 'inspector-inspect-expression cmd-inspector-inspect-expression)
+  (register-command! 'inspector-inspect-last-sexp cmd-inspector-inspect-last-sexp)
+  (register-command! 'inspector-copy-down cmd-inspector-copy-down)
 )