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

    greader-dict: prevent cross-buffer dictionary interference
    
    The "greader-dict--update" function now checks if the current buffer
    is the one currently being read. If a hook is triggered from a
    different buffer, it only saves pending changes and skips the
    dictionary refresh to avoid interfering with the active reading session.
---
 greader-dict.el | 57 ++++++++++++++++++++++++++++++++-------------------------
 1 file changed, 32 insertions(+), 25 deletions(-)

diff --git a/greader-dict.el b/greader-dict.el
index da12820ab2..1a009c0d59 100644
--- a/greader-dict.el
+++ b/greader-dict.el
@@ -991,31 +991,38 @@ asked."
 
 (defvar greader-reading-mode)
 (defun greader-dict--update ()
-  (when greader-dict-filters-mode
-    (setq greader-dict--current-reading-buffer (or
-                                               greader--current-buffer
-                                               (current-buffer)))
-    (unless greader-reading-mode
-      (let ((dict-mode-state greader-dict-mode))
-       (greader-dict-mode 1)
-       (greader-dict-read-from-dict-file t)
-       (unless dict-mode-state
-         (greader-dict-mode -1)))))
-  (when greader-dict-mode
-    (setq greader-dict--current-reading-buffer (or
-                                               greader--current-buffer
-                                               (current-buffer)))
-    (unless greader-dict--saved-flag
-      (greader-dict-write-file))
-    ;; I decided to keep the following code for historical reasons and
-    ;; memento.
-    ;;   Indeed it is superfluous as it is, because "buffer-locality", so
-    ;; the following conditional is not necessary.
-    (unless greader-reading-mode
-      (clrhash
-       (buffer-local-value 'greader-dictionary
-                          greader-dict--current-reading-buffer))
-      (greader-dict-read-from-dict-file t))))
+  ;; When reading is active in another buffer, this buffer's
+  ;; dict/filters hooks must not touch the reading buffer's
+  ;; dictionary.  Only save unsaved changes, then bail out.
+  (if (and greader--current-buffer
+          (not (eq greader--current-buffer (current-buffer))))
+      (unless greader-dict--saved-flag
+       (greader-dict-write-file))
+    (when greader-dict-filters-mode
+      (setq greader-dict--current-reading-buffer (or
+                                                 greader--current-buffer
+                                                 (current-buffer)))
+      (unless greader-reading-mode
+       (let ((dict-mode-state greader-dict-mode))
+         (greader-dict-mode 1)
+         (greader-dict-read-from-dict-file t)
+         (unless dict-mode-state
+           (greader-dict-mode -1)))))
+    (when greader-dict-mode
+      (setq greader-dict--current-reading-buffer (or
+                                                 greader--current-buffer
+                                                 (current-buffer)))
+      (unless greader-dict--saved-flag
+       (greader-dict-write-file))
+      ;; I decided to keep the following code for historical reasons and
+      ;; memento.
+      ;;   Indeed it is superfluous as it is, because "buffer-locality", so
+      ;; the following conditional is not necessary.
+      (unless greader-reading-mode
+       (clrhash
+        (buffer-local-value 'greader-dictionary
+                            greader-dict--current-reading-buffer))
+       (greader-dict-read-from-dict-file t)))))
 
 ;; Questa funzione è solo di utilità e potrebbe essere rimossa o
 ;; modificata in qualsiasi momento.

Reply via email to