aboutsummaryrefslogtreecommitdiffstats
path: root/lisp
diff options
context:
space:
mode:
authorRichard M. Stallman <[email protected]>1996-09-19 03:22:51 +0000
committerRichard M. Stallman <[email protected]>1996-09-19 03:22:51 +0000
commit5be36e2004f8557fe0690ebd7746fbbcc3115c07 (patch)
tree102a83a542e8099386df77ad1665528c1a8c61fc /lisp
parent563ab60dbde5429aa7bc2c96f7bfcbea6c581b39 (diff)
(rmail-summary-next-same-subject): Don't set
search-regexp until after adjusting subject string. (rmail-summary-rmail-update): Bind rmail-not-really-seen non-nil if in isearch mode.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/mail/rmailsum.el37
1 files changed, 34 insertions, 3 deletions
diff --git a/lisp/mail/rmailsum.el b/lisp/mail/rmailsum.el
index b8637ce20a..4342a94dc2 100644
--- a/lisp/mail/rmailsum.el
+++ b/lisp/mail/rmailsum.el
@@ -497,12 +497,12 @@ If N is negative, go backwards."
(save-excursion
(set-buffer rmail-buffer)
(setq subject (mail-fetch-field "Subject"))
- (setq search-regexp (concat "^Subject: *\\(Re: *\\)?"
- (regexp-quote subject)
- "\n"))
(setq i rmail-current-message))
(if (string-match "Re:[ \t]*" subject)
(setq subject (substring subject (match-end 0))))
+ (setq search-regexp (concat "^Subject: *\\(Re: *\\)?"
+ (regexp-quote subject)
+ "\n"))
(save-excursion
(while (and (/= n 0)
(if forward
@@ -698,6 +698,13 @@ Commands for sorting the summary:
(add-hook 'post-command-hook 'rmail-summary-rmail-update nil t)
(setq revert-buffer-function 'rmail-update-summary))
+(defvar rmail-summary-put-back-unseen nil
+ "Used for communicating between calls to `rmail-summary-rmail-update'.
+If it moves to a message within an Incremental Search, and removes
+the `unseen' attribute from that message, it sets this flag
+so that if the next motion between messages is in the same Incremental
+Search, the `unseen' attribute is restored.")
+
;; Show in Rmail the message described by the summary line that point is on,
;; but only if the Rmail buffer is already visible.
;; This is a post-command-hook in summary buffers.
@@ -713,14 +720,38 @@ Commands for sorting the summary:
(point)
(progn (skip-chars-forward "0-9")
(point))))))
+ ;; Always leave `unseen' removed
+ ;; if we get out of isearch mode.
+ ;; Don't let a subsequent isearch restore that `unseen'.
+ (if (not isearch-mode)
+ (setq rmail-summary-put-back-unseen nil))
+
(or (eq rmail-current-message msg-num)
(let ((window (get-buffer-window rmail-buffer))
(owin (selected-window)))
+ (if isearch-mode
+ (save-excursion
+ (set-buffer rmail-buffer)
+ ;; If we first saw the previous message in this search,
+ ;; and we have gone to a different message while searching,
+ ;; put back `unseen' on the former one.
+ (rmail-set-attribute "unseen" t
+ rmail-current-message)
+ ;; Arrange to do that later, for the new current message,
+ ;; if it still has `unseen'.
+ (setq rmail-summary-put-back-unseen
+ (rmail-message-labels-p msg-num ", ?\\(unseen\\),")))
+ (setq rmail-summary-put-back-unseen nil))
+
+ ;; Go to the desired message.
(setq rmail-current-message msg-num)
+
+ ;; Update the summary to show the message has been seen.
(if (= (following-char) ?-)
(progn
(delete-char 1)
(insert " ")))
+
(if window
;; Using save-window-excursion would cause the new value
;; of point to get lost.