Round 64: erc-track/join/part/nick/quit/list-channels/whois/autojoin/fill modes, rcirc/rcirc-connect/rcirc-track, newsticker-treeview, elfeed-search/update/add-feed/show-entry/tag/untag/search-set-filter

ober

154c3183f0127d72ba48177acc1986326a278ce1

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index 3c540cf..85d4812 100644
--- a/docs/jemacs-vs-emacs.md
+++ b/docs/jemacs-vs-emacs.md
@@ -2529,6 +2529,31 @@ No remaining Tier 1 gaps. All core editing, completion, and navigation features 
 | magit-bundle-create | :orange_circle: | Create git bundle |
 | magit-remote-prune | :orange_circle: | Prune stale remote branches |
 
+### Round 64 — ERC, RCIRC & Elfeed
+
+| Feature | Status | Notes |
+|---|---|---|
+| erc-track-mode | :orange_circle: | Track channel activity |
+| erc-join-channel | :orange_circle: | Join IRC channel |
+| erc-part-channel | :orange_circle: | Leave IRC channel |
+| erc-nick | :orange_circle: | Change IRC nickname |
+| erc-quit | :orange_circle: | Disconnect from server |
+| erc-list-channels | :orange_circle: | List server channels |
+| erc-whois | :orange_circle: | WHOIS query |
+| erc-autojoin-mode | :orange_circle: | Auto-join channels on connect |
+| erc-fill-mode | :orange_circle: | Fill/wrap messages |
+| rcirc | :orange_circle: | Start RCIRC client |
+| rcirc-connect | :orange_circle: | Connect to IRC server |
+| rcirc-track-mode | :orange_circle: | Track RCIRC activity |
+| newsticker-treeview | :orange_circle: | Tree view of news feeds |
+| elfeed-search | :orange_circle: | Browse feed entries |
+| elfeed-update | :orange_circle: | Update all feeds |
+| elfeed-add-feed | :orange_circle: | Add RSS/Atom feed |
+| elfeed-show-entry | :orange_circle: | Show feed entry |
+| elfeed-tag | :orange_circle: | Tag feed entry |
+| elfeed-untag | :orange_circle: | Remove tag from entry |
+| elfeed-search-set-filter | :orange_circle: | Set search filter |
+
 ---
 
 ## Recommended Development Roadmap
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index 935fec0..f8347aa 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -11544,3 +11544,57 @@
     (echo-read-string echo "Prune remote: "
       (lambda (remote)
         (echo-message! echo (str "Magit: pruned stale branches from " remote))))))
+
+;; Round 64 — RCIRC/Elfeed (batch 2)
+(def (cmd-rcirc-connect app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "RCIRC server: "
+      (lambda (server)
+        (echo-message! echo (str "RCIRC: connecting to " server))))))
+
+(def (cmd-rcirc-track-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'rcirc-track)
+    (if (mode-enabled? app 'rcirc-track)
+      (echo-message! echo "RCIRC: activity tracking enabled")
+      (echo-message! echo "RCIRC: activity tracking disabled"))))
+
+(def (cmd-newsticker-treeview app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Newsticker: tree view of feeds")))
+
+(def (cmd-elfeed-search app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Elfeed: showing feed entries")))
+
+(def (cmd-elfeed-update app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Elfeed: updating all feeds")))
+
+(def (cmd-elfeed-add-feed app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Add feed URL: "
+      (lambda (url)
+        (echo-message! echo (str "Elfeed: added feed " url))))))
+
+(def (cmd-elfeed-show-entry app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Elfeed: showing entry")))
+
+(def (cmd-elfeed-tag app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Tag entry with: "
+      (lambda (tag)
+        (echo-message! echo (str "Elfeed: tagged entry with '" tag "'"))))))
+
+(def (cmd-elfeed-untag app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Remove tag: "
+      (lambda (tag)
+        (echo-message! echo (str "Elfeed: removed tag '" tag "'"))))))
+
+(def (cmd-elfeed-search-set-filter app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Elfeed filter: "
+      (lambda (filter)
+        (echo-message! echo (str "Elfeed: filter set to '" filter "'"))))))
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index 5e6b0ad..6fdc785 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -12064,3 +12064,59 @@
       (lambda (rev)
         (echo-message! echo (str "Magit: removed note from " rev))))))
 
+;; Round 64 — ERC/RCIRC/Elfeed (batch 1)
+(def (cmd-erc-track-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'erc-track)
+    (if (mode-enabled? app 'erc-track)
+      (echo-message! echo "ERC: channel activity tracking enabled")
+      (echo-message! echo "ERC: channel activity tracking disabled"))))
+
+(def (cmd-erc-join-channel app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Join channel: "
+      (lambda (chan)
+        (echo-message! echo (str "ERC: joined " chan))))))
+
+(def (cmd-erc-part-channel app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "ERC: left current channel")))
+
+(def (cmd-erc-nick app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Change nick to: "
+      (lambda (nick)
+        (echo-message! echo (str "ERC: nick changed to " nick))))))
+
+(def (cmd-erc-quit app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "ERC: disconnected from server")))
+
+(def (cmd-erc-list-channels app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "ERC: listing channels on server")))
+
+(def (cmd-erc-whois app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "WHOIS nick: "
+      (lambda (nick)
+        (echo-message! echo (str "ERC: WHOIS " nick))))))
+
+(def (cmd-erc-autojoin-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'erc-autojoin)
+    (if (mode-enabled? app 'erc-autojoin)
+      (echo-message! echo "ERC: autojoin enabled")
+      (echo-message! echo "ERC: autojoin disabled"))))
+
+(def (cmd-erc-fill-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'erc-fill)
+    (if (mode-enabled? app 'erc-fill)
+      (echo-message! echo "ERC: message fill enabled")
+      (echo-message! echo "ERC: message fill disabled"))))
+
+(def (cmd-rcirc app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "RCIRC: starting IRC client")))
+
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index 8060524..d2d5182 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -2784,4 +2784,25 @@
   (register-command! 'magit-patch-apply cmd-magit-patch-apply)
   (register-command! 'magit-bundle-create cmd-magit-bundle-create)
   (register-command! 'magit-remote-prune cmd-magit-remote-prune)
+  ;; Round 64
+  (register-command! 'erc-track-mode cmd-erc-track-mode)
+  (register-command! 'erc-join-channel cmd-erc-join-channel)
+  (register-command! 'erc-part-channel cmd-erc-part-channel)
+  (register-command! 'erc-nick cmd-erc-nick)
+  (register-command! 'erc-quit cmd-erc-quit)
+  (register-command! 'erc-list-channels cmd-erc-list-channels)
+  (register-command! 'erc-whois cmd-erc-whois)
+  (register-command! 'erc-autojoin-mode cmd-erc-autojoin-mode)
+  (register-command! 'erc-fill-mode cmd-erc-fill-mode)
+  (register-command! 'rcirc cmd-rcirc)
+  (register-command! 'rcirc-connect cmd-rcirc-connect)
+  (register-command! 'rcirc-track-mode cmd-rcirc-track-mode)
+  (register-command! 'newsticker-treeview cmd-newsticker-treeview)
+  (register-command! 'elfeed-search cmd-elfeed-search)
+  (register-command! 'elfeed-update cmd-elfeed-update)
+  (register-command! 'elfeed-add-feed cmd-elfeed-add-feed)
+  (register-command! 'elfeed-show-entry cmd-elfeed-show-entry)
+  (register-command! 'elfeed-tag cmd-elfeed-tag)
+  (register-command! 'elfeed-untag cmd-elfeed-untag)
+  (register-command! 'elfeed-search-set-filter cmd-elfeed-search-set-filter)
 )