changeset 16242:fa3885bdc49c

(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.
author Richard M. Stallman <rms@gnu.org>
date Thu, 19 Sep 1996 03:22:51 +0000
parents 3c84b8d28902
children b311d8755530
files lisp/mail/rmailsum.el
diffstat 1 files changed, 34 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/mail/rmailsum.el	Thu Sep 19 03:21:11 1996 +0000
+++ b/lisp/mail/rmailsum.el	Thu Sep 19 03:22:51 1996 +0000
@@ -497,12 +497,12 @@
     (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 @@
   (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 @@
 				     (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.