branch: externals/greader
commit e3f930f6ad3f5296252409d3015d6ecce0a5e91b
Author: Michelangelo Rodriguez <[email protected]>
Commit: Michelangelo Rodriguez <[email protected]>

    fix(auto-tired): Make greader-auto-tired-mode fully buffer-local
    
    * greader.el (greader-auto-tired-timer): Change from defvar to
    defvar-local; the timer is per-buffer.
    (greader--auto-tired-buffer): Mark obsolete (0.19); the target
    buffer is now passed directly to the timer callback via
    run-at-time, which allows multiple buffers to use
    greader-auto-tired-mode simultaneously.
    (greader-auto-tired-mode): Pass current buffer as argument to
    run-at-time instead of storing it in a variable.
    (greader-auto-tired-callback): Accept BUFFER argument; guard
    against greader-auto-tired-mode being nil so the callback
    self-cancels if the mode was deactivated.
    (greader.el): Bump version to 0.19.0.
    
    Co-Authored-By: Claude Opus 4.6 <[email protected]>
---
 greader.el | 60 +++++++++++++++++++++++++++++++++---------------------------
 1 file changed, 33 insertions(+), 27 deletions(-)

diff --git a/greader.el b/greader.el
index 3501102963..56d1866475 100644
--- a/greader.el
+++ b/greader.el
@@ -7,7 +7,7 @@
 ;; Keywords: tools, accessibility
 ;; URL: https://gitlab.com/michelangelo-rodriguez/greader
 
-;; Version: 0.18.0
+;; Version: 0.19.0
 
 ;; This program is free software; you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
@@ -53,11 +53,12 @@
 (defvar greader-auto-tired-mode)
 
 (require 'find-func)
-(defvar greader-auto-tired-timer nil)
-(defvar-local greader--auto-tired-buffer nil
-  "Buffer in which `greader-auto-tired-mode' was enabled.
-Used by `greader-auto-tired-callback' to operate in the correct buffer
-regardless of which buffer is current when the timer fires.")
+(defvar-local greader-auto-tired-timer nil)
+(defvar greader--auto-tired-buffer nil
+  "Obsolete.  Kept for compatibility only.")
+(make-obsolete-variable 'greader--auto-tired-buffer
+                        "the buffer is now passed directly to the timer 
callback."
+                        "0.19")
 (defvar-local greader-last-point nil)
 (defvar-local greader-tired-timer nil)
 (defvar-local greader--tired-pending nil
@@ -982,10 +983,10 @@ The original command is swallowed: only reading resumes."
   :lighter " ATrd"
   (if greader-auto-tired-mode
       (progn
-        (setq-local greader--auto-tired-buffer (current-buffer))
         (unless greader-tired-mode (greader-tired-mode 1))
         (setq-local greader-auto-tired-timer
-                    (run-at-time nil 1 #'greader-auto-tired-callback)))
+                    (run-at-time nil 1 #'greader-auto-tired-callback
+                                 (current-buffer))))
     (when greader-tired-mode (greader-tired-mode -1))
     (when (timerp greader-auto-tired-timer)
       (cancel-timer greader-auto-tired-timer))
@@ -1010,25 +1011,30 @@ Handles midnight-crossing intervals (e.g. 22:00 to 
07:00)."
       (or (not (time-less-p now time1))
           (time-less-p now time2)))))
 
-(defun greader-auto-tired-callback ()
-  "Not documented, internal use."
-  (when (buffer-live-p greader--auto-tired-buffer)
-    (let ((background (not (eq greader--auto-tired-buffer (current-buffer)))))
-      (with-current-buffer greader--auto-tired-buffer
-        (let ((start (greader-convert-time greader-auto-tired-mode-time))
-              (end   (greader-convert-time greader-auto-tired-time-end)))
-          (when (and (greader-current-time-in-interval-p start end)
-                     (not greader-tired-mode))
-            (greader-tired-mode 1)
-            (when background
-              (message "greader-tired-mode enabled in buffer %s"
-                       (buffer-name))))
-          (when (and (not (greader-current-time-in-interval-p start end))
-                     greader-tired-mode)
-            (greader-tired-mode -1)
-            (when background
-              (message "greader-tired-mode disabled in buffer %s"
-                       (buffer-name)))))))))
+(defun greader-auto-tired-callback (buffer)
+  "Not documented, internal use.
+BUFFER is the buffer in which `greader-auto-tired-mode' was enabled."
+  (when (buffer-live-p buffer)
+    (let ((background (not (eq buffer (current-buffer)))))
+      (with-current-buffer buffer
+        (if (not greader-auto-tired-mode)
+            (when (timerp greader-auto-tired-timer)
+              (cancel-timer greader-auto-tired-timer)
+              (setq-local greader-auto-tired-timer nil))
+          (let ((start (greader-convert-time greader-auto-tired-mode-time))
+                (end   (greader-convert-time greader-auto-tired-time-end)))
+            (when (and (greader-current-time-in-interval-p start end)
+                       (not greader-tired-mode))
+              (greader-tired-mode 1)
+              (when background
+                (message "greader-tired-mode enabled in buffer %s"
+                         (buffer-name))))
+            (when (and (not (greader-current-time-in-interval-p start end))
+                       greader-tired-mode)
+              (greader-tired-mode -1)
+              (when background
+                (message "greader-tired-mode disabled in buffer %s"
+                         (buffer-name))))))))))
 
 (defun greader-set-rate (n)
   "Set rate in current buffer to tthe specified value in N.

Reply via email to