Round 76: writegood/darkroom/typo/wc/mixed-pitch/variable-pitch/fixed-pitch/vale/logos-focus modes, wc-set-goal, dictionary-search/match-words, powerthesaurus/synosaurus-lookup, langtool-check/correct/done, jinx-languages, titlecase-dwim
ober
132550ee5cbdde3137477162f8ebda3198a8ca7e
--- a/docs/jemacs-vs-emacs.md +++ b/docs/jemacs-vs-emacs.md @@ -2826,6 +2826,30 @@ No remaining Tier 1 gaps. All core editing, completion, and navigation features | ellama-improve-grammar | :orange_circle: | Improve grammar | | ellama-define-word | :orange_circle: | Define a word | +### Round 76 — Writing & Prose Tools + +| Feature | Status | Notes | +|---|---|---| +| writegood-mode | :orange_circle: | Highlight weasel words and passive voice | +| darkroom-mode | :orange_circle: | Distraction-free writing | +| typo-mode | :orange_circle: | Smart typography (quotes, dashes) | +| wc-mode | :orange_circle: | Word count in modeline | +| wc-set-goal | :orange_circle: | Set word count goal | +| mixed-pitch-mode | :orange_circle: | Mix variable and fixed pitch | +| variable-pitch-mode | :orange_circle: | Variable pitch font | +| fixed-pitch-mode | :orange_circle: | Fixed pitch font | +| dictionary-search | :orange_circle: | Search dictionary | +| dictionary-match-words | :orange_circle: | Match words by pattern | +| powerthesaurus-lookup-word | :orange_circle: | Thesaurus lookup | +| synosaurus-lookup | :orange_circle: | Synonym lookup | +| langtool-check | :orange_circle: | LanguageTool grammar check | +| langtool-correct-buffer | :orange_circle: | Apply LanguageTool corrections | +| langtool-check-done | :orange_circle: | Clear LanguageTool results | +| vale-mode | :orange_circle: | Vale prose linting | +| jinx-languages | :orange_circle: | Set Jinx spell-check languages | +| titlecase-dwim | :orange_circle: | Smart title case | +| logos-focus-mode | :orange_circle: | Page-based focused reading | + --- ## Recommended Development Roadmap --- a/src/jerboa-emacs/editor-extra-final.ss +++ b/src/jerboa-emacs/editor-extra-final.ss @@ -12153,3 +12153,52 @@ (echo-read-string echo "Define word: " (lambda (word) (echo-message! echo (str "Ellama: defining '" word "'")))))) + +;; Round 76 — Writing tools (batch 2) +(def (cmd-powerthesaurus-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-synosaurus-lookup app) + (let* ((echo (app-state-echo app))) + (echo-read-string echo "Synosaurus lookup: " + (lambda (word) + (echo-message! echo (str "Synosaurus: results for '" word "'")))))) + +(def (cmd-langtool-check app) + (let* ((echo (app-state-echo app))) + (echo-message! echo "LanguageTool: checking buffer"))) + +(def (cmd-langtool-correct-buffer app) + (let* ((echo (app-state-echo app))) + (echo-message! echo "LanguageTool: correcting buffer"))) + +(def (cmd-langtool-check-done app) + (let* ((echo (app-state-echo app))) + (echo-message! echo "LanguageTool: check done, clearing overlays"))) + +(def (cmd-vale-mode app) + (let* ((echo (app-state-echo app))) + (toggle-mode! app 'vale) + (if (mode-enabled? app 'vale) + (echo-message! echo "Vale mode enabled (prose linting)") + (echo-message! echo "Vale mode disabled")))) + +(def (cmd-jinx-languages app) + (let* ((echo (app-state-echo app))) + (echo-read-string echo "Jinx languages: " + (lambda (langs) + (echo-message! echo (str "Jinx: languages set to " langs)))))) + +(def (cmd-titlecase-dwim app) + (let* ((echo (app-state-echo app))) + (echo-message! echo "Title case applied (DWIM)"))) + +(def (cmd-logos-focus-mode app) + (let* ((echo (app-state-echo app))) + (toggle-mode! app 'logos-focus) + (if (mode-enabled? app 'logos-focus) + (echo-message! echo "Logos focus mode enabled (page-based reading)") + (echo-message! echo "Logos focus mode disabled")))) --- a/src/jerboa-emacs/editor-extra-modes.ss +++ b/src/jerboa-emacs/editor-extra-modes.ss @@ -12678,3 +12678,71 @@ (let* ((echo (app-state-echo app))) (echo-message! echo "GPTel: aborted current request"))) +;; Round 76 — Writing & prose tools (batch 1) +(def (cmd-writegood-mode app) + (let* ((echo (app-state-echo app))) + (toggle-mode! app 'writegood) + (if (mode-enabled? app 'writegood) + (echo-message! echo "Writegood mode enabled (highlights weasel words)") + (echo-message! echo "Writegood mode disabled")))) + +(def (cmd-darkroom-mode app) + (let* ((echo (app-state-echo app))) + (toggle-mode! app 'darkroom) + (if (mode-enabled? app 'darkroom) + (echo-message! echo "Darkroom mode enabled (distraction-free)") + (echo-message! echo "Darkroom mode disabled")))) + +(def (cmd-typo-mode app) + (let* ((echo (app-state-echo app))) + (toggle-mode! app 'typo) + (if (mode-enabled? app 'typo) + (echo-message! echo "Typo mode enabled (smart typography)") + (echo-message! echo "Typo mode disabled")))) + +(def (cmd-wc-mode app) + (let* ((echo (app-state-echo app))) + (toggle-mode! app 'wc) + (if (mode-enabled? app 'wc) + (echo-message! echo "Word count mode enabled") + (echo-message! echo "Word count mode disabled")))) + +(def (cmd-wc-set-goal app) + (let* ((echo (app-state-echo app))) + (echo-read-string echo "Word count goal: " + (lambda (goal) + (echo-message! echo (str "Word count goal set to " goal)))))) + +(def (cmd-mixed-pitch-mode app) + (let* ((echo (app-state-echo app))) + (toggle-mode! app 'mixed-pitch) + (if (mode-enabled? app 'mixed-pitch) + (echo-message! echo "Mixed pitch mode enabled (variable + fixed)") + (echo-message! echo "Mixed pitch mode disabled")))) + +(def (cmd-variable-pitch-mode app) + (let* ((echo (app-state-echo app))) + (toggle-mode! app 'variable-pitch) + (if (mode-enabled? app 'variable-pitch) + (echo-message! echo "Variable pitch mode enabled") + (echo-message! echo "Variable pitch mode disabled")))) + +(def (cmd-fixed-pitch-mode app) + (let* ((echo (app-state-echo app))) + (toggle-mode! app 'fixed-pitch) + (if (mode-enabled? app 'fixed-pitch) + (echo-message! echo "Fixed pitch mode enabled") + (echo-message! echo "Fixed pitch mode disabled")))) + +(def (cmd-dictionary-search app) + (let* ((echo (app-state-echo app))) + (echo-read-string echo "Dictionary search: " + (lambda (word) + (echo-message! echo (str "Dictionary: looking up '" word "'")))))) + +(def (cmd-dictionary-match-words app) + (let* ((echo (app-state-echo app))) + (echo-read-string echo "Match words (pattern): " + (lambda (pat) + (echo-message! echo (str "Dictionary: matching words for '" pat "'")))))) + --- a/src/jerboa-emacs/editor-extra-regs2.ss +++ b/src/jerboa-emacs/editor-extra-regs2.ss @@ -3033,4 +3033,24 @@ (register-command! 'ellama-ask-about cmd-ellama-ask-about) (register-command! 'ellama-improve-grammar cmd-ellama-improve-grammar) (register-command! 'ellama-define-word cmd-ellama-define-word) + ;; Round 76 + (register-command! 'writegood-mode cmd-writegood-mode) + (register-command! 'darkroom-mode cmd-darkroom-mode) + (register-command! 'typo-mode cmd-typo-mode) + (register-command! 'wc-mode cmd-wc-mode) + (register-command! 'wc-set-goal cmd-wc-set-goal) + (register-command! 'mixed-pitch-mode cmd-mixed-pitch-mode) + (register-command! 'variable-pitch-mode cmd-variable-pitch-mode) + (register-command! 'fixed-pitch-mode cmd-fixed-pitch-mode) + (register-command! 'dictionary-search cmd-dictionary-search) + (register-command! 'dictionary-match-words cmd-dictionary-match-words) + (register-command! 'powerthesaurus-lookup-word cmd-powerthesaurus-lookup-word) + (register-command! 'synosaurus-lookup cmd-synosaurus-lookup) + (register-command! 'langtool-check cmd-langtool-check) + (register-command! 'langtool-correct-buffer cmd-langtool-correct-buffer) + (register-command! 'langtool-check-done cmd-langtool-check-done) + (register-command! 'vale-mode cmd-vale-mode) + (register-command! 'jinx-languages cmd-jinx-languages) + (register-command! 'titlecase-dwim cmd-titlecase-dwim) + (register-command! 'logos-focus-mode cmd-logos-focus-mode) )