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.