Round 239: w3m, EAF, EXWM (20 commands)

ober

233897577878beb3447b4e7aa15951776463711b

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index cd249de..af0ca6a 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 239 — w3m, EAF, EXWM
+
+| Command | Status | Description |
+|---------|--------|-------------|
+| w3m-goto-url | :orange_circle: | Open URL in w3m browser |
+| w3m-bookmark-add | :orange_circle: | Add w3m bookmark |
+| w3m-download | :orange_circle: | Download current page |
+| w3m-view-source | :orange_circle: | View page source |
+| w3m-reload | :orange_circle: | Reload current page |
+| w3m-next-anchor | :orange_circle: | Move to next anchor |
+| w3m-previous-anchor | :orange_circle: | Move to previous anchor |
+| w3m-copy-buffer | :orange_circle: | Copy w3m buffer |
+| eaf-open-browser | :orange_circle: | Open EAF browser |
+| eaf-open-terminal | :orange_circle: | Open EAF terminal |
+| eaf-open-file-manager | :orange_circle: | Open EAF file manager |
+| eaf-open-pdf-viewer | :orange_circle: | Open EAF PDF viewer |
+| eaf-open-video-player | :orange_circle: | Open EAF video player |
+| exwm-workspace-switch | :orange_circle: | Switch EXWM workspace |
+| exwm-workspace-add | :orange_circle: | Add EXWM workspace |
+| exwm-workspace-delete | :orange_circle: | Delete EXWM workspace |
+| exwm-input-toggle-keyboard | :orange_circle: | Toggle keyboard passthrough |
+| exwm-layout-toggle-fullscreen | :orange_circle: | Toggle fullscreen layout |
+| exwm-floating-toggle-floating | :orange_circle: | Toggle floating window |
+| exwm-layout-toggle-mode-line | :orange_circle: | Toggle mode line in EXWM |
+
 ### Round 238 — Consult ext, Vertico ext, Speedbar ext, Neotree ext
 
 | Command | Status | Description |
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index 7b2ca67..ca55a83 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -19995,3 +19995,50 @@
 (def (cmd-neotree-select-up-node app)
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "Neotree: selected parent node")))
+
+;; Round 239 — EAF ext, EXWM (10 in final)
+(def (cmd-eaf-open-file-manager app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "EAF: opening file manager")))
+
+(def (cmd-eaf-open-pdf-viewer app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "PDF file: "
+      (lambda (file)
+        (echo-message! echo (str "EAF: opening PDF " file))))))
+
+(def (cmd-eaf-open-video-player app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Video file: "
+      (lambda (file)
+        (echo-message! echo (str "EAF: playing " file))))))
+
+(def (cmd-exwm-workspace-switch app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Workspace number: "
+      (lambda (num)
+        (echo-message! echo (str "EXWM: switched to workspace " num))))))
+
+(def (cmd-exwm-workspace-add app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "EXWM: added new workspace")))
+
+(def (cmd-exwm-workspace-delete app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "EXWM: deleted current workspace")))
+
+(def (cmd-exwm-input-toggle-keyboard app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "EXWM: toggled keyboard passthrough")))
+
+(def (cmd-exwm-layout-toggle-fullscreen app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "EXWM: toggled fullscreen")))
+
+(def (cmd-exwm-floating-toggle-floating app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "EXWM: toggled floating window")))
+
+(def (cmd-exwm-layout-toggle-mode-line app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "EXWM: toggled mode line")))
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index d5b667e..3480ee7 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -20659,3 +20659,48 @@
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "Calc: embedded word calculation")))
 
+;; Round 239 — w3m, EAF, EXWM (10 in modes)
+(def (cmd-w3m-goto-url app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "URL: "
+      (lambda (url)
+        (echo-message! echo (str "w3m: loading " url))))))
+
+(def (cmd-w3m-bookmark-add app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "w3m: added bookmark")))
+
+(def (cmd-w3m-download app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "w3m: downloading page")))
+
+(def (cmd-w3m-view-source app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "w3m: viewing page source")))
+
+(def (cmd-w3m-reload app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "w3m: reloading page")))
+
+(def (cmd-w3m-next-anchor app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "w3m: next anchor")))
+
+(def (cmd-w3m-previous-anchor app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "w3m: previous anchor")))
+
+(def (cmd-w3m-copy-buffer app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "w3m: copied buffer")))
+
+(def (cmd-eaf-open-browser app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "URL: "
+      (lambda (url)
+        (echo-message! echo (str "EAF: opening browser at " url))))))
+
+(def (cmd-eaf-open-terminal app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "EAF: opening terminal")))
+
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index 6c8bdd2..91828e5 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -6452,4 +6452,25 @@
   (register-command! 'neotree-collapse-all cmd-neotree-collapse-all)
   (register-command! 'neotree-copy-filepath-to-yank-ring cmd-neotree-copy-filepath-to-yank-ring)
   (register-command! 'neotree-select-up-node cmd-neotree-select-up-node)
+  ;; Round 239 — w3m, EAF, EXWM
+  (register-command! 'w3m-goto-url cmd-w3m-goto-url)
+  (register-command! 'w3m-bookmark-add cmd-w3m-bookmark-add)
+  (register-command! 'w3m-download cmd-w3m-download)
+  (register-command! 'w3m-view-source cmd-w3m-view-source)
+  (register-command! 'w3m-reload cmd-w3m-reload)
+  (register-command! 'w3m-next-anchor cmd-w3m-next-anchor)
+  (register-command! 'w3m-previous-anchor cmd-w3m-previous-anchor)
+  (register-command! 'w3m-copy-buffer cmd-w3m-copy-buffer)
+  (register-command! 'eaf-open-browser cmd-eaf-open-browser)
+  (register-command! 'eaf-open-terminal cmd-eaf-open-terminal)
+  (register-command! 'eaf-open-file-manager cmd-eaf-open-file-manager)
+  (register-command! 'eaf-open-pdf-viewer cmd-eaf-open-pdf-viewer)
+  (register-command! 'eaf-open-video-player cmd-eaf-open-video-player)
+  (register-command! 'exwm-workspace-switch cmd-exwm-workspace-switch)
+  (register-command! 'exwm-workspace-add cmd-exwm-workspace-add)
+  (register-command! 'exwm-workspace-delete cmd-exwm-workspace-delete)
+  (register-command! 'exwm-input-toggle-keyboard cmd-exwm-input-toggle-keyboard)
+  (register-command! 'exwm-layout-toggle-fullscreen cmd-exwm-layout-toggle-fullscreen)
+  (register-command! 'exwm-floating-toggle-floating cmd-exwm-floating-toggle-floating)
+  (register-command! 'exwm-layout-toggle-mode-line cmd-exwm-layout-toggle-mode-line)
 )