Round 233: Mastodon.el (20 commands)

ober

00a5e6d353e175cf1e3178f5949ca65256948f2a

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index e6b9461..01c663a 100644
--- a/docs/jemacs-vs-emacs.md
+++ b/docs/jemacs-vs-emacs.md
@@ -4583,6 +4583,31 @@ No remaining Tier 1 gaps. All core editing, completion, and navigation features 
 | ebib-import-file | :orange_circle: | Import file into Ebib |
 | ebib-push-citation | :orange_circle: | Push Ebib citation to buffer |
 
+### Round 233 — Mastodon.el
+
+| Command | Status | Description |
+|---------|--------|-------------|
+| mastodon-toot | :orange_circle: | Compose a new Mastodon toot |
+| mastodon-tl-update | :orange_circle: | Update current Mastodon timeline |
+| mastodon-tl-next-tab-item | :orange_circle: | Move to next tab item in timeline |
+| mastodon-tl-previous-tab-item | :orange_circle: | Move to previous tab item in timeline |
+| mastodon-search | :orange_circle: | Search Mastodon for users/tags/statuses |
+| mastodon-notifications-get | :orange_circle: | Show Mastodon notifications |
+| mastodon-tl-thread | :orange_circle: | Show thread for current toot |
+| mastodon-tl-toggle-spoiler-text | :orange_circle: | Toggle content warning visibility |
+| mastodon-toot-bookmark-toot | :orange_circle: | Bookmark current toot |
+| mastodon-toot-pin-toot | :orange_circle: | Pin current toot to profile |
+| mastodon-tl-follow-user | :orange_circle: | Follow a Mastodon user |
+| mastodon-tl-unfollow-user | :orange_circle: | Unfollow a Mastodon user |
+| mastodon-tl-mute-user | :orange_circle: | Mute a Mastodon user |
+| mastodon-tl-unmute-user | :orange_circle: | Unmute a Mastodon user |
+| mastodon-tl-block-user | :orange_circle: | Block a Mastodon user |
+| mastodon-tl-unblock-user | :orange_circle: | Unblock a Mastodon user |
+| mastodon-tl-follow-tag | :orange_circle: | Follow a Mastodon hashtag |
+| mastodon-tl-home | :orange_circle: | Show home timeline |
+| mastodon-tl-local | :orange_circle: | Show local timeline |
+| mastodon-tl-federated | :orange_circle: | Show federated timeline |
+
 ### Round 232 — Detached ext, Envrc ext
 
 | Command | Status | Description |
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index 76c8f6a..30cf70f 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -19707,3 +19707,47 @@
 (def (cmd-envrc-show-env app)
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "Envrc: showing environment")))
+
+;;; Round 233 — Mastodon.el (batch 2)
+
+(def (cmd-mastodon-tl-follow-user app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Mastodon: followed user")))
+
+(def (cmd-mastodon-tl-unfollow-user app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Mastodon: unfollowed user")))
+
+(def (cmd-mastodon-tl-mute-user app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Mastodon: muted user")))
+
+(def (cmd-mastodon-tl-unmute-user app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Mastodon: unmuted user")))
+
+(def (cmd-mastodon-tl-block-user app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Mastodon: blocked user")))
+
+(def (cmd-mastodon-tl-unblock-user app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Mastodon: unblocked user")))
+
+(def (cmd-mastodon-tl-follow-tag app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Tag: "
+      (lambda (tag)
+        (echo-message! echo (str "Mastodon: following tag " tag))))))
+
+(def (cmd-mastodon-tl-home app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Mastodon: showing home timeline")))
+
+(def (cmd-mastodon-tl-local app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Mastodon: showing local timeline")))
+
+(def (cmd-mastodon-tl-federated app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Mastodon: showing federated timeline")))
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index 939ad2c..ed31493 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -20371,3 +20371,49 @@
 (def (cmd-detached-describe-session app)
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "Detached: describing session")))
+
+;;; Round 233 — Mastodon.el (batch 1)
+
+(def (cmd-mastodon-toot app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Toot: "
+      (lambda (msg)
+        (echo-message! echo "Mastodon: tooted")))))
+
+(def (cmd-mastodon-tl-update app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Mastodon: updated timeline")))
+
+(def (cmd-mastodon-tl-next-tab-item app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Mastodon: next item")))
+
+(def (cmd-mastodon-tl-previous-tab-item app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Mastodon: previous item")))
+
+(def (cmd-mastodon-search app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Search: "
+      (lambda (q)
+        (echo-message! echo (str "Mastodon: searching " q))))))
+
+(def (cmd-mastodon-notifications-get app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Mastodon: showing notifications")))
+
+(def (cmd-mastodon-tl-thread app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Mastodon: showing thread")))
+
+(def (cmd-mastodon-tl-toggle-spoiler-text app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Mastodon: toggled spoiler text")))
+
+(def (cmd-mastodon-toot-bookmark-toot app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Mastodon: bookmarked toot")))
+
+(def (cmd-mastodon-toot-pin-toot app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Mastodon: pinned toot")))
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index 1c5fed1..f6fb54a 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -6326,4 +6326,25 @@
   (register-command! 'envrc-global-mode cmd-envrc-global-mode)
   (register-command! 'envrc-override-mode cmd-envrc-override-mode)
   (register-command! 'envrc-show-env cmd-envrc-show-env)
+  ;; Round 233
+  (register-command! 'mastodon-toot cmd-mastodon-toot)
+  (register-command! 'mastodon-tl-update cmd-mastodon-tl-update)
+  (register-command! 'mastodon-tl-next-tab-item cmd-mastodon-tl-next-tab-item)
+  (register-command! 'mastodon-tl-previous-tab-item cmd-mastodon-tl-previous-tab-item)
+  (register-command! 'mastodon-search cmd-mastodon-search)
+  (register-command! 'mastodon-notifications-get cmd-mastodon-notifications-get)
+  (register-command! 'mastodon-tl-thread cmd-mastodon-tl-thread)
+  (register-command! 'mastodon-tl-toggle-spoiler-text cmd-mastodon-tl-toggle-spoiler-text)
+  (register-command! 'mastodon-toot-bookmark-toot cmd-mastodon-toot-bookmark-toot)
+  (register-command! 'mastodon-toot-pin-toot cmd-mastodon-toot-pin-toot)
+  (register-command! 'mastodon-tl-follow-user cmd-mastodon-tl-follow-user)
+  (register-command! 'mastodon-tl-unfollow-user cmd-mastodon-tl-unfollow-user)
+  (register-command! 'mastodon-tl-mute-user cmd-mastodon-tl-mute-user)
+  (register-command! 'mastodon-tl-unmute-user cmd-mastodon-tl-unmute-user)
+  (register-command! 'mastodon-tl-block-user cmd-mastodon-tl-block-user)
+  (register-command! 'mastodon-tl-unblock-user cmd-mastodon-tl-unblock-user)
+  (register-command! 'mastodon-tl-follow-tag cmd-mastodon-tl-follow-tag)
+  (register-command! 'mastodon-tl-home cmd-mastodon-tl-home)
+  (register-command! 'mastodon-tl-local cmd-mastodon-tl-local)
+  (register-command! 'mastodon-tl-federated cmd-mastodon-tl-federated)
 )