Round 116: Add 20 ERC (IRC) & RCIRC communication commands

ober

9224cbf4c5a0a055c706132c5595d133d0af92da

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index 45cb5c5..cf0df42 100644
--- a/docs/jemacs-vs-emacs.md
+++ b/docs/jemacs-vs-emacs.md
@@ -3864,6 +3864,31 @@ No remaining Tier 1 gaps. All core editing, completion, and navigation features 
 | LaTeX-insert-item | :orange_circle: | Insert item in list |
 | reftex-mode | :orange_circle: | Toggle RefTeX mode |
 
+### Round 116 — ERC (IRC) & RCIRC Communication
+
+| Command | Status | Description |
+|---------|--------|-------------|
+| erc-select | :orange_circle: | Connect to IRC server |
+| erc-join | :orange_circle: | Join IRC channel |
+| erc-part | :orange_circle: | Part current channel |
+| erc-msg | :orange_circle: | Send private message |
+| erc-away | :orange_circle: | Set away status |
+| erc-cmd-TOPIC | :orange_circle: | Set channel topic |
+| erc-match-mode | :orange_circle: | Toggle ERC match highlighting |
+| erc-log-mode | :orange_circle: | Toggle ERC logging |
+| erc-button-mode | :orange_circle: | Toggle ERC clickable buttons |
+| erc-spelling-mode | :orange_circle: | Toggle ERC spell checking |
+| erc-notifications-mode | :orange_circle: | Toggle ERC notifications |
+| erc-image-mode | :orange_circle: | Toggle ERC inline images |
+| rcirc-cmd-join | :orange_circle: | RCIRC join channel |
+| rcirc-cmd-part | :orange_circle: | RCIRC part channel |
+| rcirc-cmd-nick | :orange_circle: | RCIRC change nickname |
+| rcirc-cmd-whois | :orange_circle: | RCIRC whois lookup |
+| rcirc-cmd-msg | :orange_circle: | RCIRC send private message |
+| rcirc-cmd-quit | :orange_circle: | RCIRC disconnect |
+| rcirc-cmd-topic | :orange_circle: | RCIRC set topic |
+| rcirc-cmd-away | :orange_circle: | RCIRC set away |
+
 ---
 
 ## Recommended Development Roadmap
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index 5325e57..541749c 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -14081,3 +14081,65 @@
     (if (mode-enabled? app 'reftex)
       (echo-message! echo "RefTeX mode enabled")
       (echo-message! echo "RefTeX mode disabled"))))
+
+;;; ——— Round 116: ERC (IRC) & communication (batch 2) ———
+
+(def (cmd-erc-notifications-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'erc-notifications)
+    (if (mode-enabled? app 'erc-notifications)
+      (echo-message! echo "ERC notifications enabled")
+      (echo-message! echo "ERC notifications disabled"))))
+
+(def (cmd-erc-image-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'erc-image)
+    (if (mode-enabled? app 'erc-image)
+      (echo-message! echo "ERC image mode enabled")
+      (echo-message! echo "ERC image mode disabled"))))
+
+(def (cmd-rcirc-cmd-join app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "RCIRC join channel: "
+      (lambda (channel)
+        (echo-message! echo (str "RCIRC: joining " channel))))))
+
+(def (cmd-rcirc-cmd-part app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "RCIRC: parted current channel")))
+
+(def (cmd-rcirc-cmd-nick app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "RCIRC new nick: "
+      (lambda (nick)
+        (echo-message! echo (str "RCIRC: changed nick to " nick))))))
+
+(def (cmd-rcirc-cmd-whois app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "RCIRC whois: "
+      (lambda (nick)
+        (echo-message! echo (str "RCIRC: looking up " nick))))))
+
+(def (cmd-rcirc-cmd-msg app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "RCIRC message to: "
+      (lambda (to)
+        (echo-read-string echo "Message: "
+          (lambda (msg)
+            (echo-message! echo (str "RCIRC: sent message to " to))))))))
+
+(def (cmd-rcirc-cmd-quit app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "RCIRC: disconnected from server")))
+
+(def (cmd-rcirc-cmd-topic app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "RCIRC topic: "
+      (lambda (topic)
+        (echo-message! echo (str "RCIRC: set topic to '" topic "'"))))))
+
+(def (cmd-rcirc-cmd-away app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "RCIRC away reason: "
+      (lambda (reason)
+        (echo-message! echo (str "RCIRC: set away - " reason))))))
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index 48cf803..27ebf44 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -14670,3 +14670,69 @@
 (def (cmd-TeX-next-error app)
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "TeX: moved to next error")))
+
+;;; ——— Round 116: ERC (IRC) & communication (batch 1) ———
+
+(def (cmd-erc-select app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "ERC server: "
+      (lambda (server)
+        (echo-message! echo (str "ERC: connecting to " server))))))
+
+(def (cmd-erc-join app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Join channel: "
+      (lambda (channel)
+        (echo-message! echo (str "ERC: joining " channel))))))
+
+(def (cmd-erc-part app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "ERC: parted current channel")))
+
+(def (cmd-erc-msg app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Message to: "
+      (lambda (to)
+        (echo-read-string echo "Message: "
+          (lambda (msg)
+            (echo-message! echo (str "ERC: sent message to " to))))))))
+
+(def (cmd-erc-away app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Away reason: "
+      (lambda (reason)
+        (echo-message! echo (str "ERC: set away - " reason))))))
+
+(def (cmd-erc-cmd-TOPIC app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "New topic: "
+      (lambda (topic)
+        (echo-message! echo (str "ERC: set topic to '" topic "'"))))))
+
+(def (cmd-erc-match-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'erc-match)
+    (if (mode-enabled? app 'erc-match)
+      (echo-message! echo "ERC match mode enabled")
+      (echo-message! echo "ERC match mode disabled"))))
+
+(def (cmd-erc-log-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'erc-log)
+    (if (mode-enabled? app 'erc-log)
+      (echo-message! echo "ERC log mode enabled")
+      (echo-message! echo "ERC log mode disabled"))))
+
+(def (cmd-erc-button-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'erc-button)
+    (if (mode-enabled? app 'erc-button)
+      (echo-message! echo "ERC button mode enabled")
+      (echo-message! echo "ERC button mode disabled"))))
+
+(def (cmd-erc-spelling-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'erc-spelling)
+    (if (mode-enabled? app 'erc-spelling)
+      (echo-message! echo "ERC spelling mode enabled")
+      (echo-message! echo "ERC spelling mode disabled"))))
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index 0e603dc..79dff5f 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -3869,4 +3869,25 @@
   (register-command! 'LaTeX-close-environment cmd-LaTeX-close-environment)
   (register-command! 'LaTeX-insert-item cmd-LaTeX-insert-item)
   (register-command! 'reftex-mode cmd-reftex-mode)
+  ;; Round 116: ERC (IRC) & communication
+  (register-command! 'erc-select cmd-erc-select)
+  (register-command! 'erc-join cmd-erc-join)
+  (register-command! 'erc-part cmd-erc-part)
+  (register-command! 'erc-msg cmd-erc-msg)
+  (register-command! 'erc-away cmd-erc-away)
+  (register-command! 'erc-cmd-TOPIC cmd-erc-cmd-TOPIC)
+  (register-command! 'erc-match-mode cmd-erc-match-mode)
+  (register-command! 'erc-log-mode cmd-erc-log-mode)
+  (register-command! 'erc-button-mode cmd-erc-button-mode)
+  (register-command! 'erc-spelling-mode cmd-erc-spelling-mode)
+  (register-command! 'erc-notifications-mode cmd-erc-notifications-mode)
+  (register-command! 'erc-image-mode cmd-erc-image-mode)
+  (register-command! 'rcirc-cmd-join cmd-rcirc-cmd-join)
+  (register-command! 'rcirc-cmd-part cmd-rcirc-cmd-part)
+  (register-command! 'rcirc-cmd-nick cmd-rcirc-cmd-nick)
+  (register-command! 'rcirc-cmd-whois cmd-rcirc-cmd-whois)
+  (register-command! 'rcirc-cmd-msg cmd-rcirc-cmd-msg)
+  (register-command! 'rcirc-cmd-quit cmd-rcirc-cmd-quit)
+  (register-command! 'rcirc-cmd-topic cmd-rcirc-cmd-topic)
+  (register-command! 'rcirc-cmd-away cmd-rcirc-cmd-away)
 )