Round 167: Add 20 Dirvish, Peep-dired, Fd-dired, Wdired commands

ober

b746f88157da72ab74845b0db9824bf23bb692e4

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index c54f206..5a0c198 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 167 — Dirvish, Peep-dired, Fd-dired, Wdired
+
+| Feature | Status | Notes |
+|---|---|---|
+| `dirvish` | :orange_circle: | Directory browser |
+| `dirvish-side` | :orange_circle: | Side panel |
+| `dirvish-fd` | :orange_circle: | Fd search |
+| `dirvish-dispatch` | :orange_circle: | Dispatch menu |
+| `dirvish-quick-access` | :orange_circle: | Quick access |
+| `dirvish-history-jump` | :orange_circle: | History jump |
+| `dirvish-layout-toggle` | :orange_circle: | Toggle layout |
+| `dirvish-layout-switch` | :orange_circle: | Switch layout |
+| `dirvish-emerge` | :orange_circle: | Emerge session |
+| `dirvish-emerge-mode` | :orange_circle: | Emerge mode |
+| `dirvish-yank` | :orange_circle: | Yank files |
+| `dirvish-copy-file-path` | :orange_circle: | Copy file path |
+| `dirvish-copy-file-name` | :orange_circle: | Copy file name |
+| `dirvish-subtree-toggle` | :orange_circle: | Toggle subtree |
+| `peep-dired` | :orange_circle: | Preview mode |
+| `peep-dired-scroll-page-down` | :orange_circle: | Scroll preview down |
+| `peep-dired-scroll-page-up` | :orange_circle: | Scroll preview up |
+| `fd-dired` | :orange_circle: | fd search in dired |
+| `fd-find-dired` | :orange_circle: | fd find-dired |
+| `wdired-abort-changes` | :orange_circle: | Abort wdired changes |
+
 ### Round 166 — Pulsar, Lin, Modus/Ef/Doom Themes
 
 | Feature | Status | Notes |
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index 2d91ad4..703cd68 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -16553,3 +16553,54 @@
     (echo-read-string echo "Theme period (morning/afternoon/evening/night): "
       (lambda (period)
         (echo-message! echo (str "Theme-buffet: loaded " period " theme"))))))
+
+;; ============================================================
+;; Round 167 — Dirvish, Peep-dired, Fd-dired (batch 2)
+;; ============================================================
+
+(def (cmd-dirvish-yank app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Dirvish: yanked file(s)")))
+
+(def (cmd-dirvish-copy-file-path app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Dirvish: copied file path to kill ring")))
+
+(def (cmd-dirvish-copy-file-name app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Dirvish: copied file name to kill ring")))
+
+(def (cmd-peep-dired app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'peep-dired)
+    (if (mode-enabled? app 'peep-dired)
+      (echo-message! echo "Peep-dired: preview mode enabled")
+      (echo-message! echo "Peep-dired: preview mode disabled"))))
+
+(def (cmd-peep-dired-scroll-page-down app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Peep-dired: scrolled preview down")))
+
+(def (cmd-peep-dired-scroll-page-up app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Peep-dired: scrolled preview up")))
+
+(def (cmd-fd-dired app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "fd search pattern: "
+      (lambda (pat)
+        (echo-message! echo (str "fd-dired: searching for '" pat "'"))))))
+
+(def (cmd-fd-find-dired app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "fd find-dired args: "
+      (lambda (args)
+        (echo-message! echo (str "fd-find-dired: running with " args))))))
+
+(def (cmd-wdired-abort-changes app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Wdired: aborted changes")))
+
+(def (cmd-dirvish-subtree-toggle app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Dirvish: toggled subtree")))
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index 12b2c1f..0bfa57b 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -17202,3 +17202,52 @@
 (def (cmd-ef-themes-preview-colors app)
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "Ef-themes: previewing colors")))
+
+;; ============================================================
+;; Round 167 — Dirvish, Peep-dired, Fd-dired, Wdired (batch 1)
+;; ============================================================
+
+(def (cmd-dirvish app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Dirvish: opened directory browser")))
+
+(def (cmd-dirvish-side app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Dirvish: opened side panel")))
+
+(def (cmd-dirvish-fd app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Dirvish fd search: "
+      (lambda (q)
+        (echo-message! echo (str "Dirvish: searching for '" q "'"))))))
+
+(def (cmd-dirvish-dispatch app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Dirvish: opened dispatch menu")))
+
+(def (cmd-dirvish-quick-access app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Dirvish: quick access menu")))
+
+(def (cmd-dirvish-history-jump app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Dirvish: jumped to history entry")))
+
+(def (cmd-dirvish-layout-toggle app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Dirvish: toggled layout")))
+
+(def (cmd-dirvish-layout-switch app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Dirvish: switched layout")))
+
+(def (cmd-dirvish-emerge app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Dirvish: opened emerge session")))
+
+(def (cmd-dirvish-emerge-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'dirvish-emerge)
+    (if (mode-enabled? app 'dirvish-emerge)
+      (echo-message! echo "Dirvish emerge mode enabled")
+      (echo-message! echo "Dirvish emerge mode disabled"))))
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index 1e9c942..d228df0 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -4940,4 +4940,25 @@
   (register-command! 'heaven-and-hell-toggle-theme cmd-heaven-and-hell-toggle-theme)
   (register-command! 'theme-buffet-timer-mode cmd-theme-buffet-timer-mode)
   (register-command! 'theme-buffet-a-la-carte cmd-theme-buffet-a-la-carte)
+  ;; Round 167
+  (register-command! 'dirvish cmd-dirvish)
+  (register-command! 'dirvish-side cmd-dirvish-side)
+  (register-command! 'dirvish-fd cmd-dirvish-fd)
+  (register-command! 'dirvish-dispatch cmd-dirvish-dispatch)
+  (register-command! 'dirvish-quick-access cmd-dirvish-quick-access)
+  (register-command! 'dirvish-history-jump cmd-dirvish-history-jump)
+  (register-command! 'dirvish-layout-toggle cmd-dirvish-layout-toggle)
+  (register-command! 'dirvish-layout-switch cmd-dirvish-layout-switch)
+  (register-command! 'dirvish-emerge cmd-dirvish-emerge)
+  (register-command! 'dirvish-emerge-mode cmd-dirvish-emerge-mode)
+  (register-command! 'dirvish-yank cmd-dirvish-yank)
+  (register-command! 'dirvish-copy-file-path cmd-dirvish-copy-file-path)
+  (register-command! 'dirvish-copy-file-name cmd-dirvish-copy-file-name)
+  (register-command! 'peep-dired cmd-peep-dired)
+  (register-command! 'peep-dired-scroll-page-down cmd-peep-dired-scroll-page-down)
+  (register-command! 'peep-dired-scroll-page-up cmd-peep-dired-scroll-page-up)
+  (register-command! 'fd-dired cmd-fd-dired)
+  (register-command! 'fd-find-dired cmd-fd-find-dired)
+  (register-command! 'wdired-abort-changes cmd-wdired-abort-changes)
+  (register-command! 'dirvish-subtree-toggle cmd-dirvish-subtree-toggle)
 )