Round 207: Treesit-ext, Combobulate, Expreg, Puni structural editing commands

ober

af926939113faa62f7c06976243a58ed7b2d06e4

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index 54b3a89..b290698 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 207 — Treesit-ext, Combobulate, Expreg, Puni
+
+| Feature | Status | Notes |
+|---|---|---|
+| treesit-inspect-mode | :orange_circle: | Toggle treesit inspect mode |
+| combobulate-navigate-up | :orange_circle: | Navigate up in AST |
+| combobulate-navigate-down | :orange_circle: | Navigate down in AST |
+| combobulate-navigate-next | :orange_circle: | Navigate to next sibling |
+| combobulate-navigate-previous | :orange_circle: | Navigate to previous sibling |
+| combobulate-drag-up | :orange_circle: | Drag node up |
+| combobulate-drag-down | :orange_circle: | Drag node down |
+| combobulate-splice-up | :orange_circle: | Splice up in AST |
+| combobulate-vanish | :orange_circle: | Vanish node |
+| combobulate-envelop | :orange_circle: | Envelop node |
+| expreg-expand | :orange_circle: | Expand region by expression |
+| expreg-contract | :orange_circle: | Contract region by expression |
+| puni-kill-active-region | :orange_circle: | Kill active region (Puni) |
+| puni-squeeze | :orange_circle: | Squeeze (Puni) |
+| puni-slurp-forward | :orange_circle: | Slurp forward (Puni) |
+| puni-barf-forward | :orange_circle: | Barf forward (Puni) |
+| puni-raise | :orange_circle: | Raise (Puni) |
+| puni-convolute | :orange_circle: | Convolute (Puni) |
+| puni-split | :orange_circle: | Split (Puni) |
+| puni-transpose | :orange_circle: | Transpose (Puni) |
+
 ### Round 206 — Corfu-ext, Cape-ext, Company-ext, Hippie-ext, Pabbrev, Abbrev-suggest
 
 | Feature | Status | Notes |
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index e67d42d..0b10063 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -18529,3 +18529,44 @@
     (if (mode-enabled? app 'corfu-candidate-overlay)
       (echo-message! echo "Corfu candidate overlay mode enabled")
       (echo-message! echo "Corfu candidate overlay mode disabled"))))
+
+;; Round 207 — Expreg, Puni
+(def (cmd-expreg-expand app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Expreg: expanded region")))
+
+(def (cmd-expreg-contract app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Expreg: contracted region")))
+
+(def (cmd-puni-kill-active-region app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Puni: killed active region")))
+
+(def (cmd-puni-squeeze app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Puni: squeezed")))
+
+(def (cmd-puni-slurp-forward app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Puni: slurped forward")))
+
+(def (cmd-puni-barf-forward app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Puni: barfed forward")))
+
+(def (cmd-puni-raise app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Puni: raised")))
+
+(def (cmd-puni-convolute app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Puni: convoluted")))
+
+(def (cmd-puni-split app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Puni: split")))
+
+(def (cmd-puni-transpose app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Puni: transposed")))
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index 0cfdbe1..af80f35 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -19139,3 +19139,47 @@
 (def (cmd-company-show-doc-buffer app)
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "Company: showing documentation buffer")))
+
+;; Round 207 — Treesit-ext, Combobulate
+(def (cmd-treesit-inspect-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'treesit-inspect)
+    (if (mode-enabled? app 'treesit-inspect)
+      (echo-message! echo "Treesit inspect mode enabled")
+      (echo-message! echo "Treesit inspect mode disabled"))))
+
+(def (cmd-combobulate-navigate-up app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Combobulate: navigated up")))
+
+(def (cmd-combobulate-navigate-down app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Combobulate: navigated down")))
+
+(def (cmd-combobulate-navigate-next app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Combobulate: navigated to next sibling")))
+
+(def (cmd-combobulate-navigate-previous app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Combobulate: navigated to previous sibling")))
+
+(def (cmd-combobulate-drag-up app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Combobulate: dragged node up")))
+
+(def (cmd-combobulate-drag-down app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Combobulate: dragged node down")))
+
+(def (cmd-combobulate-splice-up app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Combobulate: spliced up")))
+
+(def (cmd-combobulate-vanish app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Combobulate: vanished node")))
+
+(def (cmd-combobulate-envelop app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Combobulate: enveloped node")))
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index da591ff..da7e428 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -5780,4 +5780,25 @@
   (register-command! 'pabbrev-mode cmd-pabbrev-mode)
   (register-command! 'abbrev-suggest-mode cmd-abbrev-suggest-mode)
   (register-command! 'corfu-candidate-overlay-mode cmd-corfu-candidate-overlay-mode)
+  ;; Round 207
+  (register-command! 'treesit-inspect-mode cmd-treesit-inspect-mode)
+  (register-command! 'combobulate-navigate-up cmd-combobulate-navigate-up)
+  (register-command! 'combobulate-navigate-down cmd-combobulate-navigate-down)
+  (register-command! 'combobulate-navigate-next cmd-combobulate-navigate-next)
+  (register-command! 'combobulate-navigate-previous cmd-combobulate-navigate-previous)
+  (register-command! 'combobulate-drag-up cmd-combobulate-drag-up)
+  (register-command! 'combobulate-drag-down cmd-combobulate-drag-down)
+  (register-command! 'combobulate-splice-up cmd-combobulate-splice-up)
+  (register-command! 'combobulate-vanish cmd-combobulate-vanish)
+  (register-command! 'combobulate-envelop cmd-combobulate-envelop)
+  (register-command! 'expreg-expand cmd-expreg-expand)
+  (register-command! 'expreg-contract cmd-expreg-contract)
+  (register-command! 'puni-kill-active-region cmd-puni-kill-active-region)
+  (register-command! 'puni-squeeze cmd-puni-squeeze)
+  (register-command! 'puni-slurp-forward cmd-puni-slurp-forward)
+  (register-command! 'puni-barf-forward cmd-puni-barf-forward)
+  (register-command! 'puni-raise cmd-puni-raise)
+  (register-command! 'puni-convolute cmd-puni-convolute)
+  (register-command! 'puni-split cmd-puni-split)
+  (register-command! 'puni-transpose cmd-puni-transpose)
 )