branch: externals/doc-view-follow
commit fb243e046e12dc6554f7eb471c4573f79a4b6dbb
Author: Paul Nelson <[email protected]>
Commit: Paul Nelson <[email protected]>
Rename: doc-dual-view -> doc-follow
---
doc-dual-view.el => doc-follow.el | 80 +++++++++++++++++++--------------------
1 file changed, 40 insertions(+), 40 deletions(-)
diff --git a/doc-dual-view.el b/doc-follow.el
similarity index 65%
rename from doc-dual-view.el
rename to doc-follow.el
index 31183118f9..e7332dcb49 100644
--- a/doc-dual-view.el
+++ b/doc-follow.el
@@ -1,10 +1,10 @@
-;;; doc-dual-view.el --- Sync two windows showing the same document -*-
lexical-binding: t; -*-
+;;; doc-follow.el --- Sync two windows showing the same document -*-
lexical-binding: t; -*-
;; Copyright (C) 2024 Paul D. Nelson
;; Author: Paul D. Nelson <[email protected]>
;; Version: 0.1
-;; URL: https://github.com/ultronozm/doc-dual-view.el
+;; URL: https://github.com/ultronozm/doc-follow.el
;; Package-Requires: ((emacs "27.1"))
;; Keywords: convenience
@@ -23,25 +23,25 @@
;;; Commentary:
-;; This package provides a minor mode, `doc-dual-view-mode', that
+;; This package provides a minor mode, `doc-follow-mode', that
;; synchronizes page navigation between two windows displaying the
;; same document, making it so that when you navigate to a page in one
;; window, the other window will navigate to a neighboring page, so
;; that the second window is always one page ahead of the first.
;; Supports `doc-view-mode' and `pdf-view-mode'. You can customize
-;; the `doc-dual-view-modes' variable to add support for additional
+;; the `doc-follow-modes' variable to add support for additional
;; document viewing modes or modify the behavior for existing modes.
;;; Code:
(require 'timer)
-(defgroup doc-dual-view nil
+(defgroup doc-follow nil
"Synchronize pages between two windows displaying the same document."
:group 'convenience)
-(defvar doc-dual-view-modes
+(defvar doc-follow-modes
'((doc-view-mode
:goto doc-view-goto-page
:next doc-view-next-page
@@ -66,11 +66,11 @@ Each entry has the format:
Other packages can add support for additional document viewing modes
by adding entries to this list.")
-(defun doc-dual-view--call-func (mode-config action &rest args)
+(defun doc-follow--call-func (mode-config action &rest args)
"Call function for ACTION from MODE-CONFIG with ARGS."
(apply (plist-get mode-config action) args))
-(defun doc-dual-view--order-windows (windows)
+(defun doc-follow--order-windows (windows)
"Order WINDOWS based on their position: leftmost, then topmost."
(sort windows (lambda (window-a window-b)
(let* ((edges-a (window-edges window-a))
@@ -82,21 +82,21 @@ by adding entries to this list.")
(or (< left-a left-b)
(and (= left-a left-b) (< top-a top-b)))))))
-(defvar doc-dual-view--sync-in-progress nil
+(defvar doc-follow--sync-in-progress nil
"Flag to prevent recursive sync operations.")
-(defun doc-dual-view--sync-pages (&rest _args)
+(defun doc-follow--sync-pages (&rest _args)
"Sync pages between windows showing the same document."
- (when (and doc-dual-view-mode
- (not doc-dual-view--sync-in-progress))
- (let ((doc-dual-view--sync-in-progress t))
+ (when (and doc-follow-mode
+ (not doc-follow--sync-in-progress))
+ (let ((doc-follow--sync-in-progress t))
(when-let*
- ((cfg (cdr (assoc major-mode doc-dual-view-modes)))
- (windows (doc-dual-view--order-windows
+ ((cfg (cdr (assoc major-mode doc-follow-modes)))
+ (windows (doc-follow--order-windows
(get-buffer-window-list nil nil nil)))
((> (length windows) 1)))
- (let* ((current-page (doc-dual-view--call-func cfg :current))
- (max-page (doc-dual-view--call-func cfg :max))
+ (let* ((current-page (doc-follow--call-func cfg :current))
+ (max-page (doc-follow--call-func cfg :max))
(current-window (selected-window))
(window-index (seq-position windows current-window)))
(seq-do-indexed
@@ -105,43 +105,43 @@ by adding entries to this list.")
(min max-page
(max 1 (+ current-page (- i window-index))))))
(with-selected-window win
- (doc-dual-view--call-func cfg :goto target-page))))
+ (doc-follow--call-func cfg :goto target-page))))
windows))))))
-(defun doc-dual-view--manage-advice (add-or-remove)
- "Add or remove advice for all functions in `doc-dual-view-modes`.
+(defun doc-follow--manage-advice (add-or-remove)
+ "Add or remove advice for all functions in `doc-follow-modes`.
ADD-OR-REMOVE should be either 'add or 'remove."
- (dolist (mode-entry doc-dual-view-modes)
+ (dolist (mode-entry doc-follow-modes)
(dolist (action '(:goto :next :prev))
(when-let ((func (plist-get (cdr mode-entry) action)))
(if (eq add-or-remove 'add)
- (advice-add func :after #'doc-dual-view--sync-pages)
- (advice-remove func #'doc-dual-view--sync-pages))))))
+ (advice-add func :after #'doc-follow--sync-pages)
+ (advice-remove func #'doc-follow--sync-pages))))))
-(defun doc-dual-view--some-buffer-active-p ()
- "Return non-nil if some buffer has `doc-dual-view-mode' active."
+(defun doc-follow--some-buffer-active-p ()
+ "Return non-nil if some buffer has `doc-follow-mode' active."
(seq-some (lambda (buf)
- (buffer-local-value 'doc-dual-view-mode buf))
+ (buffer-local-value 'doc-follow-mode buf))
(buffer-list)))
;;;###autoload
-(define-minor-mode doc-dual-view-mode
+(define-minor-mode doc-follow-mode
"Minor mode to sync pages between two windows showing the same document."
:global nil
- (if doc-dual-view-mode
- (doc-dual-view--manage-advice 'add)
- (unless (doc-dual-view--some-buffer-active-p)
- (doc-dual-view--manage-advice 'remove))))
+ (if doc-follow-mode
+ (doc-follow--manage-advice 'add)
+ (unless (doc-follow--some-buffer-active-p)
+ (doc-follow--manage-advice 'remove))))
-(defun doc-dual-view--maybe-enable ()
- "Enable `doc-dual-view-mode' if appropriate for this buffer."
- (when (assq major-mode doc-dual-view-modes)
- (doc-dual-view-mode 1)))
+(defun doc-follow--maybe-enable ()
+ "Enable `doc-follow-mode' if appropriate for this buffer."
+ (when (assq major-mode doc-follow-modes)
+ (doc-follow-mode 1)))
;;;###autoload
-(define-globalized-minor-mode global-doc-dual-view-mode
- doc-dual-view-mode
- doc-dual-view--maybe-enable)
+(define-globalized-minor-mode global-doc-follow-mode
+ doc-follow-mode
+ doc-follow--maybe-enable)
-(provide 'doc-dual-view)
-;;; doc-dual-view.el ends here
+(provide 'doc-follow)
+;;; doc-follow.el ends here