From: Alex Schroeder Date: Sun, 8 Jan 2006 15:22:59 +0000 (+0000) Subject: (rmail-current-subject): New function. X-Git-Tag: emacs-pretest-22.0.90~4836 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=80068231395d24637ec3b0e83a3dedf78b875471;p=emacs.git (rmail-current-subject): New function. (rmail-current-subject-regexp): New function. (rmail-next-same-subject): Use it. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index b6dc65427a7..120e9990062 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -11,6 +11,14 @@ 2006-01-07 Alex Schroeder + * mail/rmail.el (rmail-current-subject): New function. + (rmail-current-subject-regexp): New function. + (rmail-next-same-subject): Use it. + + * mail/rmailsum.el (rmail-summary-by-topic): Use + rmail-current-subject and rmail-current-subject-regexp. + (rmail-summary-next-same-subject): Ditto. + * net/rcirc.el (rcirc-send-input): No longer check whether the process is open, since not all commands need an open process. (rcirc-send-string): Check whether the process is open before diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el index b45467386ba..45df1aa08be 100644 --- a/lisp/mail/rmail.el +++ b/lisp/mail/rmail.el @@ -3143,30 +3143,52 @@ Interactively, empty argument means use same regexp used last time." ;; (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)