Round 228: Spell-fu ext, Crux ext (20 commands)

ober

de61416e1829cb45578d0244c4cc4efeb33b062a

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index 8c58883..2f0fc93 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 228 — Spell-fu ext, Crux ext
+
+| Command | Status | Description |
+|---------|--------|-------------|
+| spell-fu-goto-next-error | :orange_circle: | Goto next spelling error |
+| spell-fu-goto-previous-error | :orange_circle: | Goto previous spelling error |
+| spell-fu-reset | :orange_circle: | Reset spell-fu |
+| crux-move-beginning-of-line | :orange_circle: | Smart move to beginning of line |
+| crux-kill-line-backwards | :orange_circle: | Kill line backwards |
+| crux-kill-and-join-forward | :orange_circle: | Kill and join forward |
+| crux-duplicate-current-line-or-region | :orange_circle: | Duplicate line or region |
+| crux-duplicate-and-comment-current-line-or-region | :orange_circle: | Duplicate and comment |
+| crux-rename-file-and-buffer | :orange_circle: | Rename file and buffer |
+| crux-view-url | :orange_circle: | View URL |
+| crux-switch-to-previous-buffer | :orange_circle: | Switch to previous buffer |
+| crux-reopen-as-root | :orange_circle: | Reopen file as root |
+| crux-find-user-init-file | :orange_circle: | Find user init file |
+| crux-find-shell-init-file | :orange_circle: | Find shell init file |
+| crux-ispell-word-then-abbrev | :orange_circle: | Ispell word then abbrev |
+| crux-upcase-region | :orange_circle: | Upcase region |
+| crux-downcase-region | :orange_circle: | Downcase region |
+| crux-capitalize-region | :orange_circle: | Capitalize region |
+| crux-other-window-or-switch-buffer | :orange_circle: | Other window or switch buffer |
+| crux-sudo-edit | :orange_circle: | Edit with sudo |
+
 ### Round 227 — Ement (Matrix client)
 
 | Command | Status | Description |
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index a812491..3bd8db6 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -19472,3 +19472,45 @@
 (def (cmd-ement-room-toggle-space app)
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "Ement: toggled space for room")))
+
+;;; Round 228 — Spell-fu ext, Crux ext (batch 2)
+
+(def (cmd-crux-switch-to-previous-buffer app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Crux: switched to previous buffer")))
+
+(def (cmd-crux-reopen-as-root app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Crux: reopened as root")))
+
+(def (cmd-crux-find-user-init-file app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Crux: finding user init file")))
+
+(def (cmd-crux-find-shell-init-file app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Crux: finding shell init file")))
+
+(def (cmd-crux-ispell-word-then-abbrev app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Crux: ispell word then abbrev")))
+
+(def (cmd-crux-upcase-region app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Crux: upcased region")))
+
+(def (cmd-crux-downcase-region app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Crux: downcased region")))
+
+(def (cmd-crux-capitalize-region app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Crux: capitalized region")))
+
+(def (cmd-crux-other-window-or-switch-buffer app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Crux: other window or switch buffer")))
+
+(def (cmd-crux-sudo-edit app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Crux: editing with sudo")))
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index 37640d7..fe4eef2 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -20134,3 +20134,47 @@
 (def (cmd-ement-send-file app)
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "Ement: sent file")))
+
+;;; Round 228 — Spell-fu ext, Crux ext (batch 1)
+
+(def (cmd-spell-fu-goto-next-error app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Spell-fu: goto next error")))
+
+(def (cmd-spell-fu-goto-previous-error app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Spell-fu: goto previous error")))
+
+(def (cmd-spell-fu-reset app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Spell-fu: reset")))
+
+(def (cmd-crux-move-beginning-of-line app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Crux: moved to beginning of line")))
+
+(def (cmd-crux-kill-line-backwards app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Crux: killed line backwards")))
+
+(def (cmd-crux-kill-and-join-forward app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Crux: killed and joined forward")))
+
+(def (cmd-crux-duplicate-current-line-or-region app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Crux: duplicated line or region")))
+
+(def (cmd-crux-duplicate-and-comment-current-line-or-region app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Crux: duplicated and commented line or region")))
+
+(def (cmd-crux-rename-file-and-buffer app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "New name: "
+      (lambda (name)
+        (echo-message! echo (str "Crux: renamed to " name))))))
+
+(def (cmd-crux-view-url app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Crux: viewing URL")))
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index b47c154..a8a9ef0 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -6221,4 +6221,25 @@
   (register-command! 'ement-ignore-user cmd-ement-ignore-user)
   (register-command! 'ement-unignore-user cmd-ement-unignore-user)
   (register-command! 'ement-room-toggle-space cmd-ement-room-toggle-space)
+  ;; Round 228
+  (register-command! 'spell-fu-goto-next-error cmd-spell-fu-goto-next-error)
+  (register-command! 'spell-fu-goto-previous-error cmd-spell-fu-goto-previous-error)
+  (register-command! 'spell-fu-reset cmd-spell-fu-reset)
+  (register-command! 'crux-move-beginning-of-line cmd-crux-move-beginning-of-line)
+  (register-command! 'crux-kill-line-backwards cmd-crux-kill-line-backwards)
+  (register-command! 'crux-kill-and-join-forward cmd-crux-kill-and-join-forward)
+  (register-command! 'crux-duplicate-current-line-or-region cmd-crux-duplicate-current-line-or-region)
+  (register-command! 'crux-duplicate-and-comment-current-line-or-region cmd-crux-duplicate-and-comment-current-line-or-region)
+  (register-command! 'crux-rename-file-and-buffer cmd-crux-rename-file-and-buffer)
+  (register-command! 'crux-view-url cmd-crux-view-url)
+  (register-command! 'crux-switch-to-previous-buffer cmd-crux-switch-to-previous-buffer)
+  (register-command! 'crux-reopen-as-root cmd-crux-reopen-as-root)
+  (register-command! 'crux-find-user-init-file cmd-crux-find-user-init-file)
+  (register-command! 'crux-find-shell-init-file cmd-crux-find-shell-init-file)
+  (register-command! 'crux-ispell-word-then-abbrev cmd-crux-ispell-word-then-abbrev)
+  (register-command! 'crux-upcase-region cmd-crux-upcase-region)
+  (register-command! 'crux-downcase-region cmd-crux-downcase-region)
+  (register-command! 'crux-capitalize-region cmd-crux-capitalize-region)
+  (register-command! 'crux-other-window-or-switch-buffer cmd-crux-other-window-or-switch-buffer)
+  (register-command! 'crux-sudo-edit cmd-crux-sudo-edit)
 )