Round 135: Add 20 PDF-tools, Elfeed, Mu4e commands

ober

3c4d4c03788a18ad9114bd8e6d0b45aa871b61e8

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index a5174dc..3dfdf98 100644
--- a/docs/jemacs-vs-emacs.md
+++ b/docs/jemacs-vs-emacs.md
@@ -4369,6 +4369,33 @@ No remaining Tier 1 gaps. All core editing, completion, and navigation features 
 
 ---
 
+### Round 135 — PDF-tools, Elfeed, Mu4e
+
+| Command | Status | Description |
+|---------|--------|-------------|
+| pdf-view-first-page | :orange_circle: | Jump to first PDF page |
+| pdf-view-last-page | :orange_circle: | Jump to last PDF page |
+| pdf-view-fit-page-to-window | :orange_circle: | Fit PDF page to window |
+| pdf-view-fit-width-to-window | :orange_circle: | Fit PDF width to window |
+| pdf-view-fit-height-to-window | :orange_circle: | Fit PDF height to window |
+| pdf-view-midnight-minor-mode | :orange_circle: | Toggle PDF midnight mode |
+| pdf-view-auto-slice-minor-mode | :orange_circle: | Toggle PDF auto-slice mode |
+| pdf-annot-add-highlight-markup-annotation | :orange_circle: | Add PDF highlight annotation |
+| pdf-annot-add-underline-markup-annotation | :orange_circle: | Add PDF underline annotation |
+| pdf-annot-add-text-annotation | :orange_circle: | Add PDF text annotation |
+| pdf-annot-delete | :orange_circle: | Delete PDF annotation |
+| elfeed-search-clear-filter | :orange_circle: | Clear Elfeed search filter |
+| elfeed-search-tag-all-unread | :orange_circle: | Tag all as unread |
+| elfeed-search-untag-all-unread | :orange_circle: | Untag all unread |
+| elfeed-show-tag | :orange_circle: | Add tag to entry |
+| elfeed-show-untag | :orange_circle: | Remove tag from entry |
+| mu4e-search | :orange_circle: | Search mail via Mu4e |
+| mu4e-headers-next | :orange_circle: | Next Mu4e header |
+| mu4e-headers-prev | :orange_circle: | Previous Mu4e header |
+| mu4e-view-action | :orange_circle: | Mu4e view action |
+
+---
+
 ## Recommended Development Roadmap
 
 > *Reprioritized based on the user's actual Emacs workflow*
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index 25d7631..32745e6 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -14990,3 +14990,51 @@
 (def (cmd-cider-eval-defun-at-point app)
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "CIDER: evaluated defun at point")))
+
+;;; Round 135 — PDF-tools, Elfeed, Mu4e (batch 2)
+
+(def (cmd-pdf-annot-delete app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "PDF: deleted annotation")))
+
+(def (cmd-elfeed-search-clear-filter app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Elfeed: cleared search filter")))
+
+(def (cmd-elfeed-search-tag-all-unread app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Elfeed: tagged all as unread")))
+
+(def (cmd-elfeed-search-untag-all-unread app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Elfeed: untagged all unread")))
+
+(def (cmd-elfeed-show-tag app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Add tag: "
+      (lambda (tag)
+        (echo-message! echo (str "Elfeed: added tag '" tag "'"))))))
+
+(def (cmd-elfeed-show-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-mu4e-search app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Mu4e search: "
+      (lambda (query)
+        (echo-message! echo (str "Mu4e: searching for '" query "'"))))))
+
+(def (cmd-mu4e-headers-next app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Mu4e: next header")))
+
+(def (cmd-mu4e-headers-prev app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Mu4e: previous header")))
+
+(def (cmd-mu4e-view-action app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Mu4e: view action")))
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index fb77f46..2c16b18 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -15597,3 +15597,51 @@
     (echo-read-string echo "Sly doc lookup: "
       (lambda (sym)
         (echo-message! echo (str "Sly: looking up documentation for '" sym "'"))))))
+
+;;; Round 135 — PDF-tools, Elfeed, Mu4e (batch 1)
+
+(def (cmd-pdf-view-first-page app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "PDF: jumped to first page")))
+
+(def (cmd-pdf-view-last-page app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "PDF: jumped to last page")))
+
+(def (cmd-pdf-view-fit-page-to-window app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "PDF: fit page to window")))
+
+(def (cmd-pdf-view-fit-width-to-window app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "PDF: fit width to window")))
+
+(def (cmd-pdf-view-fit-height-to-window app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "PDF: fit height to window")))
+
+(def (cmd-pdf-view-midnight-minor-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'pdf-midnight)
+    (if (mode-enabled? app 'pdf-midnight)
+      (echo-message! echo "PDF Midnight mode enabled")
+      (echo-message! echo "PDF Midnight mode disabled"))))
+
+(def (cmd-pdf-view-auto-slice-minor-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'pdf-auto-slice)
+    (if (mode-enabled? app 'pdf-auto-slice)
+      (echo-message! echo "PDF Auto-Slice mode enabled")
+      (echo-message! echo "PDF Auto-Slice mode disabled"))))
+
+(def (cmd-pdf-annot-add-highlight-markup-annotation app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "PDF: added highlight annotation")))
+
+(def (cmd-pdf-annot-add-underline-markup-annotation app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "PDF: added underline annotation")))
+
+(def (cmd-pdf-annot-add-text-annotation app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "PDF: added text annotation")))
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index 22e0346..025aa4c 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -4268,4 +4268,25 @@
   (register-command! 'geiser-compile-current-buffer cmd-geiser-compile-current-buffer)
   (register-command! 'cider-connect cmd-cider-connect)
   (register-command! 'cider-eval-defun-at-point cmd-cider-eval-defun-at-point)
+  ;; Round 135 — PDF-tools, Elfeed, Mu4e
+  (register-command! 'pdf-view-first-page cmd-pdf-view-first-page)
+  (register-command! 'pdf-view-last-page cmd-pdf-view-last-page)
+  (register-command! 'pdf-view-fit-page-to-window cmd-pdf-view-fit-page-to-window)
+  (register-command! 'pdf-view-fit-width-to-window cmd-pdf-view-fit-width-to-window)
+  (register-command! 'pdf-view-fit-height-to-window cmd-pdf-view-fit-height-to-window)
+  (register-command! 'pdf-view-midnight-minor-mode cmd-pdf-view-midnight-minor-mode)
+  (register-command! 'pdf-view-auto-slice-minor-mode cmd-pdf-view-auto-slice-minor-mode)
+  (register-command! 'pdf-annot-add-highlight-markup-annotation cmd-pdf-annot-add-highlight-markup-annotation)
+  (register-command! 'pdf-annot-add-underline-markup-annotation cmd-pdf-annot-add-underline-markup-annotation)
+  (register-command! 'pdf-annot-add-text-annotation cmd-pdf-annot-add-text-annotation)
+  (register-command! 'pdf-annot-delete cmd-pdf-annot-delete)
+  (register-command! 'elfeed-search-clear-filter cmd-elfeed-search-clear-filter)
+  (register-command! 'elfeed-search-tag-all-unread cmd-elfeed-search-tag-all-unread)
+  (register-command! 'elfeed-search-untag-all-unread cmd-elfeed-search-untag-all-unread)
+  (register-command! 'elfeed-show-tag cmd-elfeed-show-tag)
+  (register-command! 'elfeed-show-untag cmd-elfeed-show-untag)
+  (register-command! 'mu4e-search cmd-mu4e-search)
+  (register-command! 'mu4e-headers-next cmd-mu4e-headers-next)
+  (register-command! 'mu4e-headers-prev cmd-mu4e-headers-prev)
+  (register-command! 'mu4e-view-action cmd-mu4e-view-action)
 )