emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/lisp/mail/rmail.el


From: Alex Schroeder
Subject: [Emacs-diffs] Changes to emacs/lisp/mail/rmail.el
Date: Sun, 08 Jan 2006 15:18:55 +0000

Index: emacs/lisp/mail/rmail.el
diff -u emacs/lisp/mail/rmail.el:1.416 emacs/lisp/mail/rmail.el:1.417
--- emacs/lisp/mail/rmail.el:1.416      Sat Dec 10 11:29:53 2005
+++ emacs/lisp/mail/rmail.el    Sun Jan  8 15:18:55 2006
@@ -3143,30 +3143,52 @@
 ;;     (rmail-show-message found))
     found))
 
-(defun rmail-next-same-subject (n)
-  "Go to the next mail message having the same subject header.
-With prefix argument N, do this N times.
-If N is negative, go backwards instead."
-  (interactive "p")
-  (let ((subject (mail-fetch-field "Subject"))
-       (forward (> n 0))
-       (i rmail-current-message)
-       (case-fold-search t)
-       search-regexp found)
+(defun rmail-current-subject ()
+  "Return the current subject.
+The subject is stripped of leading and trailing whitespace, and
+of typical reply prefixes such as Re:."
+  (let ((subject (or (mail-fetch-field "Subject") "")))
     (if (string-match "\\`[ \t]+" subject)
        (setq subject (substring subject (match-end 0))))
-    (if (string-match "\\`\\(Re:[ \t]*\\)+" subject)
+    (if (string-match rmail-reply-regexp subject)
        (setq subject (substring subject (match-end 0))))
     (if (string-match "[ \t]+\\'" subject)
        (setq subject (substring subject 0 (match-beginning 0))))
+    subject))
+
+(defun rmail-current-subject-regexp ()
+  "Return a regular expression matching the current subject.
+The regular expression matches the subject header line of
+messages about the same subject.  The subject itself is stripped
+of leading and trailing whitespace, of typical reply prefixes
+such as Re: and whitespace within the subject is replaced by a
+regular expression matching whitespace in general in order to
+take into account that subject header lines may include newlines
+and more whitespace.  The returned regular expressions contains
+`rmail-reply-regexp' and ends with a newline."
+  (let ((subject (rmail-current-subject)))
     ;; If Subject is long, mailers will break it into several lines at
     ;; arbitrary places, so replace whitespace with a regexp that will
     ;; match any sequence of spaces, TABs, and newlines.
     (setq subject (regexp-quote subject))
     (setq subject
          (replace-regexp-in-string "[ \t\n]+" "[ \t\n]+" subject t t))
-    (setq search-regexp (concat "^Subject: *\\(Re:[ \t]*\\)*"
-                               subject "[ \t]*\n"))
+    (concat "^Subject: "
+           (if (string= "\\`" (substring rmail-reply-regexp 0 2))
+               (substring rmail-reply-regexp 2)
+             rmail-reply-regexp)
+           subject "[ \t]*\n")))
+
+(defun rmail-next-same-subject (n)
+  "Go to the next mail message having the same subject header.
+With prefix argument N, do this N times.
+If N is negative, go backwards instead."
+  (interactive "p")
+  (let ((search-regexp (rmail-current-subject-regexp))
+       (forward (> n 0))
+       (i rmail-current-message)
+       (case-fold-search t)
+       found)
     (save-excursion
       (save-restriction
        (widen)




reply via email to

[Prev in Thread] Current Thread [Next in Thread]