]> git.eshelyaron.com Git - emacs.git/commitdiff
Avoid missing email messages due to rmail-spam-filter
authoremacs-f <emacs-f@media.mit.edu>
Tue, 8 Dec 2020 23:22:30 +0000 (18:22 -0500)
committerEli Zaretskii <eliz@gnu.org>
Sat, 26 Dec 2020 09:46:11 +0000 (11:46 +0200)
* lisp/mail/rmail-spam-filter.el (rsf--rmail-last-seen-message):
New function.
(rmail-spam-filter, rmail-get-new-mail-filter-spam): Call
'rsf--rmail-last-seen-message' instead of
'rmail-first-unseen-message'.  (Bug#45128)

Copyright-paperwork-exempt: yes

lisp/mail/rmail-spam-filter.el

index db5184825913cdfa50d9364b4b67ee22524079b0..4d8c9267f31a4fe2c3599a90ad0543e7093c4af1 100644 (file)
@@ -214,6 +214,16 @@ the cdr is set to t.  Else, the car is set to nil."
           ;; rule means this cannot be spam.
           (setcar result nil)))))
 
+;; Don't spuriously advance to the next unseen message while
+;; prompting, because that causes it to then be missed while actually
+;; reading mail afterwards!  Call this instead of
+;; rmail-first-unseen-message.
+(defun rsf--rmail-last-seen-message ()
+  (max 1
+       ;; 'rmail-first-unseen-message' can return nil in a completely
+       ;; empty buffer.
+       (1- (or (rmail-first-unseen-message) 1))))
+
 (defun rmail-spam-filter (msg)
   "Return nil if message number MSG is spam based on `rsf-definitions-alist'.
 If spam, optionally output message to a file `rsf-file' and delete
@@ -327,8 +337,7 @@ it from rmail file.  Called for each new message retrieved by
       (if (and (car maybe-spam) (cdr maybe-spam))
           ;; Temporarily set rmail-current-message in order to output
           ;; and delete the spam msg if needed:
-          (let ((rmail-current-message msg) ; FIXME does this do anything?
-                (action (cdr (assq 'action
+          (let ((action (cdr (assq 'action
                                    (nth num-element rsf-definitions-alist))))
                 (newfile (not (file-exists-p rsf-file))))
             ;; Check action item in rsf-definitions-alist and do it.
@@ -337,7 +346,7 @@ it from rmail file.  Called for each new message retrieved by
               ;; Else the prompt to write a new file leaves the raw
               ;; mbox buffer visible.
               (and newfile
-                   (rmail-show-message (rmail-first-unseen-message) t))
+                   (rmail-show-message (rsf--rmail-last-seen-message) t))
               (rmail-output rsf-file)
               ;; Swap back, else rmail-get-new-mail-1 gets confused.
               (when newfile
@@ -377,7 +386,7 @@ This is called at the end of `rmail-get-new-mail-1' if there is new mail."
              (sleep-for rsf-sleep-after-message))
          (when (> nspam 0)
            ;; Otherwise sleep or expunge prompt leaves raw mbox buffer showing.
-           (rmail-show-message (or (rmail-first-unseen-message) 1) t)
+           (rmail-show-message (or (rsf--rmail-last-seen-message) 1) t)
            (unwind-protect
                (progn
                  (if rsf-beep (ding t))