Round 110: Add 20 VC (version control) extended commands

ober

1534830b20784913706f193c73453bc57df0bfb4

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index 1bc1715..fa954e4 100644
--- a/docs/jemacs-vs-emacs.md
+++ b/docs/jemacs-vs-emacs.md
@@ -3714,6 +3714,31 @@ No remaining Tier 1 gaps. All core editing, completion, and navigation features 
 | calendar-goto-hebrew-date | :orange_circle: | Jump to Hebrew date |
 | calendar-goto-islamic-date | :orange_circle: | Jump to Islamic date |
 
+### Round 110 — VC (Version Control) Extended
+
+| Command | Status | Description |
+|---------|--------|-------------|
+| vc-print-branch-log | :orange_circle: | Show log for specific branch |
+| vc-log-search | :orange_circle: | Search version control log |
+| vc-merge | :orange_circle: | Merge a branch |
+| vc-root-version-diff | :orange_circle: | Diff entire repository |
+| vc-edit-next-command | :orange_circle: | Edit next VC command before run |
+| vc-switch-backend | :orange_circle: | Switch VC backend |
+| vc-dir-mark-all-files | :orange_circle: | Mark all files in VC dir |
+| vc-dir-unmark-all-files | :orange_circle: | Unmark all files in VC dir |
+| vc-dir-toggle-mark | :orange_circle: | Toggle mark on current file |
+| vc-dir-query-replace-regexp | :orange_circle: | Query replace in marked files |
+| vc-dir-search | :orange_circle: | Search in marked files |
+| vc-dir-isearch | :orange_circle: | Incremental search in marked files |
+| vc-dir-isearch-regexp | :orange_circle: | Regexp isearch in marked files |
+| vc-dir-hide-state | :orange_circle: | Hide files by state |
+| vc-dir-show-fileentry | :orange_circle: | Show file entry details |
+| vc-dir-kill-line | :orange_circle: | Remove entry from listing |
+| vc-dir-clean-directory | :orange_circle: | Clean untracked files |
+| vc-dir-find-file-other-window | :orange_circle: | Open file in other window |
+| vc-dir-previous-directory | :orange_circle: | Move to previous directory |
+| vc-dir-next-directory | :orange_circle: | Move to next directory |
+
 ---
 
 ## Recommended Development Roadmap
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index 28394fb..a1157a4 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -13799,3 +13799,49 @@
     (echo-read-string echo "Islamic date: "
       (lambda (date)
         (echo-message! echo (str "Calendar: jumped to Islamic date " date))))))
+
+;;; ——— Round 110: VC (version control) extended (batch 2) ———
+
+(def (cmd-vc-dir-search app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "VC Dir search: "
+      (lambda (pattern)
+        (echo-message! echo (str "VC Dir: searching for '" pattern "'"))))))
+
+(def (cmd-vc-dir-isearch app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "VC Dir: incremental search in marked files")))
+
+(def (cmd-vc-dir-isearch-regexp app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "VC Dir: incremental regexp search in marked files")))
+
+(def (cmd-vc-dir-hide-state app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Hide state: "
+      (lambda (state)
+        (echo-message! echo (str "VC Dir: hiding files with state " state))))))
+
+(def (cmd-vc-dir-show-fileentry app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "VC Dir: showing file entry details")))
+
+(def (cmd-vc-dir-kill-line app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "VC Dir: removed current entry from listing")))
+
+(def (cmd-vc-dir-clean-directory app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "VC Dir: cleaning untracked files from directory")))
+
+(def (cmd-vc-dir-find-file-other-window app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "VC Dir: opening file in other window")))
+
+(def (cmd-vc-dir-previous-directory app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "VC Dir: moved to previous directory")))
+
+(def (cmd-vc-dir-next-directory app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "VC Dir: moved to next directory")))
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index 2ff66fa..14ffeea 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -14358,3 +14358,57 @@
 (def (cmd-calendar-unmark app)
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "Calendar: cleared all marks")))
+
+;;; ——— Round 110: VC (version control) extended (batch 1) ———
+
+(def (cmd-vc-print-branch-log app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Branch: "
+      (lambda (branch)
+        (echo-message! echo (str "VC: showing log for branch " branch))))))
+
+(def (cmd-vc-log-search app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "VC log search: "
+      (lambda (pattern)
+        (echo-message! echo (str "VC: searching log for '" pattern "'"))))))
+
+(def (cmd-vc-merge app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Merge branch: "
+      (lambda (branch)
+        (echo-message! echo (str "VC: merging branch " branch))))))
+
+(def (cmd-vc-root-version-diff app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "VC: showing diff for entire repository")))
+
+(def (cmd-vc-edit-next-command app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "VC: next command will be edited before execution")))
+
+(def (cmd-vc-switch-backend app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Switch to backend: "
+      (lambda (backend)
+        (echo-message! echo (str "VC: switched backend to " backend))))))
+
+(def (cmd-vc-dir-mark-all-files app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "VC Dir: marked all files")))
+
+(def (cmd-vc-dir-unmark-all-files app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "VC Dir: unmarked all files")))
+
+(def (cmd-vc-dir-toggle-mark app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "VC Dir: toggled mark on current file")))
+
+(def (cmd-vc-dir-query-replace-regexp app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "VC Dir query replace regexp: "
+      (lambda (pattern)
+        (echo-read-string echo "Replace with: "
+          (lambda (replacement)
+            (echo-message! echo (str "VC Dir: replacing '" pattern "' with '" replacement "'"))))))))
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index 5b201a1..23493be 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -3743,4 +3743,25 @@
   (register-command! 'calendar-goto-iso-date cmd-calendar-goto-iso-date)
   (register-command! 'calendar-goto-hebrew-date cmd-calendar-goto-hebrew-date)
   (register-command! 'calendar-goto-islamic-date cmd-calendar-goto-islamic-date)
+  ;; Round 110: VC extended
+  (register-command! 'vc-print-branch-log cmd-vc-print-branch-log)
+  (register-command! 'vc-log-search cmd-vc-log-search)
+  (register-command! 'vc-merge cmd-vc-merge)
+  (register-command! 'vc-root-version-diff cmd-vc-root-version-diff)
+  (register-command! 'vc-edit-next-command cmd-vc-edit-next-command)
+  (register-command! 'vc-switch-backend cmd-vc-switch-backend)
+  (register-command! 'vc-dir-mark-all-files cmd-vc-dir-mark-all-files)
+  (register-command! 'vc-dir-unmark-all-files cmd-vc-dir-unmark-all-files)
+  (register-command! 'vc-dir-toggle-mark cmd-vc-dir-toggle-mark)
+  (register-command! 'vc-dir-query-replace-regexp cmd-vc-dir-query-replace-regexp)
+  (register-command! 'vc-dir-search cmd-vc-dir-search)
+  (register-command! 'vc-dir-isearch cmd-vc-dir-isearch)
+  (register-command! 'vc-dir-isearch-regexp cmd-vc-dir-isearch-regexp)
+  (register-command! 'vc-dir-hide-state cmd-vc-dir-hide-state)
+  (register-command! 'vc-dir-show-fileentry cmd-vc-dir-show-fileentry)
+  (register-command! 'vc-dir-kill-line cmd-vc-dir-kill-line)
+  (register-command! 'vc-dir-clean-directory cmd-vc-dir-clean-directory)
+  (register-command! 'vc-dir-find-file-other-window cmd-vc-dir-find-file-other-window)
+  (register-command! 'vc-dir-previous-directory cmd-vc-dir-previous-directory)
+  (register-command! 'vc-dir-next-directory cmd-vc-dir-next-directory)
 )