Round 84: Add PDF, image, and doc-view features

ober

db031205d4dbc1162f1c633fce0c37a2e8a8163e

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index 0c760b0..ab28b09 100644
--- a/docs/jemacs-vs-emacs.md
+++ b/docs/jemacs-vs-emacs.md
@@ -3038,6 +3038,33 @@ No remaining Tier 1 gaps. All core editing, completion, and navigation features 
 
 ---
 
+### Round 84 — PDF, Image & Doc-view
+
+| Emacs Command | Status | Description |
+|---|---|---|
+| pdf-view-scroll-up | :orange_circle: | Scroll PDF up |
+| pdf-view-scroll-down | :orange_circle: | Scroll PDF down |
+| pdf-view-fit-width | :orange_circle: | Fit PDF to width |
+| pdf-view-fit-height | :orange_circle: | Fit PDF to height |
+| pdf-annot-add-highlight | :orange_circle: | Add PDF highlight annotation |
+| pdf-annot-add-text | :orange_circle: | Add PDF text annotation |
+| pdf-annot-list-annotations | :orange_circle: | List PDF annotations |
+| pdf-occur | :orange_circle: | Search in PDF document |
+| pdf-outline | :orange_circle: | Show PDF outline |
+| nov-goto-toc | :orange_circle: | Go to epub table of contents |
+| image-next-file | :orange_circle: | Next image file |
+| image-previous-file | :orange_circle: | Previous image file |
+| image-transform-rotate | :orange_circle: | Rotate image |
+| image-transform-fit-both | :orange_circle: | Fit image to both dimensions |
+| image-increase-size | :orange_circle: | Increase image size |
+| image-decrease-size | :orange_circle: | Decrease image size |
+| doc-view-toggle-display | :orange_circle: | Toggle doc-view display mode |
+| doc-view-search | :orange_circle: | Search in doc-view |
+| pdf-view-auto-slice-mode | :orange_circle: | Toggle PDF auto-slice mode |
+| pdf-view-themed-minor-mode | :orange_circle: | Toggle PDF themed mode |
+
+---
+
 ## 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 f59b321..3645dc6 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -12524,3 +12524,52 @@
 (def (cmd-ob-clojure-execute app)
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "Org Babel: executed Clojure block")))
+
+;;; Round 84 — Image & Doc-view (cont.)
+(def (cmd-image-next-file app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Image: next file")))
+
+(def (cmd-image-previous-file app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Image: previous file")))
+
+(def (cmd-image-transform-rotate app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Image: rotated")))
+
+(def (cmd-image-transform-fit-both app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Image: fit to both dimensions")))
+
+(def (cmd-image-increase-size app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Image: size increased")))
+
+(def (cmd-image-decrease-size app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Image: size decreased")))
+
+(def (cmd-doc-view-toggle-display app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Doc-view: toggled display mode")))
+
+(def (cmd-doc-view-search app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Doc-view search: "
+      (lambda (query)
+        (echo-message! echo (str "Doc-view: searching for '" query "'"))))))
+
+(def (cmd-pdf-view-auto-slice-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'pdf-view-auto-slice)
+    (if (mode-enabled? app 'pdf-view-auto-slice)
+      (echo-message! echo "PDF auto-slice mode enabled")
+      (echo-message! echo "PDF auto-slice mode disabled"))))
+
+(def (cmd-pdf-view-themed-minor-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'pdf-view-themed)
+    (if (mode-enabled? app 'pdf-view-themed)
+      (echo-message! echo "PDF themed mode enabled")
+      (echo-message! echo "PDF themed mode disabled"))))
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index 201bf20..f2aea0f 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -13082,6 +13082,51 @@
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "Org Babel: executed SQL block")))
 
+;;; Round 84 — PDF, Image & Doc-view
+(def (cmd-pdf-view-scroll-up app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "PDF: scrolled up")))
+
+(def (cmd-pdf-view-scroll-down app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "PDF: scrolled down")))
+
+(def (cmd-pdf-view-fit-width app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "PDF: fit to width")))
+
+(def (cmd-pdf-view-fit-height app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "PDF: fit to height")))
+
+(def (cmd-pdf-annot-add-highlight app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "PDF: highlight annotation added")))
+
+(def (cmd-pdf-annot-add-text app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Annotation text: "
+      (lambda (text)
+        (echo-message! echo (str "PDF: text annotation added"))))))
+
+(def (cmd-pdf-annot-list-annotations app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "PDF: listing annotations")))
+
+(def (cmd-pdf-occur app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "PDF occur pattern: "
+      (lambda (pattern)
+        (echo-message! echo (str "PDF: searching for '" pattern "'"))))))
+
+(def (cmd-pdf-outline app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "PDF: showing document outline")))
+
+(def (cmd-nov-goto-toc app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Nov: showing table of contents")))
+
 (def (cmd-ob-python-execute app)
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "Org Babel: executed Python block")))
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index 76bfea1..8788207 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -3199,4 +3199,25 @@
   (register-command! 'ob-c-execute cmd-ob-c-execute)
   (register-command! 'ob-java-execute cmd-ob-java-execute)
   (register-command! 'ob-clojure-execute cmd-ob-clojure-execute)
+  ;; Round 84
+  (register-command! 'pdf-view-scroll-up cmd-pdf-view-scroll-up)
+  (register-command! 'pdf-view-scroll-down cmd-pdf-view-scroll-down)
+  (register-command! 'pdf-view-fit-width cmd-pdf-view-fit-width)
+  (register-command! 'pdf-view-fit-height cmd-pdf-view-fit-height)
+  (register-command! 'pdf-annot-add-highlight cmd-pdf-annot-add-highlight)
+  (register-command! 'pdf-annot-add-text cmd-pdf-annot-add-text)
+  (register-command! 'pdf-annot-list-annotations cmd-pdf-annot-list-annotations)
+  (register-command! 'pdf-occur cmd-pdf-occur)
+  (register-command! 'pdf-outline cmd-pdf-outline)
+  (register-command! 'nov-goto-toc cmd-nov-goto-toc)
+  (register-command! 'image-next-file cmd-image-next-file)
+  (register-command! 'image-previous-file cmd-image-previous-file)
+  (register-command! 'image-transform-rotate cmd-image-transform-rotate)
+  (register-command! 'image-transform-fit-both cmd-image-transform-fit-both)
+  (register-command! 'image-increase-size cmd-image-increase-size)
+  (register-command! 'image-decrease-size cmd-image-decrease-size)
+  (register-command! 'doc-view-toggle-display cmd-doc-view-toggle-display)
+  (register-command! 'doc-view-search cmd-doc-view-search)
+  (register-command! 'pdf-view-auto-slice-mode cmd-pdf-view-auto-slice-mode)
+  (register-command! 'pdf-view-themed-minor-mode cmd-pdf-view-themed-minor-mode)
 )