changeset 10662:cd968ab6a0eb

(rmail-next-same-subject): New command. (rmail-previous-same-subject): Likewise. (rmail-mode-map): Add bindings for C-c C-n and C-c C-p.
author Richard M. Stallman <rms@gnu.org>
date Sun, 05 Feb 1995 02:46:08 +0000
parents 32beb7b6dbf7
children b0bf7d40a75d
files lisp/mail/rmail.el
diffstat 1 files changed, 50 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/mail/rmail.el	Sun Feb 05 00:25:16 1995 +0000
+++ b/lisp/mail/rmail.el	Sun Feb 05 02:46:08 1995 +0000
@@ -414,6 +414,8 @@
   (define-key rmail-mode-map "\C-c\C-s\C-c" 'rmail-sort-by-correspondent)
   (define-key rmail-mode-map "\C-c\C-s\C-l" 'rmail-sort-by-lines)
   (define-key rmail-mode-map "\C-c\C-s\C-k" 'rmail-sort-by-keywords)
+  (define-key rmail-mode-map "\C-c\C-n" 'rmail-next-same-subject)
+  (define-key rmail-mode-map "\C-c\C-p" 'rmail-previous-same-subject)
   )
 
 (define-key rmail-mode-map [menu-bar] (make-sparse-keymap))
@@ -1747,6 +1749,54 @@
 ;;    (if found
 ;;	(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"))
+	 (search-regexp (concat "^Subject: *\\(Re: *\\)?"
+				(regexp-quote subject)
+				"\n"))
+	 (forward (> n 0))
+	 (i rmail-current-message)
+	 found)
+    (if (string-match "Re:[ \t]*" subject)
+	(setq subject (substring subject (match-end 0))))
+    (save-excursion
+      (save-restriction
+	(widen)
+	(while (and (/= n 0)
+		    (if forward
+			(< i rmail-total-messages)
+		      (> i 1)))
+	  (let (done)
+	    (while (and (not done)
+			(if forward
+			    (< i rmail-total-messages)
+			  (> i 1)))
+	      (setq i (if forward (1+ i) (1- i)))
+	      (goto-char (rmail-msgbeg i))
+	      (search-forward "\n*** EOOH ***\n")
+	      (let ((beg (point)) end)
+		(search-forward "\n\n")
+		(setq end (point))
+		(goto-char beg)
+		(setq done (re-search-forward search-regexp end t))))
+	    (if done (setq found i)))
+	  (setq n (if forward (1- n) (1+ n))))))
+    (if found
+	(rmail-show-message found)
+      (error "No %s message with same subject"
+	     (if forward "following" "previous")))))
+
+(defun rmail-previous-same-subject (n)
+  "Go to the previous mail message having the same subject header.
+With prefix argument N, do this N times.
+If N is negative, go forwards instead."
+  (interactive "p")
+  (rmail-next-same-subject (- n)))
 
 ;;;; *** Rmail Message Deletion Commands ***