diff options
author | Basil L. Contovounesios <contovob@tcd.ie> | 2020-12-05 15:28:35 +0000 |
---|---|---|
committer | Basil L. Contovounesios <contovob@tcd.ie> | 2020-12-06 11:45:52 +0000 |
commit | e84a1ffde9047c1ca0acb9abcd6d31e3bfba457d (patch) | |
tree | 25d5b83111ce74d46e87875d3a3659488e47afe7 | |
parent | 61497defb42e84a7ca32774a0ac16b30789f91d8 (diff) | |
download | emacs-e84a1ffde9047c1ca0acb9abcd6d31e3bfba457d.tar.gz |
Avoid modifying nnimap user option in spam.el
* lisp/gnus/nnimap.el (nnimap--split-download-body): New variable.
(nnimap-fetch-inbox): Use it in conjunction with
nnimap-split-download-body.
* lisp/gnus/spam.el: Don't load nnimap.el at compile time for a
dynamic variable.
(spam-setup-widening): Rather than unconditionally set user option
nnimap-split-download-body, set nnimap--split-download-body to a
unique non-nil value only if the variable was nil (bug#44981).
(spam-teardown-widening): New function that undoes this if
nnimap--split-download-body still holds the unique value.
(spam-unload-hook): Call spam-teardown-widening to revert any change
to the value of nnimap--split-download-body.
-rw-r--r-- | lisp/gnus/nnimap.el | 6 | ||||
-rw-r--r-- | lisp/gnus/spam.el | 26 |
2 files changed, 22 insertions, 10 deletions
diff --git a/lisp/gnus/nnimap.el b/lisp/gnus/nnimap.el index a8603330662..c8b700ebcc6 100644 --- a/lisp/gnus/nnimap.el +++ b/lisp/gnus/nnimap.el @@ -157,6 +157,9 @@ during splitting, which may be slow." :version "28.1" :type 'boolean) +(defvar nnimap--split-download-body nil + "Like `nnimap-split-download-body', but for internal use.") + (defvar nnimap-process nil) (defvar nnimap-status-string "") @@ -2108,7 +2111,8 @@ Return the server's response to the SELECT or EXAMINE command." "BODY.PEEK" "RFC822.PEEK")) (cond - (nnimap-split-download-body + ((or nnimap-split-download-body + nnimap--split-download-body) "[]") ((nnimap-ver4-p) "[HEADER]") diff --git a/lisp/gnus/spam.el b/lisp/gnus/spam.el index 27e559d383a..e74aef3efe6 100644 --- a/lisp/gnus/spam.el +++ b/lisp/gnus/spam.el @@ -44,12 +44,9 @@ ;;; for the definitions of group content classification and spam processors (require 'gnus) -(eval-when-compile (require 'hashcash)) - -;; for nnimap-split-download-body -(eval-when-compile (require 'nnimap)) - -(eval-when-compile (require 'cl-lib)) +(eval-when-compile + (require 'cl-lib) + (require 'hashcash)) ;; autoload query-dig (autoload 'query-dig "dig") @@ -1228,10 +1225,20 @@ Will not return a nil score." ;;{{{ set up widening, processor checks -;;; set up IMAP widening if it's necessary +(defconst spam--widened (list ()) + "Unique value identifying changes to `nnimap--split-download-body'.") + (defun spam-setup-widening () - (when (spam-widening-needed-p) - (setq nnimap-split-download-body t))) + "Set up IMAP widening if it's necessary." + (and (boundp 'nnimap--split-download-body) + (not nnimap--split-download-body) + (spam-widening-needed-p) + (setq nnimap--split-download-body spam--widened))) + +(defun spam-teardown-widening () + "Tear down IMAP widening." + (when (eq (bound-and-true-p nnimap--split-download-body) spam--widened) + (setq nnimap--split-download-body nil))) (defun spam-widening-needed-p (&optional force-symbols) (let (found) @@ -2865,6 +2872,7 @@ installed through `spam-necessary-extra-headers'." (defun spam-unload-hook () "Uninstall the spam.el hooks." (interactive) + (spam-teardown-widening) (remove-hook 'gnus-save-newsrc-hook 'spam-maybe-spam-stat-save) (remove-hook 'gnus-get-top-new-news-hook 'spam-maybe-spam-stat-load) (remove-hook 'gnus-startup-hook 'spam-maybe-spam-stat-load) |