Mercurial > emacs
changeset 102088:7697cceb3a2b
(rmail-get-new-mail-1): Fix the spam beep test.
(rmail-get-new-mail-filter-spam): Simplify. Don't mess with
rmail-deleted-vector.
(rmail-insert-inbox-text, rmail-collect-deleted)
(rmail-set-message-deleted-p, rmail-only-expunge)
(rmail-make-in-reply-to-field): Replace ?\ with ?\s.
(rmail-get-labels): Remove unused local `blurb'.
(rmail-message-attr-p, rmail-message-unseen-p, rmail-message-labels-p)
(rmail-msgend, rmail-msgbeg, rmail-message-deleted-p)
(rmail-set-message-deleted-p): Doc fixes.
author | Glenn Morris <rgm@gnu.org> |
---|---|
date | Wed, 18 Feb 2009 04:34:04 +0000 |
parents | d6de2e3c19e8 |
children | edc57b1b19f0 |
files | lisp/mail/rmail.el |
diffstat | 1 files changed, 46 insertions(+), 52 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/mail/rmail.el Wed Feb 18 04:33:30 2009 +0000 +++ b/lisp/mail/rmail.el Wed Feb 18 04:34:04 2009 +0000 @@ -1383,6 +1383,7 @@ (let* ((revert-buffer-function (default-value 'revert-buffer-function)) (rmail-enable-multibyte enable-multibyte-characters) ;; See similar code in `rmail'. + ;; FIXME needs updating? (coding-system-for-read (and rmail-enable-multibyte 'raw-text)) (before-revert-hook 'rmail-swap-buffers-maybe)) ;; Call our caller again, but this time it does the default thing. @@ -1707,47 +1708,37 @@ (rmail-select-summary (rmail-update-summary))) (setq suffix (if (= 1 new-messages) "" "s")) (message "%d new message%s read%s" new-messages suffix blurb) - (when spam-filter-p + (unless (string-equal blurb "") ; there was spam (if rsf-beep (beep t)) + ;; FIXME This doesn't seem a very good feature, e.g. it delays the + ;; appearance of the summary, and leaves the raw buffer visible. (sleep-for rsf-sleep-after-message)) - ;; Establish the return value. (setq result (> new-messages 0)) result)))) -(defun rmail-get-new-mail-filter-spam (new-message-count) - "Process new messages for spam." - (let* ((old-messages (- rmail-total-messages new-message-count)) - (rsf-number-of-spam 0) - (rsf-scanned-message-number (1+ old-messages)) - ;; save deletion flags of old messages: vector starts at zero - ;; (is one longer than no of messages), therefore take 1+ - ;; old-messages - (save-deleted (substring rmail-deleted-vector 0 (1+ old-messages))) - blurb) - ;; set all messages to undeleted - (setq rmail-deleted-vector (make-string (1+ rmail-total-messages) ?\ )) - (while (<= rsf-scanned-message-number rmail-total-messages) - (progn - (if (not (rmail-spam-filter rsf-scanned-message-number)) - (progn (setq rsf-number-of-spam (1+ rsf-number-of-spam)))) - (setq rsf-scanned-message-number (1+ rsf-scanned-message-number)))) - (if (> rsf-number-of-spam 0) - (progn - (when (rmail-expunge-confirmed) - (rmail-only-expunge t)))) - (setq rmail-deleted-vector - (concat save-deleted - (make-string (- rmail-total-messages old-messages) ?\ ))) - ;; Generate a return value message based on the number of spam - ;; messages found. +(defun rmail-get-new-mail-filter-spam (nnew) + "Check the most NNEW recent messages for spam." + (let* ((nold (- rmail-total-messages nnew)) + (nspam 0) + (nscan (1+ nold))) + (while (<= nscan rmail-total-messages) + (or (rmail-spam-filter nscan) + (setq nspam (1+ nspam))) + (setq nscan (1+ nscan))) + ;; FIXME the expunge prompt leaves the raw mbox buffer showing, + ;; but it's not straightforward to show a message at this point + ;; without messing up the rest of get-new-mail. + (and (> nspam 0) + (rmail-expunge-confirmed) + (rmail-only-expunge t)) + ;; Return a message based on the number of spam messages found. (cond - ((zerop rsf-number-of-spam) "") - ((= 1 new-message-count) ", and appears to be spam") - ((= rsf-number-of-spam new-message-count) ", and all appear to be spam") - ((> rsf-number-of-spam 1) - (format ", and %d appear to be spam" rsf-number-of-spam)) - (t ", and 1 appears to be spam")))) + ((zerop nspam) "") + ((= 1 nnew) ", and it appears to be spam") + ((= nspam nnew) ", and all appear to be spam") + (t (format ", and %d appear%s to be spam" nspam + (if (= 1 nspam) "s" "")))))) (defun rmail-parse-url (file) "Parse the supplied URL. Return (list MAILBOX-NAME REMOTE PASSWORD GOT-PASSWORD) @@ -1882,7 +1873,7 @@ nil (set-buffer errors) (subst-char-in-region (point-min) (point-max) - ?\n ?\ ) + ?\n ?\s) (goto-char (point-max)) (skip-chars-backward " \t") (delete-region (point) (point-max)) @@ -2078,7 +2069,7 @@ MSG, if non-nil, identifies the message number to use. If nil, that means the current message." (or msg (setq msg rmail-current-message)) - (let (blurb attr-names keywords) + (let (attr-names keywords) ;; Combine the message attributes and keywords ;; into a comma-separated list. (setq attr-names (rmail-get-attr-names msg) @@ -2184,26 +2175,26 @@ (set-buffer-modified-p t))))) (defun rmail-message-attr-p (msg attrs) - "Return t if the attributes header for message MSG matches regexp ATTRS." + "Return non-nil if message number MSG has attributes matching regexp ATTRS." (let ((value (rmail-get-header rmail-attribute-header msg))) (and value (string-match attrs value)))) (defun rmail-message-unseen-p (msgnum) - "Test the unseen attribute for message MSGNUM. -Return non-nil if the unseen attribute is set, nil otherwise." + "Return non-nil if message number MSGNUM has the unseen attribute." (rmail-message-attr-p msgnum "......U")) -;; Return t if the attributes/keywords line of msg number MSG -;; contains a match for the regexp LABELS. (defun rmail-message-labels-p (msg labels) + "Return non-nil if message number MSG has labels matching regexp LABELS." (string-match labels (rmail-get-labels msg))) ;;;; *** Rmail Message Selection And Support *** (defun rmail-msgend (n) + "Return the start position for message number N." (marker-position (aref rmail-message-vector (1+ n)))) (defun rmail-msgbeg (n) + "Return the end position for message number N." (marker-position (aref rmail-message-vector n))) (defun rmail-apply-in-message (msgnum function &rest args) @@ -2364,7 +2355,7 @@ (cons (if (and (search-forward (concat rmail-attribute-header ": ") message-end t) (looking-at "?D")) ?D - ?\ ) deleted-head)))) + ?\s) deleted-head)))) (defun rmail-set-message-counters-counter (&optional stop) ;; Collect the start position for each message into 'messages-head. @@ -3080,10 +3071,13 @@ ;;;; *** Rmail Message Deletion Commands *** (defun rmail-message-deleted-p (n) + "Return non-nil if message number N is deleted (in `rmail-deleted-vector')." (= (aref rmail-deleted-vector n) ?D)) (defun rmail-set-message-deleted-p (n state) - (aset rmail-deleted-vector n (if state ?D ?\ ))) + "Set the deleted state of message number N (in `rmail-deleted-vector'). +STATE non-nil means mark as deleted." + (aset rmail-deleted-vector n (if state ?D ?\s))) (defun rmail-delete-message () "Delete this message and stay on it." @@ -3229,7 +3223,7 @@ (setq rmail-current-message new-message-number rmail-total-messages counter rmail-message-vector (apply 'vector messages-head) - rmail-deleted-vector (make-string (1+ counter) ?\ ) + rmail-deleted-vector (make-string (1+ counter) ?\s) rmail-summary-vector (vconcat (nreverse new-summary)) rmail-msgref-vector (apply 'vector (nreverse new-msgref)) win t))) @@ -3449,10 +3443,10 @@ (end (match-end 1))) ;; Trim whitespace which above regexp match allows (while (and (< start end) - (memq (aref from start) '(?\t ?\ ))) + (memq (aref from start) '(?\t ?\s))) (setq start (1+ start))) (while (and (< start end) - (memq (aref from (1- end)) '(?\t ?\ ))) + (memq (aref from (1- end)) '(?\t ?\s))) (setq end (1- end))) (let ((field (substring from start end))) (if date (setq field (concat "message from " field " on " date))) @@ -3984,15 +3978,15 @@ ;;;; Desktop support (defun rmail-restore-desktop-buffer (desktop-buffer-file-name - desktop-buffer-name - desktop-buffer-misc) + desktop-buffer-name + desktop-buffer-misc) "Restore an rmail buffer specified in a desktop file." (condition-case error (progn - (rmail-input desktop-buffer-file-name) - (if (eq major-mode 'rmail-mode) - (current-buffer) - rmail-buffer)) + (rmail-input desktop-buffer-file-name) + (if (eq major-mode 'rmail-mode) + (current-buffer) + rmail-buffer)) (file-locked (kill-buffer (current-buffer)) nil)))