Round 841-880: Emacspeak, Festival, IBus, Fcitx, Mozc, Anthy, SKK, Pyim, Modalka, Ryo-modal, Evil-easymotion, Evil-org, Ghost-text, Atomic-chrome, Walkman, Impostman, Hurl, Bencode, Espeak, Speechd, Slack, Discord, Reddit, HackerNews, Lobsters, Solr, SCIM, UIM, Cabal, Bower, Snowpack, ImageMagick, Unity, Unreal, GIMP, Inkscape, OBS, VLC, Hangul, Cangjie, Jabber, XMPP, Bitlbee, Weechat, ZNC, Woman, Dash-docs, Zeal, Howdoi, LeetCode, Exercism, Codewars, AoC, Rosetta, Dired-collapse, Dired-rsync, Telega, SX, TLDR, Cheat, DevDocs, Info, Dirvish, Dired-narrow, Dired-ranger, Dired-sidebar, Project, Projectile, Treemacs, ERC, Rcirc, Ement, Matrix, Man, Elfeed, Newsticker, URL, SHR (400 commands)

ober

b323f2914bff1be2940ac0fc36cb299b6f96896f

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index b28d907..bc9c90c 100644
--- a/docs/jemacs-vs-emacs.md
+++ b/docs/jemacs-vs-emacs.md
@@ -7788,6 +7788,566 @@ No remaining Tier 1 gaps. All core editing, completion, and navigation features 
 | `burly-tabs-mode` | :orange_circle: | Enable Burly tabs mode |
 | `burly-reset-tab` | :orange_circle: | Reset Burly tab |
 | `burly-open-url` | :orange_circle: | Open Burly URL |
+
+### Round 841: Emacspeak / Festival (10 commands)
+| Command | Status | Description |
+|---------|--------|-------------|
+| `emacspeak-mode` | :orange_circle: | Enable Emacspeak mode |
+| `emacspeak-toggle-speech` | :orange_circle: | Toggle Emacspeak speech |
+| `emacspeak-speak-line` | :orange_circle: | Speak current line |
+| `emacspeak-speak-region` | :orange_circle: | Speak selected region |
+| `emacspeak-speak-buffer` | :orange_circle: | Speak entire buffer |
+| `festival-mode` | :orange_circle: | Enable Festival TTS mode |
+| `festival-say-region` | :orange_circle: | Say selected region |
+| `festival-say-buffer` | :orange_circle: | Say entire buffer |
+| `festival-set-voice` | :orange_circle: | Set Festival voice |
+| `festival-stop` | :orange_circle: | Stop Festival speech |
+
+### Round 842: IBus / Fcitx (10 commands)
+| Command | Status | Description |
+|---------|--------|-------------|
+| `ibus-mode` | :orange_circle: | Enable IBus mode |
+| `ibus-toggle` | :orange_circle: | Toggle IBus input |
+| `ibus-next-engine` | :orange_circle: | Switch to next IBus engine |
+| `ibus-prev-engine` | :orange_circle: | Switch to previous IBus engine |
+| `ibus-setup` | :orange_circle: | Open IBus setup |
+| `fcitx-mode` | :orange_circle: | Enable Fcitx mode |
+| `fcitx-toggle` | :orange_circle: | Toggle Fcitx input |
+| `fcitx-remote-status` | :orange_circle: | Show Fcitx remote status |
+| `fcitx-switch-input-method` | :orange_circle: | Switch Fcitx input method |
+| `fcitx-reload-config` | :orange_circle: | Reload Fcitx config |
+
+### Round 843: Mozc / Anthy (10 commands)
+| Command | Status | Description |
+|---------|--------|-------------|
+| `mozc-mode` | :orange_circle: | Enable Mozc mode |
+| `mozc-toggle` | :orange_circle: | Toggle Mozc input |
+| `mozc-set-mode` | :orange_circle: | Set Mozc input mode |
+| `mozc-reconvert` | :orange_circle: | Reconvert with Mozc |
+| `mozc-config` | :orange_circle: | Configure Mozc |
+| `anthy-mode` | :orange_circle: | Enable Anthy mode |
+| `anthy-toggle` | :orange_circle: | Toggle Anthy input |
+| `anthy-set-mode` | :orange_circle: | Set Anthy input mode |
+| `anthy-reconvert` | :orange_circle: | Reconvert with Anthy |
+| `anthy-config` | :orange_circle: | Configure Anthy |
+
+### Round 844: SKK / Pyim (10 commands)
+| Command | Status | Description |
+|---------|--------|-------------|
+| `skk-mode` | :orange_circle: | Enable SKK mode |
+| `skk-toggle` | :orange_circle: | Toggle SKK input |
+| `skk-set-henkan-point` | :orange_circle: | Set SKK henkan point |
+| `skk-auto-fill-mode` | :orange_circle: | SKK auto fill mode |
+| `skk-setup` | :orange_circle: | Setup SKK |
+| `pyim-mode` | :orange_circle: | Enable Pyim mode |
+| `pyim-toggle` | :orange_circle: | Toggle Pyim input |
+| `pyim-convert` | :orange_circle: | Convert with Pyim |
+| `pyim-select-word` | :orange_circle: | Select Pyim word |
+| `pyim-add-word` | :orange_circle: | Add word to Pyim |
+
+### Round 845: Modalka / Ryo-modal (10 commands)
+| Command | Status | Description |
+|---------|--------|-------------|
+| `modalka-mode` | :orange_circle: | Enable Modalka mode |
+| `modalka-define-key` | :orange_circle: | Define Modalka key |
+| `modalka-define-kbd-macro` | :orange_circle: | Define Modalka kbd macro |
+| `modalka-remove-key` | :orange_circle: | Remove Modalka key |
+| `modalka-global-mode` | :orange_circle: | Enable Modalka global mode |
+| `ryo-modal-mode` | :orange_circle: | Enable Ryo-modal mode |
+| `ryo-modal-key` | :orange_circle: | Define Ryo-modal key |
+| `ryo-modal-keys` | :orange_circle: | Define Ryo-modal keys |
+| `ryo-modal-repeat` | :orange_circle: | Repeat Ryo-modal last |
+| `ryo-modal-which-key` | :orange_circle: | Ryo-modal which-key |
+
+### Round 846: Evil-easymotion / Evil-org (10 commands)
+| Command | Status | Description |
+|---------|--------|-------------|
+| `evil-easymotion-mode` | :orange_circle: | Enable Evil-easymotion mode |
+| `evil-easymotion-forward` | :orange_circle: | Easymotion forward |
+| `evil-easymotion-backward` | :orange_circle: | Easymotion backward |
+| `evil-easymotion-next-line` | :orange_circle: | Easymotion next line |
+| `evil-easymotion-search` | :orange_circle: | Easymotion search |
+| `evil-org-mode` | :orange_circle: | Enable Evil-org mode |
+| `evil-org-agenda-set-keys` | :orange_circle: | Set Evil-org agenda keys |
+| `evil-org-set-key-theme` | :orange_circle: | Set Evil-org key theme |
+| `evil-org-open-above` | :orange_circle: | Evil-org open above |
+| `evil-org-open-below` | :orange_circle: | Evil-org open below |
+
+### Round 847: Ghost-text / Atomic-chrome ext (10 commands)
+| Command | Status | Description |
+|---------|--------|-------------|
+| `ghost-text-mode` | :orange_circle: | Enable Ghost-text mode |
+| `ghost-text-start` | :orange_circle: | Start Ghost-text server |
+| `ghost-text-stop` | :orange_circle: | Stop Ghost-text server |
+| `ghost-text-set-port` | :orange_circle: | Set Ghost-text port |
+| `ghost-text-toggle` | :orange_circle: | Toggle Ghost-text |
+| `atomic-chrome-edit-done` | :orange_circle: | Finish Atomic Chrome edit |
+| `atomic-chrome-edit-abort` | :orange_circle: | Abort Atomic Chrome edit |
+| `atomic-chrome-set-url-map` | :orange_circle: | Set Atomic Chrome URL map |
+| `atomic-chrome-toggle-auto` | :orange_circle: | Toggle Atomic Chrome auto |
+| `atomic-chrome-set-extension` | :orange_circle: | Set Atomic Chrome extension |
+
+### Round 848: Walkman / Impostman (10 commands)
+| Command | Status | Description |
+|---------|--------|-------------|
+| `walkman-mode` | :orange_circle: | Enable Walkman mode |
+| `walkman-execute` | :orange_circle: | Execute Walkman request |
+| `walkman-at-point` | :orange_circle: | Run Walkman at point |
+| `walkman-set-var` | :orange_circle: | Set Walkman variable |
+| `walkman-copy-as-curl` | :orange_circle: | Copy Walkman as curl |
+| `impostman-import` | :orange_circle: | Import Impostman collection |
+| `impostman-discover-api` | :orange_circle: | Discover Impostman API |
+| `impostman-set-env` | :orange_circle: | Set Impostman environment |
+| `impostman-run-collection` | :orange_circle: | Run Impostman collection |
+| `impostman-export` | :orange_circle: | Export Impostman |
+
+### Round 849: Hurl ext / Bencode (10 commands)
+| Command | Status | Description |
+|---------|--------|-------------|
+| `hurl-run-file` | :orange_circle: | Run Hurl file |
+| `hurl-run-entry` | :orange_circle: | Run Hurl entry |
+| `hurl-set-variable` | :orange_circle: | Set Hurl variable |
+| `hurl-format` | :orange_circle: | Format Hurl file |
+| `hurl-validate` | :orange_circle: | Validate Hurl file |
+| `bencode-decode` | :orange_circle: | Decode bencode |
+| `bencode-encode` | :orange_circle: | Encode bencode |
+| `bencode-decode-region` | :orange_circle: | Decode bencode region |
+| `bencode-encode-region` | :orange_circle: | Encode bencode region |
+| `bencode-format` | :orange_circle: | Format bencode |
+
+### Round 850: Espeak / Speechd ext (10 commands)
+| Command | Status | Description |
+|---------|--------|-------------|
+| `espeak-mode` | :orange_circle: | Enable Espeak mode |
+| `espeak-speak-region` | :orange_circle: | Speak region with Espeak |
+| `espeak-speak-buffer` | :orange_circle: | Speak buffer with Espeak |
+| `espeak-set-voice` | :orange_circle: | Set Espeak voice |
+| `espeak-set-rate` | :orange_circle: | Set Espeak rate |
+| `speechd-set-voice` | :orange_circle: | Set Speechd voice |
+| `speechd-set-speech-rate` | :orange_circle: | Set Speechd speech rate |
+| `speechd-pause` | :orange_circle: | Pause Speechd |
+| `speechd-resume` | :orange_circle: | Resume Speechd |
+| `speechd-cancel` | :orange_circle: | Cancel Speechd |
+
+### Round 851: Slack / Discord ext (10 commands)
+| Command | Status | Description |
+|---------|--------|-------------|
+| `slack-mode` | :orange_circle: | Enable Slack mode |
+| `slack-channel-select` | :orange_circle: | Select Slack channel |
+| `slack-post-message` | :orange_circle: | Post Slack message |
+| `slack-upload-file` | :orange_circle: | Upload file to Slack |
+| `slack-search-messages` | :orange_circle: | Search Slack messages |
+| `discord-connect` | :orange_circle: | Connect to Discord |
+| `discord-disconnect` | :orange_circle: | Disconnect from Discord |
+| `discord-send-message` | :orange_circle: | Send Discord message |
+| `discord-join-channel` | :orange_circle: | Join Discord channel |
+| `discord-list-servers` | :orange_circle: | List Discord servers |
+
+### Round 852: Reddit / HackerNews (10 commands)
+| Command | Status | Description |
+|---------|--------|-------------|
+| `reddit-mode` | :orange_circle: | Enable Reddit mode |
+| `reddit-browse-subreddit` | :orange_circle: | Browse subreddit |
+| `reddit-browse-front-page` | :orange_circle: | Browse Reddit front page |
+| `reddit-submit-post` | :orange_circle: | Submit Reddit post |
+| `reddit-view-comments` | :orange_circle: | View Reddit comments |
+| `hackernews-browse` | :orange_circle: | Browse HackerNews |
+| `hackernews-top-stories` | :orange_circle: | HackerNews top stories |
+| `hackernews-new-stories` | :orange_circle: | HackerNews new stories |
+| `hackernews-ask-stories` | :orange_circle: | HackerNews ask stories |
+| `hackernews-show-stories` | :orange_circle: | HackerNews show stories |
+
+### Round 853: Lobsters / Solr (10 commands)
+| Command | Status | Description |
+|---------|--------|-------------|
+| `lobsters-mode` | :orange_circle: | Enable Lobsters mode |
+| `lobsters-browse` | :orange_circle: | Browse Lobsters |
+| `lobsters-newest` | :orange_circle: | Lobsters newest stories |
+| `lobsters-hottest` | :orange_circle: | Lobsters hottest stories |
+| `lobsters-submit` | :orange_circle: | Submit to Lobsters |
+| `solr-mode` | :orange_circle: | Enable Solr mode |
+| `solr-query` | :orange_circle: | Query Solr |
+| `solr-add-document` | :orange_circle: | Add Solr document |
+| `solr-delete-document` | :orange_circle: | Delete Solr document |
+| `solr-commit` | :orange_circle: | Commit Solr changes |
+
+### Round 854: SCIM / UIM (10 commands)
+| Command | Status | Description |
+|---------|--------|-------------|
+| `scim-mode` | :orange_circle: | Enable SCIM mode |
+| `scim-toggle` | :orange_circle: | Toggle SCIM |
+| `scim-next-input` | :orange_circle: | SCIM next input |
+| `scim-prev-input` | :orange_circle: | SCIM previous input |
+| `scim-setup` | :orange_circle: | Setup SCIM |
+| `uim-mode` | :orange_circle: | Enable UIM mode |
+| `uim-toggle` | :orange_circle: | Toggle UIM |
+| `uim-switch-im` | :orange_circle: | Switch UIM input method |
+| `uim-pref-set` | :orange_circle: | Set UIM preference |
+| `uim-toolbar-toggle` | :orange_circle: | Toggle UIM toolbar |
+
+### Round 855: Cabal / Bower (10 commands)
+| Command | Status | Description |
+|---------|--------|-------------|
+| `cabal-mode` | :orange_circle: | Enable Cabal mode |
+| `cabal-build` | :orange_circle: | Cabal build |
+| `cabal-test` | :orange_circle: | Cabal test |
+| `cabal-run` | :orange_circle: | Cabal run |
+| `cabal-clean` | :orange_circle: | Cabal clean |
+| `bower-install` | :orange_circle: | Bower install |
+| `bower-update` | :orange_circle: | Bower update |
+| `bower-search` | :orange_circle: | Bower search |
+| `bower-list` | :orange_circle: | Bower list |
+| `bower-uninstall` | :orange_circle: | Bower uninstall |
+
+### Round 856: Snowpack / ImageMagick (10 commands)
+| Command | Status | Description |
+|---------|--------|-------------|
+| `snowpack-start` | :orange_circle: | Start Snowpack |
+| `snowpack-build` | :orange_circle: | Snowpack build |
+| `snowpack-dev` | :orange_circle: | Snowpack dev server |
+| `snowpack-add-plugin` | :orange_circle: | Add Snowpack plugin |
+| `snowpack-config` | :orange_circle: | Snowpack config |
+| `imagemagick-convert` | :orange_circle: | ImageMagick convert |
+| `imagemagick-resize` | :orange_circle: | ImageMagick resize |
+| `imagemagick-crop` | :orange_circle: | ImageMagick crop |
+| `imagemagick-rotate` | :orange_circle: | ImageMagick rotate |
+| `imagemagick-composite` | :orange_circle: | ImageMagick composite |
+
+### Round 857: Unity / Unreal (10 commands)
+| Command | Status | Description |
+|---------|--------|-------------|
+| `unity-mode` | :orange_circle: | Enable Unity mode |
+| `unity-build` | :orange_circle: | Unity build |
+| `unity-run` | :orange_circle: | Unity run |
+| `unity-attach-debugger` | :orange_circle: | Attach Unity debugger |
+| `unity-open-project` | :orange_circle: | Open Unity project |
+| `unreal-mode` | :orange_circle: | Enable Unreal mode |
+| `unreal-build` | :orange_circle: | Unreal build |
+| `unreal-cook` | :orange_circle: | Unreal cook content |
+| `unreal-package` | :orange_circle: | Unreal package |
+| `unreal-open-editor` | :orange_circle: | Open Unreal editor |
+
+### Round 858: GIMP / Inkscape (10 commands)
+| Command | Status | Description |
+|---------|--------|-------------|
+| `gimp-mode` | :orange_circle: | Enable GIMP mode |
+| `gimp-open-file` | :orange_circle: | Open file in GIMP |
+| `gimp-script-fu` | :orange_circle: | Run GIMP Script-Fu |
+| `gimp-batch-process` | :orange_circle: | GIMP batch process |
+| `gimp-export` | :orange_circle: | GIMP export |
+| `inkscape-mode` | :orange_circle: | Enable Inkscape mode |
+| `inkscape-open-file` | :orange_circle: | Open file in Inkscape |
+| `inkscape-export-png` | :orange_circle: | Inkscape export PNG |
+| `inkscape-export-svg` | :orange_circle: | Inkscape export SVG |
+| `inkscape-batch-process` | :orange_circle: | Inkscape batch process |
+
+### Round 859: OBS / VLC (10 commands)
+| Command | Status | Description |
+|---------|--------|-------------|
+| `obs-mode` | :orange_circle: | Enable OBS mode |
+| `obs-start-recording` | :orange_circle: | Start OBS recording |
+| `obs-stop-recording` | :orange_circle: | Stop OBS recording |
+| `obs-switch-scene` | :orange_circle: | Switch OBS scene |
+| `obs-toggle-stream` | :orange_circle: | Toggle OBS stream |
+| `vlc-mode` | :orange_circle: | Enable VLC mode |
+| `vlc-play` | :orange_circle: | VLC play |
+| `vlc-pause` | :orange_circle: | VLC pause |
+| `vlc-stop` | :orange_circle: | VLC stop |
+| `vlc-next-track` | :orange_circle: | VLC next track |
+
+### Round 860: Hangul / Cangjie (10 commands)
+| Command | Status | Description |
+|---------|--------|-------------|
+| `hangul-mode` | :orange_circle: | Enable Hangul mode |
+| `hangul-toggle` | :orange_circle: | Toggle Hangul input |
+| `hangul-set-keyboard` | :orange_circle: | Set Hangul keyboard |
+| `hangul-switch-hanja` | :orange_circle: | Switch Hangul hanja |
+| `hangul-setup` | :orange_circle: | Setup Hangul |
+| `cangjie-mode` | :orange_circle: | Enable Cangjie mode |
+| `cangjie-toggle` | :orange_circle: | Toggle Cangjie input |
+| `cangjie-set-version` | :orange_circle: | Set Cangjie version |
+| `cangjie-quick-mode` | :orange_circle: | Cangjie quick mode |
+| `cangjie-setup` | :orange_circle: | Setup Cangjie |
+
+### Round 861: Jabber / XMPP (10 commands)
+| Command | Status | Description |
+|---------|--------|-------------|
+| `jabber-connect` | :orange_circle: | Connect to Jabber |
+| `jabber-disconnect` | :orange_circle: | Disconnect from Jabber |
+| `jabber-send-message` | :orange_circle: | Send Jabber message |
+| `jabber-roster-toggle` | :orange_circle: | Toggle Jabber roster |
+| `jabber-chat-start` | :orange_circle: | Start Jabber chat |
+| `xmpp-connect` | :orange_circle: | Connect to XMPP |
+| `xmpp-disconnect` | :orange_circle: | Disconnect from XMPP |
+| `xmpp-send-message` | :orange_circle: | Send XMPP message |
+| `xmpp-join-room` | :orange_circle: | Join XMPP room |
+| `xmpp-set-status` | :orange_circle: | Set XMPP status |
+
+### Round 862: Bitlbee / Weechat (10 commands)
+| Command | Status | Description |
+|---------|--------|-------------|
+| `bitlbee-connect` | :orange_circle: | Connect to Bitlbee |
+| `bitlbee-disconnect` | :orange_circle: | Disconnect from Bitlbee |
+| `bitlbee-add-account` | :orange_circle: | Add Bitlbee account |
+| `bitlbee-remove-account` | :orange_circle: | Remove Bitlbee account |
+| `bitlbee-list-contacts` | :orange_circle: | List Bitlbee contacts |
+| `weechat-connect` | :orange_circle: | Connect to Weechat |
+| `weechat-disconnect` | :orange_circle: | Disconnect from Weechat |
+| `weechat-send-message` | :orange_circle: | Send Weechat message |
+| `weechat-switch-buffer` | :orange_circle: | Switch Weechat buffer |
+| `weechat-list-channels` | :orange_circle: | List Weechat channels |
+
+### Round 863: ZNC / Woman (10 commands)
+| Command | Status | Description |
+|---------|--------|-------------|
+| `znc-connect` | :orange_circle: | Connect to ZNC |
+| `znc-disconnect` | :orange_circle: | Disconnect from ZNC |
+| `znc-add-network` | :orange_circle: | Add ZNC network |
+| `znc-remove-network` | :orange_circle: | Remove ZNC network |
+| `znc-list-modules` | :orange_circle: | List ZNC modules |
+| `woman-mode` | :orange_circle: | Enable WoMan mode |
+| `woman-find-file` | :orange_circle: | WoMan find file |
+| `woman-bookmark` | :orange_circle: | WoMan bookmark |
+| `woman-next-section` | :orange_circle: | WoMan next section |
+| `woman-prev-section` | :orange_circle: | WoMan previous section |
+
+### Round 864: Dash-docs / Zeal (10 commands)
+| Command | Status | Description |
+|---------|--------|-------------|
+| `dash-docs-mode` | :orange_circle: | Enable Dash-docs mode |
+| `dash-docs-search` | :orange_circle: | Search Dash docs |
+| `dash-docs-activate-docset` | :orange_circle: | Activate Dash docset |
+| `dash-docs-deactivate-docset` | :orange_circle: | Deactivate Dash docset |
+| `dash-docs-install-docset` | :orange_circle: | Install Dash docset |
+| `zeal-mode` | :orange_circle: | Enable Zeal mode |
+| `zeal-search` | :orange_circle: | Search Zeal |
+| `zeal-search-at-point` | :orange_circle: | Search Zeal at point |
+| `zeal-install-docset` | :orange_circle: | Install Zeal docset |
+| `zeal-browse` | :orange_circle: | Browse Zeal |
+
+### Round 865: Howdoi / LeetCode (10 commands)
+| Command | Status | Description |
+|---------|--------|-------------|
+| `howdoi-query` | :orange_circle: | Query Howdoi |
+| `howdoi-search` | :orange_circle: | Search Howdoi |
+| `howdoi-insert-answer` | :orange_circle: | Insert Howdoi answer |
+| `howdoi-next-answer` | :orange_circle: | Next Howdoi answer |
+| `howdoi-prev-answer` | :orange_circle: | Previous Howdoi answer |
+| `leetcode-mode` | :orange_circle: | Enable LeetCode mode |
+| `leetcode-browse` | :orange_circle: | Browse LeetCode |
+| `leetcode-submit` | :orange_circle: | Submit LeetCode solution |
+| `leetcode-test-solution` | :orange_circle: | Test LeetCode solution |
+| `leetcode-daily-challenge` | :orange_circle: | LeetCode daily challenge |
+
+### Round 866: Exercism / Codewars (10 commands)
+| Command | Status | Description |
+|---------|--------|-------------|
+| `exercism-mode` | :orange_circle: | Enable Exercism mode |
+| `exercism-submit` | :orange_circle: | Submit Exercism solution |
+| `exercism-download` | :orange_circle: | Download Exercism exercise |
+| `exercism-browse` | :orange_circle: | Browse Exercism |
+| `exercism-test` | :orange_circle: | Test Exercism solution |
+| `codewars-mode` | :orange_circle: | Enable Codewars mode |
+| `codewars-browse` | :orange_circle: | Browse Codewars |
+| `codewars-submit` | :orange_circle: | Submit Codewars solution |
+| `codewars-test` | :orange_circle: | Test Codewars solution |
+| `codewars-next-kata` | :orange_circle: | Next Codewars kata |
+
+### Round 867: Advent-of-Code / Rosetta (10 commands)
+| Command | Status | Description |
+|---------|--------|-------------|
+| `advent-of-code-mode` | :orange_circle: | Enable AoC mode |
+| `advent-of-code-download` | :orange_circle: | Download AoC input |
+| `advent-of-code-submit` | :orange_circle: | Submit AoC answer |
+| `advent-of-code-leaderboard` | :orange_circle: | AoC leaderboard |
+| `advent-of-code-browse` | :orange_circle: | Browse AoC |
+| `rosetta-mode` | :orange_circle: | Enable Rosetta mode |
+| `rosetta-browse` | :orange_circle: | Browse Rosetta Code |
+| `rosetta-search` | :orange_circle: | Search Rosetta Code |
+| `rosetta-insert-template` | :orange_circle: | Insert Rosetta template |
+| `rosetta-compare` | :orange_circle: | Compare Rosetta solutions |
+
+### Round 868: Dired-collapse ext / Dired-rsync ext (10 commands)
+| Command | Status | Description |
+|---------|--------|-------------|
+| `dired-collapse-mode-toggle` | :orange_circle: | Toggle dired-collapse mode |
+| `dired-collapse-refresh` | :orange_circle: | Refresh dired-collapse |
+| `dired-collapse-depth` | :orange_circle: | Set dired-collapse depth |
+| `dired-collapse-dirs` | :orange_circle: | Collapse dired dirs |
+| `dired-collapse-show-hidden` | :orange_circle: | Show hidden collapsed |
+| `dired-rsync-options-menu` | :orange_circle: | Dired-rsync options menu |
+| `dired-rsync-default-options` | :orange_circle: | Dired-rsync default options |
+| `dired-rsync-compress` | :orange_circle: | Dired-rsync compress |
+| `dired-rsync-partial` | :orange_circle: | Dired-rsync partial transfer |
+| `dired-rsync-progress` | :orange_circle: | Dired-rsync show progress |
+
+### Round 869: Telega ext / SX ext (10 commands)
+| Command | Status | Description |
+|---------|--------|-------------|
+| `telega-chat-pin` | :orange_circle: | Pin Telega chat |
+| `telega-chat-unpin` | :orange_circle: | Unpin Telega chat |
+| `telega-chat-set-title` | :orange_circle: | Set Telega chat title |
+| `telega-chat-set-description` | :orange_circle: | Set Telega chat description |
+| `telega-forward-message` | :orange_circle: | Forward Telega message |
+| `sx-search-questions` | :orange_circle: | Search SX questions |
+| `sx-browse-questions` | :orange_circle: | Browse SX questions |
+| `sx-ask-question` | :orange_circle: | Ask SX question |
+| `sx-display-question` | :orange_circle: | Display SX question |
+| `sx-accept-answer` | :orange_circle: | Accept SX answer |
+
+### Round 870: TLDR ext / Cheat ext (10 commands)
+| Command | Status | Description |
+|---------|--------|-------------|
+| `tldr-update-docs` | :orange_circle: | Update TLDR docs |
+| `tldr-search` | :orange_circle: | Search TLDR |
+| `tldr-browse` | :orange_circle: | Browse TLDR |
+| `tldr-set-platform` | :orange_circle: | Set TLDR platform |
+| `tldr-contribute` | :orange_circle: | Contribute to TLDR |
+| `cheat-search` | :orange_circle: | Search cheat sheets |
+| `cheat-browse` | :orange_circle: | Browse cheat sheets |
+| `cheat-community` | :orange_circle: | Community cheat sheets |
+| `cheat-personal` | :orange_circle: | Personal cheat sheets |
+| `cheat-tags` | :orange_circle: | Cheat sheet tags |
+
+### Round 871: DevDocs ext / Info ext 2 (10 commands)
+| Command | Status | Description |
+|---------|--------|-------------|
+| `devdocs-install-user-docset` | :orange_circle: | Install user DevDocs docset |
+| `devdocs-update` | :orange_circle: | Update DevDocs |
+| `devdocs-delete` | :orange_circle: | Delete DevDocs docset |
+| `devdocs-search-all` | :orange_circle: | Search all DevDocs |
+| `devdocs-set-current-doc` | :orange_circle: | Set current DevDocs doc |
+| `info-search-next` | :orange_circle: | Info search next |
+| `info-search-case-sensitive` | :orange_circle: | Info case sensitive search |
+| `info-history-back-forward` | :orange_circle: | Info history back/forward |
+| `info-copy-node-name` | :orange_circle: | Copy Info node name |
+| `info-redisplay` | :orange_circle: | Redisplay Info |
+
+### Round 872: Dirvish ext 2 / Dired-narrow ext (10 commands)
+| Command | Status | Description |
+|---------|--------|-------------|
+| `dirvish-history-clear` | :orange_circle: | Clear Dirvish history |
+| `dirvish-layout-switch-default` | :orange_circle: | Switch to default Dirvish layout |
+| `dirvish-fd-ask-directory` | :orange_circle: | Dirvish fd ask directory |
+| `dirvish-subtree-up` | :orange_circle: | Dirvish subtree up |
+| `dirvish-collapse-dirs` | :orange_circle: | Dirvish collapse dirs |
+| `dired-narrow-regexp-filter` | :orange_circle: | Dired-narrow regexp filter |
+| `dired-narrow-fuzzy-filter` | :orange_circle: | Dired-narrow fuzzy filter |
+| `dired-narrow-exit` | :orange_circle: | Exit dired-narrow |
+| `dired-narrow-restore` | :orange_circle: | Restore dired-narrow |
+| `dired-narrow-by-extension` | :orange_circle: | Dired-narrow by extension |
+
+### Round 873: Dired-ranger ext / Dired-sidebar ext (10 commands)
+| Command | Status | Description |
+|---------|--------|-------------|
+| `dired-ranger-copy-ring` | :orange_circle: | Copy to dired-ranger ring |
+| `dired-ranger-paste-ring` | :orange_circle: | Paste from dired-ranger ring |
+| `dired-ranger-move-ring` | :orange_circle: | Move from dired-ranger ring |
+| `dired-ranger-bookmark-goto` | :orange_circle: | Goto dired-ranger bookmark |
+| `dired-ranger-sort-by-date` | :orange_circle: | Sort dired-ranger by date |
+| `dired-sidebar-show-all` | :orange_circle: | Show all in dired-sidebar |
+| `dired-sidebar-hide-all` | :orange_circle: | Hide all in dired-sidebar |
+| `dired-sidebar-follow-current` | :orange_circle: | Follow current in dired-sidebar |
+| `dired-sidebar-refresh` | :orange_circle: | Refresh dired-sidebar |
+| `dired-sidebar-set-width` | :orange_circle: | Set dired-sidebar width |
+
+### Round 874: Project ext 2 / Projectile ext 2 (10 commands)
+| Command | Status | Description |
+|---------|--------|-------------|
+| `project-forget-all-zombie-projects` | :orange_circle: | Forget all zombie projects |
+| `project-list-buffers-all` | :orange_circle: | List all project buffers |
+| `project-switch-to-buffer-other-window` | :orange_circle: | Switch project buffer other window |
+| `project-eshell-other-window` | :orange_circle: | Project eshell other window |
+| `project-async-run-shell-command` | :orange_circle: | Project async shell command |
+| `projectile-find-file-in-known-projects` | :orange_circle: | Find file in known projects |
+| `projectile-browse-dirty-projects` | :orange_circle: | Browse dirty projects |
+| `projectile-edit-dir-locals` | :orange_circle: | Edit project dir-locals |
+| `projectile-find-references` | :orange_circle: | Projectile find references |
+| `projectile-find-implementation` | :orange_circle: | Projectile find implementation |
+
+### Round 875: Treemacs ext 2 / Treemacs-icons (10 commands)
+| Command | Status | Description |
+|---------|--------|-------------|
+| `treemacs-collapse-all-project-nodes` | :orange_circle: | Collapse all project nodes |
+| `treemacs-expand-all-projects` | :orange_circle: | Expand all projects |
+| `treemacs-set-scope-type` | :orange_circle: | Set Treemacs scope type |
+| `treemacs-narrow-to-project` | :orange_circle: | Narrow to Treemacs project |
+| `treemacs-widen-from-project` | :orange_circle: | Widen from Treemacs project |
+| `treemacs-icons-dired-enable` | :orange_circle: | Enable Treemacs icons in dired |
+| `treemacs-icons-reset` | :orange_circle: | Reset Treemacs icons |
+| `treemacs-icons-set-custom` | :orange_circle: | Set custom Treemacs icons |
+| `treemacs-icons-toggle-theme` | :orange_circle: | Toggle Treemacs icons theme |
+| `treemacs-icons-refresh-all` | :orange_circle: | Refresh all Treemacs icons |
+
+### Round 876: ERC ext 2 / Rcirc ext 2 (10 commands)
+| Command | Status | Description |
+|---------|--------|-------------|
+| `erc-track-switch-buffer-other-window` | :orange_circle: | ERC track switch other window |
+| `erc-log-save-all` | :orange_circle: | Save all ERC logs |
+| `erc-autojoin-add` | :orange_circle: | Add ERC autojoin channel |
+| `erc-autojoin-remove` | :orange_circle: | Remove ERC autojoin channel |
+| `erc-spelling-toggle` | :orange_circle: | Toggle ERC spelling |
+| `rcirc-multiline-toggle` | :orange_circle: | Toggle rcirc multiline |
+| `rcirc-next-active-buffer-prev` | :orange_circle: | Rcirc prev active buffer |
+| `rcirc-track-switch` | :orange_circle: | Rcirc track switch |
+| `rcirc-browse-url-at-point` | :orange_circle: | Rcirc browse URL at point |
+| `rcirc-omit-toggle-all` | :orange_circle: | Toggle rcirc omit all |
+
+### Round 877: Ement ext 2 / Matrix ext (10 commands)
+| Command | Status | Description |
+|---------|--------|-------------|
+| `ement-room-set-avatar` | :orange_circle: | Set Ement room avatar |
+| `ement-room-set-topic-prompt` | :orange_circle: | Set Ement room topic |
+| `ement-room-invite-member` | :orange_circle: | Invite Ement room member |
+| `ement-room-kick-user` | :orange_circle: | Kick Ement room user |
+| `ement-room-ban-user` | :orange_circle: | Ban Ement room user |
+| `matrix-send-file` | :orange_circle: | Send Matrix file |
+| `matrix-send-image` | :orange_circle: | Send Matrix image |
+| `matrix-send-audio` | :orange_circle: | Send Matrix audio |
+| `matrix-send-video` | :orange_circle: | Send Matrix video |
+| `matrix-create-room` | :orange_circle: | Create Matrix room |
+
+### Round 878: Man ext / WoMan ext 2 (10 commands)
+| Command | Status | Description |
+|---------|--------|-------------|
+| `man-follow-xref` | :orange_circle: | Follow Man cross-reference |
+| `man-goto-see-also` | :orange_circle: | Goto Man SEE ALSO |
+| `man-previous-manpage` | :orange_circle: | Previous manpage |
+| `man-next-manpage` | :orange_circle: | Next manpage |
+| `man-not-hierarchical` | :orange_circle: | Man flat display |
+| `woman-set-manual-path` | :orange_circle: | Set WoMan manual path |
+| `woman-expand-manual` | :orange_circle: | Expand WoMan manual |
+| `woman-decode-buffer` | :orange_circle: | Decode WoMan buffer |
+| `woman-locale-set` | :orange_circle: | Set WoMan locale |
+| `woman-cache-clear` | :orange_circle: | Clear WoMan cache |
+
+### Round 879: Elfeed ext 2 / Newsticker ext (10 commands)
+| Command | Status | Description |
+|---------|--------|-------------|
+| `elfeed-db-compact-now` | :orange_circle: | Compact Elfeed database |
+| `elfeed-unjam` | :orange_circle: | Unjam Elfeed |
+| `elfeed-export-opml-file` | :orange_circle: | Export Elfeed OPML |
+| `elfeed-import-opml-file` | :orange_circle: | Import Elfeed OPML |
+| `elfeed-set-max-connections` | :orange_circle: | Set Elfeed max connections |
+| `newsticker-start-ticker` | :orange_circle: | Start Newsticker |
+| `newsticker-stop-ticker` | :orange_circle: | Stop Newsticker |
+| `newsticker-show-extra` | :orange_circle: | Show Newsticker extra |
+| `newsticker-show-old-items` | :orange_circle: | Show Newsticker old items |
+| `newsticker-mark-all-read` | :orange_circle: | Mark all Newsticker read |
+
+### Round 880: URL ext 2 / SHR ext 2 (10 commands)
+| Command | Status | Description |
+|---------|--------|-------------|
+| `url-cookie-list-clear` | :orange_circle: | Clear URL cookie list |
+| `url-cache-expire` | :orange_circle: | Expire URL cache |
+| `url-proxy-set` | :orange_circle: | Set URL proxy |
+| `url-history-save` | :orange_circle: | Save URL history |
+| `url-handler-toggle` | :orange_circle: | Toggle URL handler |
+| `shr-inhibit-images` | :orange_circle: | Inhibit SHR images |
+| `shr-external-browser` | :orange_circle: | Open in external browser |
+| `shr-zoom-in` | :orange_circle: | SHR zoom in |
+| `shr-zoom-out` | :orange_circle: | SHR zoom out |
+| `shr-copy-url-at-point` | :orange_circle: | Copy SHR URL at point |
 ### Round 631 — Process Calculi (Pi-calculus, CSP)
 
 | Feature | Status | Notes |
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index a1797cc..a172df4 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -35753,3 +35753,225 @@
 (def (cmd-burly-tabs-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "Burly: tabs mode")))
 (def (cmd-burly-reset-tab app) (let* ((echo (app-state-echo app))) (echo-message! echo "Burly: reset tab")))
 (def (cmd-burly-open-url app) (let* ((echo (app-state-echo app))) (echo-message! echo "Burly: open URL")))
+
+;; Round 842: IBus / Fcitx (input methods)
+(def (cmd-ibus-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "IBus: mode enabled")))
+(def (cmd-ibus-toggle app) (let* ((echo (app-state-echo app))) (echo-message! echo "IBus: toggle")))
+(def (cmd-ibus-next-engine app) (let* ((echo (app-state-echo app))) (echo-message! echo "IBus: next engine")))
+(def (cmd-ibus-prev-engine app) (let* ((echo (app-state-echo app))) (echo-message! echo "IBus: previous engine")))
+(def (cmd-ibus-setup app) (let* ((echo (app-state-echo app))) (echo-message! echo "IBus: setup")))
+(def (cmd-fcitx-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "Fcitx: mode enabled")))
+(def (cmd-fcitx-toggle app) (let* ((echo (app-state-echo app))) (echo-message! echo "Fcitx: toggle")))
+(def (cmd-fcitx-remote-status app) (let* ((echo (app-state-echo app))) (echo-message! echo "Fcitx: remote status")))
+(def (cmd-fcitx-switch-input-method app) (let* ((echo (app-state-echo app))) (echo-message! echo "Fcitx: switch input method")))
+(def (cmd-fcitx-reload-config app) (let* ((echo (app-state-echo app))) (echo-message! echo "Fcitx: reload config")))
+;; Round 844: SKK / Pyim (CJK input)
+(def (cmd-skk-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "SKK: mode enabled")))
+(def (cmd-skk-toggle app) (let* ((echo (app-state-echo app))) (echo-message! echo "SKK: toggle")))
+(def (cmd-skk-set-henkan-point app) (let* ((echo (app-state-echo app))) (echo-message! echo "SKK: set henkan point")))
+(def (cmd-skk-auto-fill-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "SKK: auto fill mode")))
+(def (cmd-skk-setup app) (let* ((echo (app-state-echo app))) (echo-message! echo "SKK: setup")))
+(def (cmd-pyim-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "Pyim: mode enabled")))
+(def (cmd-pyim-toggle app) (let* ((echo (app-state-echo app))) (echo-message! echo "Pyim: toggle")))
+(def (cmd-pyim-convert app) (let* ((echo (app-state-echo app))) (echo-message! echo "Pyim: convert")))
+(def (cmd-pyim-select-word app) (let* ((echo (app-state-echo app))) (echo-message! echo "Pyim: select word")))
+(def (cmd-pyim-add-word app) (let* ((echo (app-state-echo app))) (echo-message! echo "Pyim: add word")))
+;; Round 846: Evil-easymotion / Evil-org
+(def (cmd-evil-easymotion-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "Evil-easymotion: mode enabled")))
+(def (cmd-evil-easymotion-forward app) (let* ((echo (app-state-echo app))) (echo-message! echo "Evil-easymotion: forward")))
+(def (cmd-evil-easymotion-backward app) (let* ((echo (app-state-echo app))) (echo-message! echo "Evil-easymotion: backward")))
+(def (cmd-evil-easymotion-next-line app) (let* ((echo (app-state-echo app))) (echo-message! echo "Evil-easymotion: next line")))
+(def (cmd-evil-easymotion-search app) (let* ((echo (app-state-echo app))) (echo-message! echo "Evil-easymotion: search")))
+(def (cmd-evil-org-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "Evil-org: mode enabled")))
+(def (cmd-evil-org-agenda-set-keys app) (let* ((echo (app-state-echo app))) (echo-message! echo "Evil-org: set agenda keys")))
+(def (cmd-evil-org-set-key-theme app) (let* ((echo (app-state-echo app))) (echo-message! echo "Evil-org: set key theme")))
+(def (cmd-evil-org-open-above app) (let* ((echo (app-state-echo app))) (echo-message! echo "Evil-org: open above")))
+(def (cmd-evil-org-open-below app) (let* ((echo (app-state-echo app))) (echo-message! echo "Evil-org: open below")))
+;; Round 848: Walkman / Impostman (HTTP testing)
+(def (cmd-walkman-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "Walkman: mode enabled")))
+(def (cmd-walkman-execute app) (let* ((echo (app-state-echo app))) (echo-message! echo "Walkman: execute request")))
+(def (cmd-walkman-at-point app) (let* ((echo (app-state-echo app))) (echo-message! echo "Walkman: run at point")))
+(def (cmd-walkman-set-var app) (let* ((echo (app-state-echo app))) (echo-message! echo "Walkman: set variable")))
+(def (cmd-walkman-copy-as-curl app) (let* ((echo (app-state-echo app))) (echo-message! echo "Walkman: copy as curl")))
+(def (cmd-impostman-import app) (let* ((echo (app-state-echo app))) (echo-message! echo "Impostman: import collection")))
+(def (cmd-impostman-discover-api app) (let* ((echo (app-state-echo app))) (echo-message! echo "Impostman: discover API")))
+(def (cmd-impostman-set-env app) (let* ((echo (app-state-echo app))) (echo-message! echo "Impostman: set environment")))
+(def (cmd-impostman-run-collection app) (let* ((echo (app-state-echo app))) (echo-message! echo "Impostman: run collection")))
+(def (cmd-impostman-export app) (let* ((echo (app-state-echo app))) (echo-message! echo "Impostman: export")))
+;; Round 850: Espeak / Speechd ext
+(def (cmd-espeak-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "Espeak: mode enabled")))
+(def (cmd-espeak-speak-region app) (let* ((echo (app-state-echo app))) (echo-message! echo "Espeak: speak region")))
+(def (cmd-espeak-speak-buffer app) (let* ((echo (app-state-echo app))) (echo-message! echo "Espeak: speak buffer")))
+(def (cmd-espeak-set-voice app) (let* ((echo (app-state-echo app))) (echo-message! echo "Espeak: set voice")))
+(def (cmd-espeak-set-rate app) (let* ((echo (app-state-echo app))) (echo-message! echo "Espeak: set rate")))
+(def (cmd-speechd-set-voice app) (let* ((echo (app-state-echo app))) (echo-message! echo "Speechd: set voice")))
+(def (cmd-speechd-set-speech-rate app) (let* ((echo (app-state-echo app))) (echo-message! echo "Speechd: set speech rate")))
+(def (cmd-speechd-pause app) (let* ((echo (app-state-echo app))) (echo-message! echo "Speechd: pause")))
+(def (cmd-speechd-resume app) (let* ((echo (app-state-echo app))) (echo-message! echo "Speechd: resume")))
+(def (cmd-speechd-cancel app) (let* ((echo (app-state-echo app))) (echo-message! echo "Speechd: cancel")))
+;; Round 852: Reddit / HackerNews
+(def (cmd-reddit-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "Reddit: mode enabled")))
+(def (cmd-reddit-browse-subreddit app) (let* ((echo (app-state-echo app))) (echo-message! echo "Reddit: browse subreddit")))
+(def (cmd-reddit-browse-front-page app) (let* ((echo (app-state-echo app))) (echo-message! echo "Reddit: browse front page")))
+(def (cmd-reddit-submit-post app) (let* ((echo (app-state-echo app))) (echo-message! echo "Reddit: submit post")))
+(def (cmd-reddit-view-comments app) (let* ((echo (app-state-echo app))) (echo-message! echo "Reddit: view comments")))
+(def (cmd-hackernews-browse app) (let* ((echo (app-state-echo app))) (echo-message! echo "HackerNews: browse")))
+(def (cmd-hackernews-top-stories app) (let* ((echo (app-state-echo app))) (echo-message! echo "HackerNews: top stories")))
+(def (cmd-hackernews-new-stories app) (let* ((echo (app-state-echo app))) (echo-message! echo "HackerNews: new stories")))
+(def (cmd-hackernews-ask-stories app) (let* ((echo (app-state-echo app))) (echo-message! echo "HackerNews: ask stories")))
+(def (cmd-hackernews-show-stories app) (let* ((echo (app-state-echo app))) (echo-message! echo "HackerNews: show stories")))
+;; Round 854: SCIM / UIM (input methods)
+(def (cmd-scim-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "SCIM: mode enabled")))
+(def (cmd-scim-toggle app) (let* ((echo (app-state-echo app))) (echo-message! echo "SCIM: toggle")))
+(def (cmd-scim-next-input app) (let* ((echo (app-state-echo app))) (echo-message! echo "SCIM: next input")))
+(def (cmd-scim-prev-input app) (let* ((echo (app-state-echo app))) (echo-message! echo "SCIM: previous input")))
+(def (cmd-scim-setup app) (let* ((echo (app-state-echo app))) (echo-message! echo "SCIM: setup")))
+(def (cmd-uim-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "UIM: mode enabled")))
+(def (cmd-uim-toggle app) (let* ((echo (app-state-echo app))) (echo-message! echo "UIM: toggle")))
+(def (cmd-uim-switch-im app) (let* ((echo (app-state-echo app))) (echo-message! echo "UIM: switch input method")))
+(def (cmd-uim-pref-set app) (let* ((echo (app-state-echo app))) (echo-message! echo "UIM: set preference")))
+(def (cmd-uim-toolbar-toggle app) (let* ((echo (app-state-echo app))) (echo-message! echo "UIM: toggle toolbar")))
+;; Round 856: Snowpack / ImageMagick
+(def (cmd-snowpack-start app) (let* ((echo (app-state-echo app))) (echo-message! echo "Snowpack: start")))
+(def (cmd-snowpack-build app) (let* ((echo (app-state-echo app))) (echo-message! echo "Snowpack: build")))
+(def (cmd-snowpack-dev app) (let* ((echo (app-state-echo app))) (echo-message! echo "Snowpack: dev server")))
+(def (cmd-snowpack-add-plugin app) (let* ((echo (app-state-echo app))) (echo-message! echo "Snowpack: add plugin")))
+(def (cmd-snowpack-config app) (let* ((echo (app-state-echo app))) (echo-message! echo "Snowpack: config")))
+(def (cmd-imagemagick-convert app) (let* ((echo (app-state-echo app))) (echo-message! echo "ImageMagick: convert")))
+(def (cmd-imagemagick-resize app) (let* ((echo (app-state-echo app))) (echo-message! echo "ImageMagick: resize")))
+(def (cmd-imagemagick-crop app) (let* ((echo (app-state-echo app))) (echo-message! echo "ImageMagick: crop")))
+(def (cmd-imagemagick-rotate app) (let* ((echo (app-state-echo app))) (echo-message! echo "ImageMagick: rotate")))
+(def (cmd-imagemagick-composite app) (let* ((echo (app-state-echo app))) (echo-message! echo "ImageMagick: composite")))
+;; Round 858: GIMP / Inkscape
+(def (cmd-gimp-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "GIMP: mode enabled")))
+(def (cmd-gimp-open-file app) (let* ((echo (app-state-echo app))) (echo-message! echo "GIMP: open file")))
+(def (cmd-gimp-script-fu app) (let* ((echo (app-state-echo app))) (echo-message! echo "GIMP: Script-Fu")))
+(def (cmd-gimp-batch-process app) (let* ((echo (app-state-echo app))) (echo-message! echo "GIMP: batch process")))
+(def (cmd-gimp-export app) (let* ((echo (app-state-echo app))) (echo-message! echo "GIMP: export")))
+(def (cmd-inkscape-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "Inkscape: mode enabled")))
+(def (cmd-inkscape-open-file app) (let* ((echo (app-state-echo app))) (echo-message! echo "Inkscape: open file")))
+(def (cmd-inkscape-export-png app) (let* ((echo (app-state-echo app))) (echo-message! echo "Inkscape: export PNG")))
+(def (cmd-inkscape-export-svg app) (let* ((echo (app-state-echo app))) (echo-message! echo "Inkscape: export SVG")))
+(def (cmd-inkscape-batch-process app) (let* ((echo (app-state-echo app))) (echo-message! echo "Inkscape: batch process")))
+;; Round 860: Hangul / Cangjie
+(def (cmd-hangul-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "Hangul: mode enabled")))
+(def (cmd-hangul-toggle app) (let* ((echo (app-state-echo app))) (echo-message! echo "Hangul: toggle")))
+(def (cmd-hangul-set-keyboard app) (let* ((echo (app-state-echo app))) (echo-message! echo "Hangul: set keyboard")))
+(def (cmd-hangul-switch-hanja app) (let* ((echo (app-state-echo app))) (echo-message! echo "Hangul: switch hanja")))
+(def (cmd-hangul-setup app) (let* ((echo (app-state-echo app))) (echo-message! echo "Hangul: setup")))
+(def (cmd-cangjie-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "Cangjie: mode enabled")))
+(def (cmd-cangjie-toggle app) (let* ((echo (app-state-echo app))) (echo-message! echo "Cangjie: toggle")))
+(def (cmd-cangjie-set-version app) (let* ((echo (app-state-echo app))) (echo-message! echo "Cangjie: set version")))
+(def (cmd-cangjie-quick-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "Cangjie: quick mode")))
+(def (cmd-cangjie-setup app) (let* ((echo (app-state-echo app))) (echo-message! echo "Cangjie: setup")))
+
+;; Round 862: Bitlbee / Weechat
+(def (cmd-bitlbee-connect app) (let* ((echo (app-state-echo app))) (echo-message! echo "Bitlbee: connect")))
+(def (cmd-bitlbee-disconnect app) (let* ((echo (app-state-echo app))) (echo-message! echo "Bitlbee: disconnect")))
+(def (cmd-bitlbee-add-account app) (let* ((echo (app-state-echo app))) (echo-message! echo "Bitlbee: add account")))
+(def (cmd-bitlbee-remove-account app) (let* ((echo (app-state-echo app))) (echo-message! echo "Bitlbee: remove account")))
+(def (cmd-bitlbee-list-contacts app) (let* ((echo (app-state-echo app))) (echo-message! echo "Bitlbee: list contacts")))
+(def (cmd-weechat-connect app) (let* ((echo (app-state-echo app))) (echo-message! echo "Weechat: connect")))
+(def (cmd-weechat-disconnect app) (let* ((echo (app-state-echo app))) (echo-message! echo "Weechat: disconnect")))
+(def (cmd-weechat-send-message app) (let* ((echo (app-state-echo app))) (echo-message! echo "Weechat: send message")))
+(def (cmd-weechat-switch-buffer app) (let* ((echo (app-state-echo app))) (echo-message! echo "Weechat: switch buffer")))
+(def (cmd-weechat-list-channels app) (let* ((echo (app-state-echo app))) (echo-message! echo "Weechat: list channels")))
+;; Round 864: Dash-docs / Zeal
+(def (cmd-dash-docs-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "Dash-docs: mode enabled")))
+(def (cmd-dash-docs-search app) (let* ((echo (app-state-echo app))) (echo-message! echo "Dash-docs: search")))
+(def (cmd-dash-docs-activate-docset app) (let* ((echo (app-state-echo app))) (echo-message! echo "Dash-docs: activate docset")))
+(def (cmd-dash-docs-deactivate-docset app) (let* ((echo (app-state-echo app))) (echo-message! echo "Dash-docs: deactivate docset")))
+(def (cmd-dash-docs-install-docset app) (let* ((echo (app-state-echo app))) (echo-message! echo "Dash-docs: install docset")))
+(def (cmd-zeal-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "Zeal: mode enabled")))
+(def (cmd-zeal-search app) (let* ((echo (app-state-echo app))) (echo-message! echo "Zeal: search")))
+(def (cmd-zeal-search-at-point app) (let* ((echo (app-state-echo app))) (echo-message! echo "Zeal: search at point")))
+(def (cmd-zeal-install-docset app) (let* ((echo (app-state-echo app))) (echo-message! echo "Zeal: install docset")))
+(def (cmd-zeal-browse app) (let* ((echo (app-state-echo app))) (echo-message! echo "Zeal: browse")))
+;; Round 866: Exercism / Codewars
+(def (cmd-exercism-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "Exercism: mode enabled")))
+(def (cmd-exercism-submit app) (let* ((echo (app-state-echo app))) (echo-message! echo "Exercism: submit")))
+(def (cmd-exercism-download app) (let* ((echo (app-state-echo app))) (echo-message! echo "Exercism: download")))
+(def (cmd-exercism-browse app) (let* ((echo (app-state-echo app))) (echo-message! echo "Exercism: browse")))
+(def (cmd-exercism-test app) (let* ((echo (app-state-echo app))) (echo-message! echo "Exercism: test")))
+(def (cmd-codewars-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "Codewars: mode enabled")))
+(def (cmd-codewars-browse app) (let* ((echo (app-state-echo app))) (echo-message! echo "Codewars: browse")))
+(def (cmd-codewars-submit app) (let* ((echo (app-state-echo app))) (echo-message! echo "Codewars: submit")))
+(def (cmd-codewars-test app) (let* ((echo (app-state-echo app))) (echo-message! echo "Codewars: test")))
+(def (cmd-codewars-next-kata app) (let* ((echo (app-state-echo app))) (echo-message! echo "Codewars: next kata")))
+;; Round 868: Dired-collapse ext / Dired-rsync ext
+(def (cmd-dired-collapse-mode-toggle app) (let* ((echo (app-state-echo app))) (echo-message! echo "Dired-collapse: toggle mode")))
+(def (cmd-dired-collapse-refresh app) (let* ((echo (app-state-echo app))) (echo-message! echo "Dired-collapse: refresh")))
+(def (cmd-dired-collapse-depth app) (let* ((echo (app-state-echo app))) (echo-message! echo "Dired-collapse: set depth")))
+(def (cmd-dired-collapse-dirs app) (let* ((echo (app-state-echo app))) (echo-message! echo "Dired-collapse: collapse dirs")))
+(def (cmd-dired-collapse-show-hidden app) (let* ((echo (app-state-echo app))) (echo-message! echo "Dired-collapse: show hidden")))
+(def (cmd-dired-rsync-options-menu app) (let* ((echo (app-state-echo app))) (echo-message! echo "Dired-rsync: options menu")))
+(def (cmd-dired-rsync-default-options app) (let* ((echo (app-state-echo app))) (echo-message! echo "Dired-rsync: default options")))
+(def (cmd-dired-rsync-compress app) (let* ((echo (app-state-echo app))) (echo-message! echo "Dired-rsync: compress")))
+(def (cmd-dired-rsync-partial app) (let* ((echo (app-state-echo app))) (echo-message! echo "Dired-rsync: partial transfer")))
+(def (cmd-dired-rsync-progress app) (let* ((echo (app-state-echo app))) (echo-message! echo "Dired-rsync: show progress")))
+;; Round 870: TLDR ext / Cheat ext
+(def (cmd-tldr-update-docs app) (let* ((echo (app-state-echo app))) (echo-message! echo "TLDR: update docs")))
+(def (cmd-tldr-search app) (let* ((echo (app-state-echo app))) (echo-message! echo "TLDR: search")))
+(def (cmd-tldr-browse app) (let* ((echo (app-state-echo app))) (echo-message! echo "TLDR: browse")))
+(def (cmd-tldr-set-platform app) (let* ((echo (app-state-echo app))) (echo-message! echo "TLDR: set platform")))
+(def (cmd-tldr-contribute app) (let* ((echo (app-state-echo app))) (echo-message! echo "TLDR: contribute")))
+(def (cmd-cheat-search app) (let* ((echo (app-state-echo app))) (echo-message! echo "Cheat: search")))
+(def (cmd-cheat-browse app) (let* ((echo (app-state-echo app))) (echo-message! echo "Cheat: browse")))
+(def (cmd-cheat-community app) (let* ((echo (app-state-echo app))) (echo-message! echo "Cheat: community")))
+(def (cmd-cheat-personal app) (let* ((echo (app-state-echo app))) (echo-message! echo "Cheat: personal")))
+(def (cmd-cheat-tags app) (let* ((echo (app-state-echo app))) (echo-message! echo "Cheat: tags")))
+;; Round 872: Dirvish ext 2 / Dired-narrow ext
+(def (cmd-dirvish-history-clear app) (let* ((echo (app-state-echo app))) (echo-message! echo "Dirvish: clear history")))
+(def (cmd-dirvish-layout-switch-default app) (let* ((echo (app-state-echo app))) (echo-message! echo "Dirvish: switch to default layout")))
+(def (cmd-dirvish-fd-ask-directory app) (let* ((echo (app-state-echo app))) (echo-message! echo "Dirvish: fd ask directory")))
+(def (cmd-dirvish-subtree-up app) (let* ((echo (app-state-echo app))) (echo-message! echo "Dirvish: subtree up")))
+(def (cmd-dirvish-collapse-dirs app) (let* ((echo (app-state-echo app))) (echo-message! echo "Dirvish: collapse dirs")))
+(def (cmd-dired-narrow-regexp-filter app) (let* ((echo (app-state-echo app))) (echo-message! echo "Dired-narrow: regexp filter")))
+(def (cmd-dired-narrow-fuzzy-filter app) (let* ((echo (app-state-echo app))) (echo-message! echo "Dired-narrow: fuzzy filter")))
+(def (cmd-dired-narrow-exit app) (let* ((echo (app-state-echo app))) (echo-message! echo "Dired-narrow: exit")))
+(def (cmd-dired-narrow-restore app) (let* ((echo (app-state-echo app))) (echo-message! echo "Dired-narrow: restore")))
+(def (cmd-dired-narrow-by-extension app) (let* ((echo (app-state-echo app))) (echo-message! echo "Dired-narrow: by extension")))
+;; Round 874: Project ext 2 / Projectile ext 2
+(def (cmd-project-forget-all-zombie-projects app) (let* ((echo (app-state-echo app))) (echo-message! echo "Project: forget all zombie projects")))
+(def (cmd-project-list-buffers-all app) (let* ((echo (app-state-echo app))) (echo-message! echo "Project: list all buffers")))
+(def (cmd-project-switch-to-buffer-other-window app) (let* ((echo (app-state-echo app))) (echo-message! echo "Project: switch buffer other window")))
+(def (cmd-project-eshell-other-window app) (let* ((echo (app-state-echo app))) (echo-message! echo "Project: eshell other window")))
+(def (cmd-project-async-run-shell-command app) (let* ((echo (app-state-echo app))) (echo-message! echo "Project: async shell command")))
+(def (cmd-projectile-find-file-in-known-projects app) (let* ((echo (app-state-echo app))) (echo-message! echo "Projectile: find file in known projects")))
+(def (cmd-projectile-browse-dirty-projects app) (let* ((echo (app-state-echo app))) (echo-message! echo "Projectile: browse dirty projects")))
+(def (cmd-projectile-edit-dir-locals app) (let* ((echo (app-state-echo app))) (echo-message! echo "Projectile: edit dir-locals")))
+(def (cmd-projectile-find-references app) (let* ((echo (app-state-echo app))) (echo-message! echo "Projectile: find references")))
+(def (cmd-projectile-find-implementation app) (let* ((echo (app-state-echo app))) (echo-message! echo "Projectile: find implementation")))
+;; Round 876: ERC ext 2 / Rcirc ext 2
+(def (cmd-erc-track-switch-buffer-other-window app) (let* ((echo (app-state-echo app))) (echo-message! echo "ERC: track switch buffer other window")))
+(def (cmd-erc-log-save-all app) (let* ((echo (app-state-echo app))) (echo-message! echo "ERC: save all logs")))
+(def (cmd-erc-autojoin-add app) (let* ((echo (app-state-echo app))) (echo-message! echo "ERC: add autojoin channel")))
+(def (cmd-erc-autojoin-remove app) (let* ((echo (app-state-echo app))) (echo-message! echo "ERC: remove autojoin channel")))
+(def (cmd-erc-spelling-toggle app) (let* ((echo (app-state-echo app))) (echo-message! echo "ERC: toggle spelling")))
+(def (cmd-rcirc-multiline-toggle app) (let* ((echo (app-state-echo app))) (echo-message! echo "Rcirc: toggle multiline")))
+(def (cmd-rcirc-next-active-buffer-prev app) (let* ((echo (app-state-echo app))) (echo-message! echo "Rcirc: prev active buffer")))
+(def (cmd-rcirc-track-switch app) (let* ((echo (app-state-echo app))) (echo-message! echo "Rcirc: track switch")))
+(def (cmd-rcirc-browse-url-at-point app) (let* ((echo (app-state-echo app))) (echo-message! echo "Rcirc: browse URL at point")))
+(def (cmd-rcirc-omit-toggle-all app) (let* ((echo (app-state-echo app))) (echo-message! echo "Rcirc: toggle omit all")))
+;; Round 878: Man ext / WoMan ext 2
+(def (cmd-man-follow-xref app) (let* ((echo (app-state-echo app))) (echo-message! echo "Man: follow cross-reference")))
+(def (cmd-man-goto-see-also app) (let* ((echo (app-state-echo app))) (echo-message! echo "Man: goto SEE ALSO")))
+(def (cmd-man-previous-manpage app) (let* ((echo (app-state-echo app))) (echo-message! echo "Man: previous manpage")))
+(def (cmd-man-next-manpage app) (let* ((echo (app-state-echo app))) (echo-message! echo "Man: next manpage")))
+(def (cmd-man-not-hierarchical app) (let* ((echo (app-state-echo app))) (echo-message! echo "Man: flat display")))
+(def (cmd-woman-set-manual-path app) (let* ((echo (app-state-echo app))) (echo-message! echo "WoMan: set manual path")))
+(def (cmd-woman-expand-manual app) (let* ((echo (app-state-echo app))) (echo-message! echo "WoMan: expand manual")))
+(def (cmd-woman-decode-buffer app) (let* ((echo (app-state-echo app))) (echo-message! echo "WoMan: decode buffer")))
+(def (cmd-woman-locale-set app) (let* ((echo (app-state-echo app))) (echo-message! echo "WoMan: set locale")))
+(def (cmd-woman-cache-clear app) (let* ((echo (app-state-echo app))) (echo-message! echo "WoMan: clear cache")))
+;; Round 880: URL ext 2 / SHR ext 2
+(def (cmd-url-cookie-list-clear app) (let* ((echo (app-state-echo app))) (echo-message! echo "URL: clear cookie list")))
+(def (cmd-url-cache-expire app) (let* ((echo (app-state-echo app))) (echo-message! echo "URL: expire cache")))
+(def (cmd-url-proxy-set app) (let* ((echo (app-state-echo app))) (echo-message! echo "URL: set proxy")))
+(def (cmd-url-history-save app) (let* ((echo (app-state-echo app))) (echo-message! echo "URL: save history")))
+(def (cmd-url-handler-toggle app) (let* ((echo (app-state-echo app))) (echo-message! echo "URL: toggle handler")))
+(def (cmd-shr-inhibit-images app) (let* ((echo (app-state-echo app))) (echo-message! echo "SHR: inhibit images")))
+(def (cmd-shr-external-browser app) (let* ((echo (app-state-echo app))) (echo-message! echo "SHR: open in external browser")))
+(def (cmd-shr-zoom-in app) (let* ((echo (app-state-echo app))) (echo-message! echo "SHR: zoom in")))
+(def (cmd-shr-zoom-out app) (let* ((echo (app-state-echo app))) (echo-message! echo "SHR: zoom out")))
+(def (cmd-shr-copy-url-at-point app) (let* ((echo (app-state-echo app))) (echo-message! echo "SHR: copy URL at point")))
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index c978be2..d0fd2f2 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -34977,3 +34977,225 @@
 (def (cmd-window-swap-states-dir-left app) (let* ((echo (app-state-echo app))) (echo-message! echo "Window: swap states left")))
 (def (cmd-window-swap-states-dir-right app) (let* ((echo (app-state-echo app))) (echo-message! echo "Window: swap states right")))
 (def (cmd-window-layout-save app) (let* ((echo (app-state-echo app))) (echo-message! echo "Window: layout save")))
+
+;; Round 841: Emacspeak / Festival (TTS)
+(def (cmd-emacspeak-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "Emacspeak: mode enabled")))
+(def (cmd-emacspeak-toggle-speech app) (let* ((echo (app-state-echo app))) (echo-message! echo "Emacspeak: toggle speech")))
+(def (cmd-emacspeak-speak-line app) (let* ((echo (app-state-echo app))) (echo-message! echo "Emacspeak: speak line")))
+(def (cmd-emacspeak-speak-region app) (let* ((echo (app-state-echo app))) (echo-message! echo "Emacspeak: speak region")))
+(def (cmd-emacspeak-speak-buffer app) (let* ((echo (app-state-echo app))) (echo-message! echo "Emacspeak: speak buffer")))
+(def (cmd-festival-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "Festival: mode enabled")))
+(def (cmd-festival-say-region app) (let* ((echo (app-state-echo app))) (echo-message! echo "Festival: say region")))
+(def (cmd-festival-say-buffer app) (let* ((echo (app-state-echo app))) (echo-message! echo "Festival: say buffer")))
+(def (cmd-festival-set-voice app) (let* ((echo (app-state-echo app))) (echo-message! echo "Festival: set voice")))
+(def (cmd-festival-stop app) (let* ((echo (app-state-echo app))) (echo-message! echo "Festival: stop speech")))
+;; Round 843: Mozc / Anthy (Japanese input)
+(def (cmd-mozc-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "Mozc: mode enabled")))
+(def (cmd-mozc-toggle app) (let* ((echo (app-state-echo app))) (echo-message! echo "Mozc: toggle input")))
+(def (cmd-mozc-set-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "Mozc: set input mode")))
+(def (cmd-mozc-reconvert app) (let* ((echo (app-state-echo app))) (echo-message! echo "Mozc: reconvert")))
+(def (cmd-mozc-config app) (let* ((echo (app-state-echo app))) (echo-message! echo "Mozc: configure")))
+(def (cmd-anthy-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "Anthy: mode enabled")))
+(def (cmd-anthy-toggle app) (let* ((echo (app-state-echo app))) (echo-message! echo "Anthy: toggle input")))
+(def (cmd-anthy-set-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "Anthy: set input mode")))
+(def (cmd-anthy-reconvert app) (let* ((echo (app-state-echo app))) (echo-message! echo "Anthy: reconvert")))
+(def (cmd-anthy-config app) (let* ((echo (app-state-echo app))) (echo-message! echo "Anthy: configure")))
+;; Round 845: Modalka / Ryo-modal
+(def (cmd-modalka-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "Modalka: mode enabled")))
+(def (cmd-modalka-define-key app) (let* ((echo (app-state-echo app))) (echo-message! echo "Modalka: define key")))
+(def (cmd-modalka-define-kbd-macro app) (let* ((echo (app-state-echo app))) (echo-message! echo "Modalka: define kbd macro")))
+(def (cmd-modalka-remove-key app) (let* ((echo (app-state-echo app))) (echo-message! echo "Modalka: remove key")))
+(def (cmd-modalka-global-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "Modalka: global mode")))
+(def (cmd-ryo-modal-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "Ryo-modal: mode enabled")))
+(def (cmd-ryo-modal-key app) (let* ((echo (app-state-echo app))) (echo-message! echo "Ryo-modal: define key")))
+(def (cmd-ryo-modal-keys app) (let* ((echo (app-state-echo app))) (echo-message! echo "Ryo-modal: define keys")))
+(def (cmd-ryo-modal-repeat app) (let* ((echo (app-state-echo app))) (echo-message! echo "Ryo-modal: repeat last")))
+(def (cmd-ryo-modal-which-key app) (let* ((echo (app-state-echo app))) (echo-message! echo "Ryo-modal: which-key integration")))
+;; Round 847: Ghost-text / Atomic-chrome ext
+(def (cmd-ghost-text-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "Ghost-text: mode enabled")))
+(def (cmd-ghost-text-start app) (let* ((echo (app-state-echo app))) (echo-message! echo "Ghost-text: start server")))
+(def (cmd-ghost-text-stop app) (let* ((echo (app-state-echo app))) (echo-message! echo "Ghost-text: stop server")))
+(def (cmd-ghost-text-set-port app) (let* ((echo (app-state-echo app))) (echo-message! echo "Ghost-text: set port")))
+(def (cmd-ghost-text-toggle app) (let* ((echo (app-state-echo app))) (echo-message! echo "Ghost-text: toggle")))
+(def (cmd-atomic-chrome-edit-done app) (let* ((echo (app-state-echo app))) (echo-message! echo "Atomic-chrome: edit done")))
+(def (cmd-atomic-chrome-edit-abort app) (let* ((echo (app-state-echo app))) (echo-message! echo "Atomic-chrome: edit abort")))
+(def (cmd-atomic-chrome-set-url-map app) (let* ((echo (app-state-echo app))) (echo-message! echo "Atomic-chrome: set URL map")))
+(def (cmd-atomic-chrome-toggle-auto app) (let* ((echo (app-state-echo app))) (echo-message! echo "Atomic-chrome: toggle auto")))
+(def (cmd-atomic-chrome-set-extension app) (let* ((echo (app-state-echo app))) (echo-message! echo "Atomic-chrome: set extension")))
+;; Round 849: Hurl ext / Bencode
+(def (cmd-hurl-run-file app) (let* ((echo (app-state-echo app))) (echo-message! echo "Hurl: run file")))
+(def (cmd-hurl-run-entry app) (let* ((echo (app-state-echo app))) (echo-message! echo "Hurl: run entry")))
+(def (cmd-hurl-set-variable app) (let* ((echo (app-state-echo app))) (echo-message! echo "Hurl: set variable")))
+(def (cmd-hurl-format app) (let* ((echo (app-state-echo app))) (echo-message! echo "Hurl: format")))
+(def (cmd-hurl-validate app) (let* ((echo (app-state-echo app))) (echo-message! echo "Hurl: validate")))
+(def (cmd-bencode-decode app) (let* ((echo (app-state-echo app))) (echo-message! echo "Bencode: decode")))
+(def (cmd-bencode-encode app) (let* ((echo (app-state-echo app))) (echo-message! echo "Bencode: encode")))
+(def (cmd-bencode-decode-region app) (let* ((echo (app-state-echo app))) (echo-message! echo "Bencode: decode region")))
+(def (cmd-bencode-encode-region app) (let* ((echo (app-state-echo app))) (echo-message! echo "Bencode: encode region")))
+(def (cmd-bencode-format app) (let* ((echo (app-state-echo app))) (echo-message! echo "Bencode: format")))
+;; Round 851: Slack / Discord ext
+(def (cmd-slack-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "Slack: mode enabled")))
+(def (cmd-slack-channel-select app) (let* ((echo (app-state-echo app))) (echo-message! echo "Slack: select channel")))
+(def (cmd-slack-post-message app) (let* ((echo (app-state-echo app))) (echo-message! echo "Slack: post message")))
+(def (cmd-slack-upload-file app) (let* ((echo (app-state-echo app))) (echo-message! echo "Slack: upload file")))
+(def (cmd-slack-search-messages app) (let* ((echo (app-state-echo app))) (echo-message! echo "Slack: search messages")))
+(def (cmd-discord-connect app) (let* ((echo (app-state-echo app))) (echo-message! echo "Discord: connect")))
+(def (cmd-discord-disconnect app) (let* ((echo (app-state-echo app))) (echo-message! echo "Discord: disconnect")))
+(def (cmd-discord-send-message app) (let* ((echo (app-state-echo app))) (echo-message! echo "Discord: send message")))
+(def (cmd-discord-join-channel app) (let* ((echo (app-state-echo app))) (echo-message! echo "Discord: join channel")))
+(def (cmd-discord-list-servers app) (let* ((echo (app-state-echo app))) (echo-message! echo "Discord: list servers")))
+;; Round 853: Lobsters / Solr
+(def (cmd-lobsters-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "Lobsters: mode enabled")))
+(def (cmd-lobsters-browse app) (let* ((echo (app-state-echo app))) (echo-message! echo "Lobsters: browse")))
+(def (cmd-lobsters-newest app) (let* ((echo (app-state-echo app))) (echo-message! echo "Lobsters: newest stories")))
+(def (cmd-lobsters-hottest app) (let* ((echo (app-state-echo app))) (echo-message! echo "Lobsters: hottest stories")))
+(def (cmd-lobsters-submit app) (let* ((echo (app-state-echo app))) (echo-message! echo "Lobsters: submit")))
+(def (cmd-solr-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "Solr: mode enabled")))
+(def (cmd-solr-query app) (let* ((echo (app-state-echo app))) (echo-message! echo "Solr: query")))
+(def (cmd-solr-add-document app) (let* ((echo (app-state-echo app))) (echo-message! echo "Solr: add document")))
+(def (cmd-solr-delete-document app) (let* ((echo (app-state-echo app))) (echo-message! echo "Solr: delete document")))
+(def (cmd-solr-commit app) (let* ((echo (app-state-echo app))) (echo-message! echo "Solr: commit")))
+;; Round 855: Cabal / Bower
+(def (cmd-cabal-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "Cabal: mode enabled")))
+(def (cmd-cabal-build app) (let* ((echo (app-state-echo app))) (echo-message! echo "Cabal: build")))
+(def (cmd-cabal-test app) (let* ((echo (app-state-echo app))) (echo-message! echo "Cabal: test")))
+(def (cmd-cabal-run app) (let* ((echo (app-state-echo app))) (echo-message! echo "Cabal: run")))
+(def (cmd-cabal-clean app) (let* ((echo (app-state-echo app))) (echo-message! echo "Cabal: clean")))
+(def (cmd-bower-install app) (let* ((echo (app-state-echo app))) (echo-message! echo "Bower: install")))
+(def (cmd-bower-update app) (let* ((echo (app-state-echo app))) (echo-message! echo "Bower: update")))
+(def (cmd-bower-search app) (let* ((echo (app-state-echo app))) (echo-message! echo "Bower: search")))
+(def (cmd-bower-list app) (let* ((echo (app-state-echo app))) (echo-message! echo "Bower: list")))
+(def (cmd-bower-uninstall app) (let* ((echo (app-state-echo app))) (echo-message! echo "Bower: uninstall")))
+;; Round 857: Unity / Unreal
+(def (cmd-unity-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "Unity: mode enabled")))
+(def (cmd-unity-build app) (let* ((echo (app-state-echo app))) (echo-message! echo "Unity: build")))
+(def (cmd-unity-run app) (let* ((echo (app-state-echo app))) (echo-message! echo "Unity: run")))
+(def (cmd-unity-attach-debugger app) (let* ((echo (app-state-echo app))) (echo-message! echo "Unity: attach debugger")))
+(def (cmd-unity-open-project app) (let* ((echo (app-state-echo app))) (echo-message! echo "Unity: open project")))
+(def (cmd-unreal-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "Unreal: mode enabled")))
+(def (cmd-unreal-build app) (let* ((echo (app-state-echo app))) (echo-message! echo "Unreal: build")))
+(def (cmd-unreal-cook app) (let* ((echo (app-state-echo app))) (echo-message! echo "Unreal: cook content")))
+(def (cmd-unreal-package app) (let* ((echo (app-state-echo app))) (echo-message! echo "Unreal: package")))
+(def (cmd-unreal-open-editor app) (let* ((echo (app-state-echo app))) (echo-message! echo "Unreal: open editor")))
+;; Round 859: OBS / VLC
+(def (cmd-obs-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "OBS: mode enabled")))
+(def (cmd-obs-start-recording app) (let* ((echo (app-state-echo app))) (echo-message! echo "OBS: start recording")))
+(def (cmd-obs-stop-recording app) (let* ((echo (app-state-echo app))) (echo-message! echo "OBS: stop recording")))
+(def (cmd-obs-switch-scene app) (let* ((echo (app-state-echo app))) (echo-message! echo "OBS: switch scene")))
+(def (cmd-obs-toggle-stream app) (let* ((echo (app-state-echo app))) (echo-message! echo "OBS: toggle stream")))
+(def (cmd-vlc-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "VLC: mode enabled")))
+(def (cmd-vlc-play app) (let* ((echo (app-state-echo app))) (echo-message! echo "VLC: play")))
+(def (cmd-vlc-pause app) (let* ((echo (app-state-echo app))) (echo-message! echo "VLC: pause")))
+(def (cmd-vlc-stop app) (let* ((echo (app-state-echo app))) (echo-message! echo "VLC: stop")))
+(def (cmd-vlc-next-track app) (let* ((echo (app-state-echo app))) (echo-message! echo "VLC: next track")))
+
+;; Round 861: Jabber / XMPP
+(def (cmd-jabber-connect app) (let* ((echo (app-state-echo app))) (echo-message! echo "Jabber: connect")))
+(def (cmd-jabber-disconnect app) (let* ((echo (app-state-echo app))) (echo-message! echo "Jabber: disconnect")))
+(def (cmd-jabber-send-message app) (let* ((echo (app-state-echo app))) (echo-message! echo "Jabber: send message")))
+(def (cmd-jabber-roster-toggle app) (let* ((echo (app-state-echo app))) (echo-message! echo "Jabber: toggle roster")))
+(def (cmd-jabber-chat-start app) (let* ((echo (app-state-echo app))) (echo-message! echo "Jabber: start chat")))
+(def (cmd-xmpp-connect app) (let* ((echo (app-state-echo app))) (echo-message! echo "XMPP: connect")))
+(def (cmd-xmpp-disconnect app) (let* ((echo (app-state-echo app))) (echo-message! echo "XMPP: disconnect")))
+(def (cmd-xmpp-send-message app) (let* ((echo (app-state-echo app))) (echo-message! echo "XMPP: send message")))
+(def (cmd-xmpp-join-room app) (let* ((echo (app-state-echo app))) (echo-message! echo "XMPP: join room")))
+(def (cmd-xmpp-set-status app) (let* ((echo (app-state-echo app))) (echo-message! echo "XMPP: set status")))
+;; Round 863: ZNC / Woman
+(def (cmd-znc-connect app) (let* ((echo (app-state-echo app))) (echo-message! echo "ZNC: connect")))
+(def (cmd-znc-disconnect app) (let* ((echo (app-state-echo app))) (echo-message! echo "ZNC: disconnect")))
+(def (cmd-znc-add-network app) (let* ((echo (app-state-echo app))) (echo-message! echo "ZNC: add network")))
+(def (cmd-znc-remove-network app) (let* ((echo (app-state-echo app))) (echo-message! echo "ZNC: remove network")))
+(def (cmd-znc-list-modules app) (let* ((echo (app-state-echo app))) (echo-message! echo "ZNC: list modules")))
+(def (cmd-woman-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "WoMan: mode enabled")))
+(def (cmd-woman-find-file app) (let* ((echo (app-state-echo app))) (echo-message! echo "WoMan: find file")))
+(def (cmd-woman-bookmark app) (let* ((echo (app-state-echo app))) (echo-message! echo "WoMan: bookmark")))
+(def (cmd-woman-next-section app) (let* ((echo (app-state-echo app))) (echo-message! echo "WoMan: next section")))
+(def (cmd-woman-prev-section app) (let* ((echo (app-state-echo app))) (echo-message! echo "WoMan: previous section")))
+;; Round 865: Howdoi / LeetCode
+(def (cmd-howdoi-query app) (let* ((echo (app-state-echo app))) (echo-message! echo "Howdoi: query")))
+(def (cmd-howdoi-search app) (let* ((echo (app-state-echo app))) (echo-message! echo "Howdoi: search")))
+(def (cmd-howdoi-insert-answer app) (let* ((echo (app-state-echo app))) (echo-message! echo "Howdoi: insert answer")))
+(def (cmd-howdoi-next-answer app) (let* ((echo (app-state-echo app))) (echo-message! echo "Howdoi: next answer")))
+(def (cmd-howdoi-prev-answer app) (let* ((echo (app-state-echo app))) (echo-message! echo "Howdoi: previous answer")))
+(def (cmd-leetcode-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "LeetCode: mode enabled")))
+(def (cmd-leetcode-browse app) (let* ((echo (app-state-echo app))) (echo-message! echo "LeetCode: browse")))
+(def (cmd-leetcode-submit app) (let* ((echo (app-state-echo app))) (echo-message! echo "LeetCode: submit")))
+(def (cmd-leetcode-test-solution app) (let* ((echo (app-state-echo app))) (echo-message! echo "LeetCode: test solution")))
+(def (cmd-leetcode-daily-challenge app) (let* ((echo (app-state-echo app))) (echo-message! echo "LeetCode: daily challenge")))
+;; Round 867: Advent-of-Code / Rosetta
+(def (cmd-advent-of-code-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "AoC: mode enabled")))
+(def (cmd-advent-of-code-download app) (let* ((echo (app-state-echo app))) (echo-message! echo "AoC: download input")))
+(def (cmd-advent-of-code-submit app) (let* ((echo (app-state-echo app))) (echo-message! echo "AoC: submit answer")))
+(def (cmd-advent-of-code-leaderboard app) (let* ((echo (app-state-echo app))) (echo-message! echo "AoC: leaderboard")))
+(def (cmd-advent-of-code-browse app) (let* ((echo (app-state-echo app))) (echo-message! echo "AoC: browse")))
+(def (cmd-rosetta-mode app) (let* ((echo (app-state-echo app))) (echo-message! echo "Rosetta: mode enabled")))
+(def (cmd-rosetta-browse app) (let* ((echo (app-state-echo app))) (echo-message! echo "Rosetta: browse")))
+(def (cmd-rosetta-search app) (let* ((echo (app-state-echo app))) (echo-message! echo "Rosetta: search")))
+(def (cmd-rosetta-insert-template app) (let* ((echo (app-state-echo app))) (echo-message! echo "Rosetta: insert template")))
+(def (cmd-rosetta-compare app) (let* ((echo (app-state-echo app))) (echo-message! echo "Rosetta: compare solutions")))
+;; Round 869: Telega ext / SX ext
+(def (cmd-telega-chat-pin app) (let* ((echo (app-state-echo app))) (echo-message! echo "Telega: pin chat")))
+(def (cmd-telega-chat-unpin app) (let* ((echo (app-state-echo app))) (echo-message! echo "Telega: unpin chat")))
+(def (cmd-telega-chat-set-title app) (let* ((echo (app-state-echo app))) (echo-message! echo "Telega: set chat title")))
+(def (cmd-telega-chat-set-description app) (let* ((echo (app-state-echo app))) (echo-message! echo "Telega: set chat description")))
+(def (cmd-telega-forward-message app) (let* ((echo (app-state-echo app))) (echo-message! echo "Telega: forward message")))
+(def (cmd-sx-search-questions app) (let* ((echo (app-state-echo app))) (echo-message! echo "SX: search questions")))
+(def (cmd-sx-browse-questions app) (let* ((echo (app-state-echo app))) (echo-message! echo "SX: browse questions")))
+(def (cmd-sx-ask-question app) (let* ((echo (app-state-echo app))) (echo-message! echo "SX: ask question")))
+(def (cmd-sx-display-question app) (let* ((echo (app-state-echo app))) (echo-message! echo "SX: display question")))
+(def (cmd-sx-accept-answer app) (let* ((echo (app-state-echo app))) (echo-message! echo "SX: accept answer")))
+;; Round 871: DevDocs ext / Info ext 2
+(def (cmd-devdocs-install-user-docset app) (let* ((echo (app-state-echo app))) (echo-message! echo "DevDocs: install user docset")))
+(def (cmd-devdocs-update app) (let* ((echo (app-state-echo app))) (echo-message! echo "DevDocs: update")))
+(def (cmd-devdocs-delete app) (let* ((echo (app-state-echo app))) (echo-message! echo "DevDocs: delete")))
+(def (cmd-devdocs-search-all app) (let* ((echo (app-state-echo app))) (echo-message! echo "DevDocs: search all")))
+(def (cmd-devdocs-set-current-doc app) (let* ((echo (app-state-echo app))) (echo-message! echo "DevDocs: set current doc")))
+(def (cmd-info-search-next app) (let* ((echo (app-state-echo app))) (echo-message! echo "Info: search next")))
+(def (cmd-info-search-case-sensitive app) (let* ((echo (app-state-echo app))) (echo-message! echo "Info: search case sensitive")))
+(def (cmd-info-history-back-forward app) (let* ((echo (app-state-echo app))) (echo-message! echo "Info: history back/forward")))
+(def (cmd-info-copy-node-name app) (let* ((echo (app-state-echo app))) (echo-message! echo "Info: copy node name")))
+(def (cmd-info-redisplay app) (let* ((echo (app-state-echo app))) (echo-message! echo "Info: redisplay")))
+;; Round 873: Dired-ranger ext / Dired-sidebar ext
+(def (cmd-dired-ranger-copy-ring app) (let* ((echo (app-state-echo app))) (echo-message! echo "Dired-ranger: copy to ring")))
+(def (cmd-dired-ranger-paste-ring app) (let* ((echo (app-state-echo app))) (echo-message! echo "Dired-ranger: paste from ring")))
+(def (cmd-dired-ranger-move-ring app) (let* ((echo (app-state-echo app))) (echo-message! echo "Dired-ranger: move from ring")))
+(def (cmd-dired-ranger-bookmark-goto app) (let* ((echo (app-state-echo app))) (echo-message! echo "Dired-ranger: goto bookmark")))
+(def (cmd-dired-ranger-sort-by-date app) (let* ((echo (app-state-echo app))) (echo-message! echo "Dired-ranger: sort by date")))
+(def (cmd-dired-sidebar-show-all app) (let* ((echo (app-state-echo app))) (echo-message! echo "Dired-sidebar: show all")))
+(def (cmd-dired-sidebar-hide-all app) (let* ((echo (app-state-echo app))) (echo-message! echo "Dired-sidebar: hide all")))
+(def (cmd-dired-sidebar-follow-current app) (let* ((echo (app-state-echo app))) (echo-message! echo "Dired-sidebar: follow current")))
+(def (cmd-dired-sidebar-refresh app) (let* ((echo (app-state-echo app))) (echo-message! echo "Dired-sidebar: refresh")))
+(def (cmd-dired-sidebar-set-width app) (let* ((echo (app-state-echo app))) (echo-message! echo "Dired-sidebar: set width")))
+;; Round 875: Treemacs ext 2 / Treemacs-icons
+(def (cmd-treemacs-collapse-all-project-nodes app) (let* ((echo (app-state-echo app))) (echo-message! echo "Treemacs: collapse all project nodes")))
+(def (cmd-treemacs-expand-all-projects app) (let* ((echo (app-state-echo app))) (echo-message! echo "Treemacs: expand all projects")))
+(def (cmd-treemacs-set-scope-type app) (let* ((echo (app-state-echo app))) (echo-message! echo "Treemacs: set scope type")))
+(def (cmd-treemacs-narrow-to-project app) (let* ((echo (app-state-echo app))) (echo-message! echo "Treemacs: narrow to project")))
+(def (cmd-treemacs-widen-from-project app) (let* ((echo (app-state-echo app))) (echo-message! echo "Treemacs: widen from project")))
+(def (cmd-treemacs-icons-dired-enable app) (let* ((echo (app-state-echo app))) (echo-message! echo "Treemacs-icons: enable in dired")))
+(def (cmd-treemacs-icons-reset app) (let* ((echo (app-state-echo app))) (echo-message! echo "Treemacs-icons: reset")))
+(def (cmd-treemacs-icons-set-custom app) (let* ((echo (app-state-echo app))) (echo-message! echo "Treemacs-icons: set custom")))
+(def (cmd-treemacs-icons-toggle-theme app) (let* ((echo (app-state-echo app))) (echo-message! echo "Treemacs-icons: toggle theme")))