Round 266: Nim ext, Zig ext, Crystal ext, V lang ext, D lang ext (20 commands)

ober

f8f3557aa739d7dce98f4606a0e866dc4bb9b0a7

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index ce63e7a..cf9c37b 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 266 — Nim ext, Zig ext, Crystal ext, V lang ext, D lang ext
+
+| Command | Status | Description |
+|---------|--------|-------------|
+| nim-doc | :orange_circle: | Show Nim symbol documentation |
+| nim-build-doc | :orange_circle: | Build Nim documentation |
+| nim-doc-search | :orange_circle: | Search Nim documentation |
+| zig-fmt | :orange_circle: | Format Zig code |
+| zig-check | :orange_circle: | Check Zig code |
+| zig-doc | :orange_circle: | Generate Zig documentation |
+| zig-clean | :orange_circle: | Clean Zig build artifacts |
+| crystal-build | :orange_circle: | Build Crystal project |
+| crystal-run | :orange_circle: | Run Crystal program |
+| crystal-spec | :orange_circle: | Run Crystal specs |
+| crystal-format | :orange_circle: | Format Crystal code |
+| crystal-tool-format | :orange_circle: | Run Crystal tool format |
+| crystal-playground | :orange_circle: | Open Crystal playground |
+| crystal-doc | :orange_circle: | Generate Crystal documentation |
+| vlang-fmt | :orange_circle: | Format V code |
+| vlang-repl | :orange_circle: | Start V REPL |
+| dlang-build | :orange_circle: | Build D project |
+| dlang-run | :orange_circle: | Run D program |
+| dlang-test | :orange_circle: | Run D tests |
+| dlang-format | :orange_circle: | Format D code |
+
 ### Round 265 — Elixir ext, Erlang ext, OCaml ext, F# ext, Scala ext
 
 | Command | Status | Description |
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index e4122a2..477d662 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -21261,4 +21261,46 @@
 
 (def (cmd-scala-repl app)
   (let* ((echo (app-state-echo app)))
-    (echo-message! echo "Scala: starting REPL")))
\ No newline at end of file
+    (echo-message! echo "Scala: starting REPL")))
+
+;;; Round 266 — Crystal ext, V lang ext, D lang ext (batch 2)
+
+(def (cmd-crystal-format app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Crystal: formatting code")))
+
+(def (cmd-crystal-tool-format app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Crystal: running tool format")))
+
+(def (cmd-crystal-playground app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Crystal: opening playground")))
+
+(def (cmd-crystal-doc app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Crystal: generating documentation")))
+
+(def (cmd-vlang-fmt app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "V: formatting code")))
+
+(def (cmd-vlang-repl app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "V: starting REPL")))
+
+(def (cmd-dlang-build app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "D: building project")))
+
+(def (cmd-dlang-run app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "D: running program")))
+
+(def (cmd-dlang-test app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "D: running tests")))
+
+(def (cmd-dlang-format app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "D: formatting code")))
\ No newline at end of file
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index 6935c83..ba7a37b 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -21882,3 +21882,49 @@
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "OCaml: evaluating buffer")))
 
+;;; Round 266 — Nim ext, Zig ext, Crystal ext, V lang ext, D lang ext (batch 1)
+
+(def (cmd-nim-doc app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Symbol: "
+      (lambda (sym)
+        (echo-message! echo (str "Nim: doc for " sym))))))
+
+(def (cmd-nim-build-doc app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Nim: building documentation")))
+
+(def (cmd-nim-doc-search app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Search: "
+      (lambda (query)
+        (echo-message! echo (str "Nim: searching docs for " query))))))
+
+(def (cmd-zig-fmt app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Zig: formatting code")))
+
+(def (cmd-zig-check app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Zig: checking code")))
+
+(def (cmd-zig-doc app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Zig: generating documentation")))
+
+(def (cmd-zig-clean app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Zig: cleaning build artifacts")))
+
+(def (cmd-crystal-build app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Crystal: building project")))
+
+(def (cmd-crystal-run app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Crystal: running program")))
+
+(def (cmd-crystal-spec app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Crystal: running specs")))
+
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index ee0b18f..37c90ba 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -7003,4 +7003,25 @@
   (register-command! 'scala-eval-buffer cmd-scala-eval-buffer)
   (register-command! 'scala-eval-region cmd-scala-eval-region)
   (register-command! 'scala-repl cmd-scala-repl)
+  ;; Round 266
+  (register-command! 'nim-doc cmd-nim-doc)
+  (register-command! 'nim-build-doc cmd-nim-build-doc)
+  (register-command! 'nim-doc-search cmd-nim-doc-search)
+  (register-command! 'zig-fmt cmd-zig-fmt)
+  (register-command! 'zig-check cmd-zig-check)
+  (register-command! 'zig-doc cmd-zig-doc)
+  (register-command! 'zig-clean cmd-zig-clean)
+  (register-command! 'crystal-build cmd-crystal-build)
+  (register-command! 'crystal-run cmd-crystal-run)
+  (register-command! 'crystal-spec cmd-crystal-spec)
+  (register-command! 'crystal-format cmd-crystal-format)
+  (register-command! 'crystal-tool-format cmd-crystal-tool-format)
+  (register-command! 'crystal-playground cmd-crystal-playground)
+  (register-command! 'crystal-doc cmd-crystal-doc)
+  (register-command! 'vlang-fmt cmd-vlang-fmt)
+  (register-command! 'vlang-repl cmd-vlang-repl)
+  (register-command! 'dlang-build cmd-dlang-build)
+  (register-command! 'dlang-run cmd-dlang-run)
+  (register-command! 'dlang-test cmd-dlang-test)
+  (register-command! 'dlang-format cmd-dlang-format)
 )