Round 203: Dirvish-ext, Dired-hacks, Diredfl, OpenWith, Dired-launch commands

ober

ee29d8e7210f14f51f7851d362b00edafffddc43

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index 6ec74bc..05c0dac 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 203 — Dirvish-ext, Dired-hacks, Diredfl, OpenWith, Dired-launch
+
+| Feature | Status | Notes |
+|---|---|---|
+| dirvish-fd-ask | :orange_circle: | Dirvish fd file search |
+| dirvish-history-go-back | :orange_circle: | Go back in Dirvish history |
+| dirvish-history-go-forward | :orange_circle: | Go forward in Dirvish history |
+| dirvish-yank-menu | :orange_circle: | Dirvish yank menu |
+| dirvish-setup-menu | :orange_circle: | Dirvish setup menu |
+| dired-rainbow-define | :orange_circle: | Define Dired rainbow color rule |
+| dired-avfs | :orange_circle: | Open file via AVFS |
+| dired-quick-sort | :orange_circle: | Quick sort directory listing |
+| diredfl-mode | :orange_circle: | Toggle Diredfl extra highlighting |
+| dired-atool-do-unpack | :orange_circle: | Unpack archive with atool |
+| dired-atool-do-pack | :orange_circle: | Pack files with atool |
+| dired-hide-details-plus | :orange_circle: | Toggle hide details plus |
+| dired-open-xdg | :orange_circle: | Open with XDG handler |
+| dired-recent-open | :orange_circle: | Open recent directory |
+| casual-dired-tmenu | :orange_circle: | Casual Dired transient menu |
+| openwith-mode | :orange_circle: | Toggle OpenWith mode |
+| runner-run | :orange_circle: | Run file with associated program |
+| dired-launch-command | :orange_circle: | Launch file with default handler |
+| dired-launch-with-prompt-command | :orange_circle: | Launch file with prompted program |
+| dired-efap-mode | :orange_circle: | Edit filenames at point |
+
 ### Round 202 — Dictionary, Thesaurus, Translation, Spell-fu, Flyspell-correct
 
 | Feature | Status | Notes |
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index 20202ed..7056631 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -18327,3 +18327,54 @@
     (echo-read-string echo "Add dictionary: "
       (lambda (dict)
         (echo-message! echo (str "Spell-fu: added dictionary " dict))))))
+
+;; Round 203 — Dired-ext, OpenWith, Runner, Dired-launch
+(def (cmd-dired-atool-do-pack app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Archive name: "
+      (lambda (name)
+        (echo-message! echo (str "Dired: packed files into " name))))))
+
+(def (cmd-dired-hide-details-plus app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Dired: toggled hide details plus")))
+
+(def (cmd-dired-open-xdg app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Dired: opened file with XDG handler")))
+
+(def (cmd-dired-recent-open app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Dired: opened recent directory")))
+
+(def (cmd-casual-dired-tmenu app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Casual Dired: showing transient menu")))
+
+(def (cmd-openwith-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'openwith)
+    (if (mode-enabled? app 'openwith)
+      (echo-message! echo "OpenWith mode enabled")
+      (echo-message! echo "OpenWith mode disabled"))))
+
+(def (cmd-runner-run app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Runner: executing file with associated program")))
+
+(def (cmd-dired-launch-command app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Dired-launch: launched file with default handler")))
+
+(def (cmd-dired-launch-with-prompt-command app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Launch with: "
+      (lambda (prog)
+        (echo-message! echo (str "Dired-launch: launched with " prog))))))
+
+(def (cmd-dired-efap-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'dired-efap)
+    (if (mode-enabled? app 'dired-efap)
+      (echo-message! echo "Dired EFAP mode enabled — edit filenames at point")
+      (echo-message! echo "Dired EFAP mode disabled"))))
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index 6cc8709..6c7f0a2 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -18963,3 +18963,49 @@
     (echo-read-string echo "Translate: "
       (lambda (text)
         (echo-message! echo (str "go-translate: " text))))))
+
+;; Round 203 — Dirvish-ext, Dired-hacks
+(def (cmd-dirvish-fd-ask app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Dirvish fd pattern: "
+      (lambda (pat)
+        (echo-message! echo (str "Dirvish: fd search for '" pat "'"))))))
+
+(def (cmd-dirvish-history-go-back app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Dirvish: went back in history")))
+
+(def (cmd-dirvish-history-go-forward app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Dirvish: went forward in history")))
+
+(def (cmd-dirvish-yank-menu app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Dirvish: showing yank menu")))
+
+(def (cmd-dirvish-setup-menu app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Dirvish: showing setup menu")))
+
+(def (cmd-dired-rainbow-define app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Dired-rainbow: defined color rule")))
+
+(def (cmd-dired-avfs app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Dired: opened file via AVFS")))
+
+(def (cmd-dired-quick-sort app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Dired: quick-sorted directory listing")))
+
+(def (cmd-diredfl-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'diredfl)
+    (if (mode-enabled? app 'diredfl)
+      (echo-message! echo "Diredfl mode enabled")
+      (echo-message! echo "Diredfl mode disabled"))))
+
+(def (cmd-dired-atool-do-unpack app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Dired: unpacking archive with atool")))
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index b3b8d16..23c7b71 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -5696,4 +5696,25 @@
   (register-command! 'spell-fu-word-add cmd-spell-fu-word-add)
   (register-command! 'spell-fu-word-remove cmd-spell-fu-word-remove)
   (register-command! 'spell-fu-dictionary-add cmd-spell-fu-dictionary-add)
+  ;; Round 203
+  (register-command! 'dirvish-fd-ask cmd-dirvish-fd-ask)
+  (register-command! 'dirvish-history-go-back cmd-dirvish-history-go-back)
+  (register-command! 'dirvish-history-go-forward cmd-dirvish-history-go-forward)
+  (register-command! 'dirvish-yank-menu cmd-dirvish-yank-menu)
+  (register-command! 'dirvish-setup-menu cmd-dirvish-setup-menu)
+  (register-command! 'dired-rainbow-define cmd-dired-rainbow-define)
+  (register-command! 'dired-avfs cmd-dired-avfs)
+  (register-command! 'dired-quick-sort cmd-dired-quick-sort)
+  (register-command! 'diredfl-mode cmd-diredfl-mode)
+  (register-command! 'dired-atool-do-unpack cmd-dired-atool-do-unpack)
+  (register-command! 'dired-atool-do-pack cmd-dired-atool-do-pack)
+  (register-command! 'dired-hide-details-plus cmd-dired-hide-details-plus)
+  (register-command! 'dired-open-xdg cmd-dired-open-xdg)
+  (register-command! 'dired-recent-open cmd-dired-recent-open)
+  (register-command! 'casual-dired-tmenu cmd-casual-dired-tmenu)
+  (register-command! 'openwith-mode cmd-openwith-mode)
+  (register-command! 'runner-run cmd-runner-run)
+  (register-command! 'dired-launch-command cmd-dired-launch-command)
+  (register-command! 'dired-launch-with-prompt-command cmd-dired-launch-with-prompt-command)
+  (register-command! 'dired-efap-mode cmd-dired-efap-mode)
 )