[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/doc-view-follow 79a1cab807 41/43: Add end-of-buffer nav
From: |
ELPA Syncer |
Subject: |
[elpa] externals/doc-view-follow 79a1cab807 41/43: Add end-of-buffer navigation and keymaps to doc-view-follow |
Date: |
Sun, 13 Apr 2025 12:58:32 -0400 (EDT) |
branch: externals/doc-view-follow
commit 79a1cab807acffc96b1ccc15a28948c9d718b204
Author: Paul Nelson <ultrono@gmail.com>
Commit: Paul Nelson <ultrono@gmail.com>
Add end-of-buffer navigation and keymaps to doc-view-follow
* doc-view-follow.el (doc-view-follow-mode-map): New keymap.
(doc-view-follow-get-page-count): New generic function.
(doc-view-follow-beginning-of-buffer, doc-view-follow-end-of-buffer):
New functions.
(doc-view-follow-mode): Use the new keymap.
(doc-view-follow-set-page): Use new page count function.
(doc-view, pdf-tools): Add implementations of get-page-count method.
---
doc-view-follow.el | 53 ++++++++++++++++++++++++++++++++++++++++++++++++-----
1 file changed, 48 insertions(+), 5 deletions(-)
diff --git a/doc-view-follow.el b/doc-view-follow.el
index a090eea917..dc6a03912c 100644
--- a/doc-view-follow.el
+++ b/doc-view-follow.el
@@ -5,7 +5,7 @@
;; Author: Paul D. Nelson <ultrono@gmail.com>
;; Version: 0.2
;; URL: https://github.com/ultronozm/doc-view-follow.el
-;; Package-Requires: ((emacs "27.1"))
+;; Package-Requires: ((emacs "29.1"))
;; Keywords: convenience
;; This program is free software; you can redistribute it and/or modify
@@ -50,11 +50,19 @@
;;; Code:
(require 'follow)
+(require 'compat)
(defgroup doc-view-follow nil
"Synchronize pages between windows displaying the same document."
:group 'convenience)
+(defvar-keymap doc-view-follow-mode-map
+ :doc "Keymap for `doc-view-follow-mode'."
+ "<remap> <doc-view-first-page>" #'doc-view-follow-beginning-of-buffer
+ "<remap> <doc-view-last-page>" #'doc-view-follow-end-of-buffer
+ "<remap> <pdf-view-first-page>" #'doc-view-follow-beginning-of-buffer
+ "<remap> <pdf-view-last-page>" #'doc-view-follow-end-of-buffer)
+
;;;###autoload
(cl-defgeneric doc-view-follow-supported-p (_mode)
"Check if MODE supports `doc-view-follow-mode'."
@@ -76,13 +84,44 @@
"Get current page number in MODE document buffer."
(error "`doc-view-follow-mode' is not supported in %s" mode))
+(cl-defgeneric doc-view-follow-get-page-count (mode)
+ "Get total number of pages in MODE document buffer."
+ (error "`doc-view-follow-mode' is not supported in %s" mode))
+
(defvar doc-view-follow--sync-in-progress nil
"Flag to prevent recursive sync operations.")
+(defun doc-view-follow-beginning-of-buffer ()
+ "Navigate to the beginning of the document, Doc-View-Follow mode style.
+
+This selects the first window in the window chain and displays the first
+page of the document in that window. Other windows in the chain will
+display consecutive pages."
+ (interactive)
+ (let ((windows (follow-all-followers)))
+ (when (> (length windows) 0)
+ (select-window (car windows))
+ (doc-view-follow-set-page 1 major-mode)
+ (doc-view-follow-sync-pages))))
+
+(defun doc-view-follow-end-of-buffer ()
+ "Navigate to the end of the document, Doc-View-Follow mode style.
+
+This selects the last window in the window chain and displays the last
+page of the document in that window."
+ (interactive)
+ (let ((windows (follow-all-followers)))
+ (when (> (length windows) 0)
+ (select-window (car (last windows)))
+ (let ((last-page (doc-view-follow-get-page-count major-mode)))
+ (doc-view-follow-set-page last-page major-mode)
+ (doc-view-follow-sync-pages)))))
+
;;;###autoload
(define-minor-mode doc-view-follow-mode
"Minor mode to sync pages between document windows."
:global nil
+ :keymap doc-view-follow-mode-map
(unless (doc-view-follow-supported-p major-mode)
(error "`doc-view-follow-mode' not supported in %s" major-mode))
(if doc-view-follow-mode
@@ -126,9 +165,11 @@
(cl-defmethod doc-view-follow-teardown ((_mode (eql doc-view-mode)))
(advice-remove 'doc-view-goto-page #'doc-view-follow-sync-pages))
(cl-defmethod doc-view-follow-set-page (page (_mode (eql doc-view-mode)))
- (doc-view-goto-page (max 1 (min page (doc-view-last-page-number)))))
+ (doc-view-goto-page (max 1 (min page (doc-view-follow-get-page-count
'doc-view-mode)))))
(cl-defmethod doc-view-follow-get-page ((_mode (eql doc-view-mode)))
- (doc-view-current-page)))
+ (doc-view-current-page))
+ (cl-defmethod doc-view-follow-get-page-count ((_mode (eql doc-view-mode)))
+ (doc-view-last-page-number)))
(with-eval-after-load 'pdf-tools
(declare-function pdf-view-goto-page "pdf-view")
@@ -144,9 +185,11 @@
#'doc-view-follow-sync-pages t))
(cl-defmethod doc-view-follow-set-page (page (_mode (eql pdf-view-mode)))
(let ((pdf-view-inhibit-redisplay nil))
- (pdf-view-goto-page (max 1 (min page (pdf-cache-number-of-pages))))))
+ (pdf-view-goto-page (max 1 (min page (doc-view-follow-get-page-count
'pdf-view-mode))))))
(cl-defmethod doc-view-follow-get-page ((_mode (eql pdf-view-mode)))
- (pdf-view-current-page)))
+ (pdf-view-current-page))
+ (cl-defmethod doc-view-follow-get-page-count ((_mode (eql pdf-view-mode)))
+ (pdf-cache-number-of-pages)))
(provide 'doc-view-follow)
;;; doc-view-follow.el ends here
- [elpa] externals/doc-view-follow e2f24261be 31/43: Update doc-follow.el documentation and improve clarity, (continued)
- [elpa] externals/doc-view-follow e2f24261be 31/43: Update doc-follow.el documentation and improve clarity, ELPA Syncer, 2025/04/13
- [elpa] externals/doc-view-follow 1ee8b0e27c 33/43: Bump version to 0.2, ELPA Syncer, 2025/04/13
- [elpa] externals/doc-view-follow 310c29ef5d 36/43: Assign FSF copyright, ELPA Syncer, 2025/04/13
- [elpa] externals/doc-view-follow 85c60d708b 38/43: Re-add support for pdf-tools, now via generics, ELPA Syncer, 2025/04/13
- [elpa] externals/doc-view-follow 0cd19dc337 40/43: Refactor, ELPA Syncer, 2025/04/13
- [elpa] externals/doc-view-follow 159f866680 43/43: * README.org: Update., ELPA Syncer, 2025/04/13
- [elpa] externals/doc-view-follow 17d031e8d6 09/43: Improve sync function to handle multiple windows for document views, ELPA Syncer, 2025/04/13
- [elpa] externals/doc-view-follow e3ac3351a2 20/43: Refactor doc-dual-view to use property lists for mode, ELPA Syncer, 2025/04/13
- [elpa] externals/doc-view-follow f2ad9b8d75 32/43: Use consistent capitalization in descriptions and commentary, ELPA Syncer, 2025/04/13
- [elpa] externals/doc-view-follow 6231996d46 34/43: Use lighterweight list iteration, ELPA Syncer, 2025/04/13
- [elpa] externals/doc-view-follow 79a1cab807 41/43: Add end-of-buffer navigation and keymaps to doc-view-follow,
ELPA Syncer <=