Round 229: Nov ext, Djvu ext, Calibredb (20 commands)

ober

36f0bcc35fa3b042a6c12be7dec07c339ac9fb89

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index 2f0fc93..352ce96 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 229 — Nov ext, Djvu ext, Calibredb
+
+| Command | Status | Description |
+|---------|--------|-------------|
+| nov-browse-url | :orange_circle: | Browse URL in epub |
+| nov-render-title | :orange_circle: | Render epub title |
+| nov-search | :orange_circle: | Search in epub |
+| nov-history-back | :orange_circle: | Navigate back in epub |
+| nov-history-forward | :orange_circle: | Navigate forward in epub |
+| djvu-goto-page | :orange_circle: | Goto DjVu page |
+| djvu-next-page | :orange_circle: | Next DjVu page |
+| djvu-prev-page | :orange_circle: | Previous DjVu page |
+| djvu-continuous-mode | :orange_circle: | Toggle continuous DjVu mode |
+| djvu-occur | :orange_circle: | Search in DjVu |
+| djvu-outline | :orange_circle: | Show DjVu outline |
+| djvu-find-file | :orange_circle: | Find DjVu file |
+| calibredb-list | :orange_circle: | List Calibre books |
+| calibredb-add | :orange_circle: | Add book to Calibre |
+| calibredb-remove | :orange_circle: | Remove book from Calibre |
+| calibredb-search | :orange_circle: | Search Calibre library |
+| calibredb-find-counsel | :orange_circle: | Find via counsel |
+| calibredb-set-metadata | :orange_circle: | Set book metadata |
+| calibredb-open-file-with-default-tool | :orange_circle: | Open with default tool |
+| calibredb-fetch-metadata | :orange_circle: | Fetch metadata |
+
 ### Round 228 — Spell-fu ext, Crux ext
 
 | Command | Status | Description |
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index 3bd8db6..c5684ed 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -19514,3 +19514,47 @@
 (def (cmd-crux-sudo-edit app)
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "Crux: editing with sudo")))
+
+;;; Round 229 — Nov ext, Djvu ext, Calibredb (batch 2)
+
+(def (cmd-djvu-outline app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Djvu: showing outline")))
+
+(def (cmd-djvu-find-file app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Djvu: finding file")))
+
+(def (cmd-calibredb-list app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Calibredb: listing books")))
+
+(def (cmd-calibredb-add app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Calibredb: adding book")))
+
+(def (cmd-calibredb-remove app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Calibredb: removing book")))
+
+(def (cmd-calibredb-search app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Search: "
+      (lambda (q)
+        (echo-message! echo (str "Calibredb: searching " q))))))
+
+(def (cmd-calibredb-find-counsel app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Calibredb: finding via counsel")))
+
+(def (cmd-calibredb-set-metadata app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Calibredb: setting metadata")))
+
+(def (cmd-calibredb-open-file-with-default-tool app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Calibredb: opened with default tool")))
+
+(def (cmd-calibredb-fetch-metadata app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Calibredb: fetching metadata")))
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index fe4eef2..b9b8a9f 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -20178,3 +20178,54 @@
 (def (cmd-crux-view-url app)
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "Crux: viewing URL")))
+
+;;; Round 229 — Nov ext, Djvu ext, Calibredb (batch 1)
+
+(def (cmd-nov-browse-url app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Nov: browsing URL")))
+
+(def (cmd-nov-render-title app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Nov: rendering title")))
+
+(def (cmd-nov-search app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Search: "
+      (lambda (q)
+        (echo-message! echo (str "Nov: searching for " q))))))
+
+(def (cmd-nov-history-back app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Nov: history back")))
+
+(def (cmd-nov-history-forward app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Nov: history forward")))
+
+(def (cmd-djvu-goto-page app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Page: "
+      (lambda (p)
+        (echo-message! echo (str "Djvu: goto page " p))))))
+
+(def (cmd-djvu-next-page app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Djvu: next page")))
+
+(def (cmd-djvu-prev-page app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Djvu: previous page")))
+
+(def (cmd-djvu-continuous-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'djvu-continuous)
+    (if (mode-enabled? app 'djvu-continuous)
+      (echo-message! echo "Djvu: continuous mode enabled")
+      (echo-message! echo "Djvu: continuous mode disabled"))))
+
+(def (cmd-djvu-occur app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Search: "
+      (lambda (q)
+        (echo-message! echo (str "Djvu: occur " q))))))
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index a8a9ef0..4e789e0 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -6242,4 +6242,25 @@
   (register-command! 'crux-capitalize-region cmd-crux-capitalize-region)
   (register-command! 'crux-other-window-or-switch-buffer cmd-crux-other-window-or-switch-buffer)
   (register-command! 'crux-sudo-edit cmd-crux-sudo-edit)
+  ;; Round 229
+  (register-command! 'nov-browse-url cmd-nov-browse-url)
+  (register-command! 'nov-render-title cmd-nov-render-title)
+  (register-command! 'nov-search cmd-nov-search)
+  (register-command! 'nov-history-back cmd-nov-history-back)
+  (register-command! 'nov-history-forward cmd-nov-history-forward)
+  (register-command! 'djvu-goto-page cmd-djvu-goto-page)
+  (register-command! 'djvu-next-page cmd-djvu-next-page)
+  (register-command! 'djvu-prev-page cmd-djvu-prev-page)
+  (register-command! 'djvu-continuous-mode cmd-djvu-continuous-mode)
+  (register-command! 'djvu-occur cmd-djvu-occur)
+  (register-command! 'djvu-outline cmd-djvu-outline)
+  (register-command! 'djvu-find-file cmd-djvu-find-file)
+  (register-command! 'calibredb-list cmd-calibredb-list)
+  (register-command! 'calibredb-add cmd-calibredb-add)
+  (register-command! 'calibredb-remove cmd-calibredb-remove)
+  (register-command! 'calibredb-search cmd-calibredb-search)
+  (register-command! 'calibredb-find-counsel cmd-calibredb-find-counsel)
+  (register-command! 'calibredb-set-metadata cmd-calibredb-set-metadata)
+  (register-command! 'calibredb-open-file-with-default-tool cmd-calibredb-open-file-with-default-tool)
+  (register-command! 'calibredb-fetch-metadata cmd-calibredb-fetch-metadata)
 )