Round 241: Ido ext, Smex, Ibuffer ext (20 commands)

ober

24695263ee334ba703e6fd04fb3e206a436e751c

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index 0838e46..6e6ce4d 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 241 — Ido ext, Smex, Ibuffer ext
+
+| Command | Status | Description |
+|---------|--------|-------------|
+| ido-switch-buffer-other-window | :orange_circle: | Switch buffer in other window via Ido |
+| ido-switch-buffer-other-frame | :orange_circle: | Switch buffer in other frame via Ido |
+| ido-find-file-other-window | :orange_circle: | Find file in other window via Ido |
+| ido-find-file-other-frame | :orange_circle: | Find file in other frame via Ido |
+| ido-insert-file | :orange_circle: | Insert file contents via Ido |
+| ido-write-file | :orange_circle: | Write file via Ido |
+| ido-dired | :orange_circle: | Open dired via Ido |
+| ido-kill-buffer | :orange_circle: | Kill buffer via Ido |
+| ido-fallback-command | :orange_circle: | Fall back to default completion |
+| ido-toggle-case | :orange_circle: | Toggle case sensitivity in Ido |
+| smex-major-mode-commands | :orange_circle: | Show major mode commands via Smex |
+| smex-show-unbound-commands | :orange_circle: | Show unbound commands via Smex |
+| ibuffer-mark-by-mode | :orange_circle: | Mark buffers by mode |
+| ibuffer-mark-by-file-name-regexp | :orange_circle: | Mark buffers by filename regexp |
+| ibuffer-mark-read-only-buffers | :orange_circle: | Mark read-only buffers |
+| ibuffer-mark-special-buffers | :orange_circle: | Mark special buffers |
+| ibuffer-mark-dired-buffers | :orange_circle: | Mark dired buffers |
+| ibuffer-unmark-all-marks | :orange_circle: | Unmark all ibuffer marks |
+| ibuffer-mark-compressed-file-buffers | :orange_circle: | Mark compressed file buffers |
+| ibuffer-mark-help-buffers | :orange_circle: | Mark help buffers |
+
 ### Round 240 — Eshell ext, Comint ext, Compilation ext, Debugger ext
 
 | Command | Status | Description |
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index b9bfd59..eca7f6b 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -20095,3 +20095,48 @@
     (if (mode-enabled? app 'compilation-auto-jump)
       (echo-message! echo "Auto-jump to first error enabled")
       (echo-message! echo "Auto-jump to first error disabled"))))
+
+;; Round 241 — Smex, Ibuffer ext (10 in final)
+(def (cmd-smex-major-mode-commands app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Smex: major mode commands")))
+
+(def (cmd-smex-show-unbound-commands app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Smex: showing unbound commands")))
+
+(def (cmd-ibuffer-mark-by-mode app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Mode: "
+      (lambda (mode)
+        (echo-message! echo (str "Ibuffer: marked buffers with mode " mode))))))
+
+(def (cmd-ibuffer-mark-by-file-name-regexp app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Regexp: "
+      (lambda (re)
+        (echo-message! echo (str "Ibuffer: marked buffers matching " re))))))
+
+(def (cmd-ibuffer-mark-read-only-buffers app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Ibuffer: marked read-only buffers")))
+
+(def (cmd-ibuffer-mark-special-buffers app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Ibuffer: marked special buffers")))
+
+(def (cmd-ibuffer-mark-dired-buffers app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Ibuffer: marked dired buffers")))
+
+(def (cmd-ibuffer-unmark-all-marks app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Ibuffer: unmarked all")))
+
+(def (cmd-ibuffer-mark-compressed-file-buffers app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Ibuffer: marked compressed file buffers")))
+
+(def (cmd-ibuffer-mark-help-buffers app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Ibuffer: marked help buffers")))
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index baaf958..a40357b 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -20745,3 +20745,58 @@
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "Compilation: last error")))
 
+;; Round 241 — Ido ext, Smex, Ibuffer ext (10 in modes)
+(def (cmd-ido-switch-buffer-other-window app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Buffer (other window): "
+      (lambda (buf)
+        (echo-message! echo (str "Ido: switched to " buf " in other window"))))))
+
+(def (cmd-ido-switch-buffer-other-frame app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Buffer (other frame): "
+      (lambda (buf)
+        (echo-message! echo (str "Ido: switched to " buf " in other frame"))))))
+
+(def (cmd-ido-find-file-other-window app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "File (other window): "
+      (lambda (file)
+        (echo-message! echo (str "Ido: opening " file " in other window"))))))
+
+(def (cmd-ido-find-file-other-frame app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "File (other frame): "
+      (lambda (file)
+        (echo-message! echo (str "Ido: opening " file " in other frame"))))))
+
+(def (cmd-ido-insert-file app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Insert file: "
+      (lambda (file)
+        (echo-message! echo (str "Ido: inserting " file))))))
+
+(def (cmd-ido-write-file app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Write to file: "
+      (lambda (file)
+        (echo-message! echo (str "Ido: writing to " file))))))
+
+(def (cmd-ido-dired app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Ido: opening dired")))
+
+(def (cmd-ido-kill-buffer app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Kill buffer: "
+      (lambda (buf)
+        (echo-message! echo (str "Ido: killed buffer " buf))))))
+
+(def (cmd-ido-fallback-command app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Ido: falling back to default")))
+
+(def (cmd-ido-toggle-case app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Ido: toggled case sensitivity")))
+
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index 1882c79..0dde5ce 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -6494,4 +6494,25 @@
   (register-command! 'compilation-start cmd-compilation-start)
   (register-command! 'compilation-filter-hook cmd-compilation-filter-hook)
   (register-command! 'compilation-auto-jump-to-first-error cmd-compilation-auto-jump-to-first-error)
+  ;; Round 241 — Ido ext, Smex, Ibuffer ext
+  (register-command! 'ido-switch-buffer-other-window cmd-ido-switch-buffer-other-window)
+  (register-command! 'ido-switch-buffer-other-frame cmd-ido-switch-buffer-other-frame)
+  (register-command! 'ido-find-file-other-window cmd-ido-find-file-other-window)
+  (register-command! 'ido-find-file-other-frame cmd-ido-find-file-other-frame)
+  (register-command! 'ido-insert-file cmd-ido-insert-file)
+  (register-command! 'ido-write-file cmd-ido-write-file)
+  (register-command! 'ido-dired cmd-ido-dired)
+  (register-command! 'ido-kill-buffer cmd-ido-kill-buffer)
+  (register-command! 'ido-fallback-command cmd-ido-fallback-command)
+  (register-command! 'ido-toggle-case cmd-ido-toggle-case)
+  (register-command! 'smex-major-mode-commands cmd-smex-major-mode-commands)
+  (register-command! 'smex-show-unbound-commands cmd-smex-show-unbound-commands)
+  (register-command! 'ibuffer-mark-by-mode cmd-ibuffer-mark-by-mode)
+  (register-command! 'ibuffer-mark-by-file-name-regexp cmd-ibuffer-mark-by-file-name-regexp)
+  (register-command! 'ibuffer-mark-read-only-buffers cmd-ibuffer-mark-read-only-buffers)
+  (register-command! 'ibuffer-mark-special-buffers cmd-ibuffer-mark-special-buffers)
+  (register-command! 'ibuffer-mark-dired-buffers cmd-ibuffer-mark-dired-buffers)
+  (register-command! 'ibuffer-unmark-all-marks cmd-ibuffer-unmark-all-marks)
+  (register-command! 'ibuffer-mark-compressed-file-buffers cmd-ibuffer-mark-compressed-file-buffers)
+  (register-command! 'ibuffer-mark-help-buffers cmd-ibuffer-mark-help-buffers)
 )