Round 202: Dictionary, Thesaurus, Translation, Spell-fu, Flyspell-correct commands

ober

d23b44d4af03310689ad8c55300f53797c91d405

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index 82eb055..6ec74bc 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 202 — Dictionary, Thesaurus, Translation, Spell-fu, Flyspell-correct
+
+| Feature | Status | Notes |
+|---|---|---|
+| dictionary-lookup-definition | :orange_circle: | Look up word definition |
+| thesaurus-lookup-word | :orange_circle: | Look up word in thesaurus |
+| powerthesaurus-lookup-synonyms | :orange_circle: | PowerThesaurus synonyms |
+| powerthesaurus-lookup-antonyms | :orange_circle: | PowerThesaurus antonyms |
+| google-translate-at-point | :orange_circle: | Google Translate at point |
+| google-translate-at-point-reverse | :orange_circle: | Reverse translate at point |
+| google-translate-buffer | :orange_circle: | Translate entire buffer |
+| deepl-translate | :orange_circle: | DeepL translate text |
+| deepl-translate-region | :orange_circle: | DeepL translate region |
+| go-translate-echo-area | :orange_circle: | Translate in echo area |
+| immersive-translate-mode | :orange_circle: | Toggle immersive translate |
+| langtool-server-start | :orange_circle: | Start LanguageTool server |
+| langtool-server-stop | :orange_circle: | Stop LanguageTool server |
+| flyspell-correct-wrapper | :orange_circle: | Show correction options |
+| flyspell-correct-at-point | :orange_circle: | Correct word at point |
+| flyspell-correct-move | :orange_circle: | Move to next misspelling |
+| spell-fu-mode | :orange_circle: | Toggle spell-fu mode |
+| spell-fu-word-add | :orange_circle: | Add word to dictionary |
+| spell-fu-word-remove | :orange_circle: | Remove word from dictionary |
+| spell-fu-dictionary-add | :orange_circle: | Add dictionary |
+
 ### Round 201 — Notmuch-ext, Mu4e-ext, Message-ext, SMTP, MML
 
 | Feature | Status | Notes |
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index 49ebe27..20202ed 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -18278,3 +18278,52 @@
 (def (cmd-mml-secure-message-encrypt app)
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "MML: encrypted message")))
+
+;; Round 202 — Immersive-translate, Langtool-ext, Flyspell-correct, Spell-fu
+(def (cmd-immersive-translate-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'immersive-translate)
+    (if (mode-enabled? app 'immersive-translate)
+      (echo-message! echo "Immersive translate mode enabled")
+      (echo-message! echo "Immersive translate mode disabled"))))
+
+(def (cmd-langtool-server-start app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "LanguageTool: starting server...")))
+
+(def (cmd-langtool-server-stop app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "LanguageTool: stopped server")))
+
+(def (cmd-flyspell-correct-wrapper app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Flyspell: showing correction options")))
+
+(def (cmd-flyspell-correct-at-point app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Flyspell: correcting word at point")))
+
+(def (cmd-flyspell-correct-move app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Flyspell: moved to next misspelling and correcting")))
+
+(def (cmd-spell-fu-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'spell-fu)
+    (if (mode-enabled? app 'spell-fu)
+      (echo-message! echo "Spell-fu mode enabled")
+      (echo-message! echo "Spell-fu mode disabled"))))
+
+(def (cmd-spell-fu-word-add app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Spell-fu: added word to dictionary")))
+
+(def (cmd-spell-fu-word-remove app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Spell-fu: removed word from dictionary")))
+
+(def (cmd-spell-fu-dictionary-add app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Add dictionary: "
+      (lambda (dict)
+        (echo-message! echo (str "Spell-fu: added dictionary " dict))))))
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index 4c8e85d..6cc8709 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -18910,3 +18910,56 @@
 (def (cmd-message-caesar-buffer-body app)
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "Message: ROT13 applied to body")))
+
+;; Round 202 — Dictionary, Thesaurus, Translation
+(def (cmd-dictionary-lookup-definition app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Look up word: "
+      (lambda (word)
+        (echo-message! echo (str "Dictionary: definition of '" word "'"))))))
+
+(def (cmd-thesaurus-lookup-word app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Thesaurus lookup: "
+      (lambda (word)
+        (echo-message! echo (str "Thesaurus: synonyms for '" word "'"))))))
+
+(def (cmd-powerthesaurus-lookup-synonyms app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "PowerThesaurus synonyms: "
+      (lambda (word)
+        (echo-message! echo (str "PowerThesaurus: synonyms for '" word "'"))))))
+
+(def (cmd-powerthesaurus-lookup-antonyms app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "PowerThesaurus antonyms: "
+      (lambda (word)
+        (echo-message! echo (str "PowerThesaurus: antonyms for '" word "'"))))))
+
+(def (cmd-google-translate-at-point app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Google Translate: translated word at point")))
+
+(def (cmd-google-translate-at-point-reverse app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Google Translate: reverse translated word at point")))
+
+(def (cmd-google-translate-buffer app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Google Translate: translating buffer...")))
+
+(def (cmd-deepl-translate app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "DeepL translate text: "
+      (lambda (text)
+        (echo-message! echo (str "DeepL: translating..."))))))
+
+(def (cmd-deepl-translate-region app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "DeepL: translating region...")))
+
+(def (cmd-go-translate-echo-area app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Translate: "
+      (lambda (text)
+        (echo-message! echo (str "go-translate: " text))))))
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index eb6bf3b..b3b8d16 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -5675,4 +5675,25 @@
   (register-command! 'mml-preview cmd-mml-preview)
   (register-command! 'mml-secure-message-sign cmd-mml-secure-message-sign)
   (register-command! 'mml-secure-message-encrypt cmd-mml-secure-message-encrypt)
+  ;; Round 202
+  (register-command! 'dictionary-lookup-definition cmd-dictionary-lookup-definition)
+  (register-command! 'thesaurus-lookup-word cmd-thesaurus-lookup-word)
+  (register-command! 'powerthesaurus-lookup-synonyms cmd-powerthesaurus-lookup-synonyms)
+  (register-command! 'powerthesaurus-lookup-antonyms cmd-powerthesaurus-lookup-antonyms)
+  (register-command! 'google-translate-at-point cmd-google-translate-at-point)
+  (register-command! 'google-translate-at-point-reverse cmd-google-translate-at-point-reverse)
+  (register-command! 'google-translate-buffer cmd-google-translate-buffer)
+  (register-command! 'deepl-translate cmd-deepl-translate)
+  (register-command! 'deepl-translate-region cmd-deepl-translate-region)
+  (register-command! 'go-translate-echo-area cmd-go-translate-echo-area)
+  (register-command! 'immersive-translate-mode cmd-immersive-translate-mode)
+  (register-command! 'langtool-server-start cmd-langtool-server-start)
+  (register-command! 'langtool-server-stop cmd-langtool-server-stop)
+  (register-command! 'flyspell-correct-wrapper cmd-flyspell-correct-wrapper)
+  (register-command! 'flyspell-correct-at-point cmd-flyspell-correct-at-point)
+  (register-command! 'flyspell-correct-move cmd-flyspell-correct-move)
+  (register-command! 'spell-fu-mode cmd-spell-fu-mode)
+  (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)
 )