changeset 105602:6e207d2a8bc6

(rmail-cease-edit): Give an error if the end of the headers cannot be located. Simplify, subtracting superflous save-excursions. (See http://lists.gnu.org/archive/html/bug-gnu-emacs/2009-10/msg00182.html)
author Glenn Morris <rgm@gnu.org>
date Thu, 15 Oct 2009 06:00:20 +0000
parents 68686d39c93a
children a51d05567a17
files lisp/ChangeLog lisp/mail/rmailedit.el
diffstat 2 files changed, 25 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Thu Oct 15 01:50:17 2009 +0000
+++ b/lisp/ChangeLog	Thu Oct 15 06:00:20 2009 +0000
@@ -1,3 +1,9 @@
+2009-10-15  Glenn Morris  <rgm@gnu.org>
+
+	* mail/rmailedit.el (rmail-cease-edit): Give an error if the end of
+	the headers cannot be located.  Simplify, subtracting superflous
+	save-excursions.
+
 2009-10-15  Stefan Monnier  <monnier@iro.umontreal.ca>
 
 	Replace completion-base-size by completion-base-position to fix bugs
--- a/lisp/mail/rmailedit.el	Thu Oct 15 01:50:17 2009 +0000
+++ b/lisp/mail/rmailedit.el	Thu Oct 15 06:00:20 2009 +0000
@@ -126,19 +126,23 @@
       (with-current-buffer rmail-summary-buffer
 	(rmail-summary-enable)))
   (widen)
+  (goto-char (point-min))
+  ;; This is far from ideal.  The edit may have inadvertently
+  ;; removed the blank line at the end of the headers, but there
+  ;; are almost certainly other blank lines.
+  (or (search-forward "\n\n" nil t)
+      (error "There must be a blank line at the end of the headers"))
   ;; Disguise any "From " lines so they don't start a new message.
-  (save-excursion
-    (goto-char (point-min))
-    (or rmail-old-pruned (forward-line 1))
-    (while (re-search-forward "^>*From " nil t)
-      (beginning-of-line)
-      (insert ">")
-      (forward-line)))
+  (goto-char (point-min))
+  (or rmail-old-pruned (forward-line 1))
+  (while (re-search-forward "^>*From " nil t)
+    (beginning-of-line)
+    (insert ">")
+    (forward-line))
   ;; Make sure buffer ends with a blank line so as not to run this
   ;; message together with the following one.
-  (save-excursion
-    (goto-char (point-max))
-    (rmail-ensure-blank-line))
+  (goto-char (point-max))
+  (rmail-ensure-blank-line)
   (let ((old rmail-old-text)
 	(pruned rmail-old-pruned)
 	;; People who know what they are doing might have modified the
@@ -168,7 +172,6 @@
 		 (string= old (buffer-substring (point-min) (point-max))))
       (setq old nil)
       (goto-char (point-min))
-      ;; FIXME the edit may have inadvertently removed this.
       (search-forward "\n\n")
       (setq headers-end (point-marker))
       (goto-char (point-min))
@@ -204,20 +207,16 @@
 	    (goto-char mime-end)
 	    (delete-region mime-beg mime-end)
 	    (insert mime-charset)))))
-      (goto-char headers-end)
       (setq new-headers (rmail-edit-headers-alist t))
       (rmail-swap-buffers-maybe)
       (narrow-to-region (rmail-msgbeg rmail-current-message)
 			(rmail-msgend rmail-current-message))
+      (goto-char (point-min))
+      (setq limit (search-forward "\n\n"))
       (save-restriction
-	(setq limit
-	      (save-excursion
-		(goto-char (point-min))
-		;; FIXME this should not be using NOERROR.
-		(search-forward "\n\n" nil t)))
 	;; All 3 of the functions we call below assume the buffer was
 	;; narrowed to just the headers of the message.
-	(narrow-to-region (rmail-msgbeg rmail-current-message) limit)
+	(narrow-to-region (point-min) limit)
 	(setq character-coding
 	      (mail-fetch-field "content-transfer-encoding")
 	      is-text-message (rmail-is-text-p)
@@ -256,9 +255,8 @@
     ;;??? BROKEN perhaps.
 ;;;    (if (boundp 'rmail-summary-vector)
 ;;;	(aset rmail-summary-vector (1- rmail-current-message) nil))
-    (save-excursion
-      (rmail-show-message)
-      (rmail-toggle-header (if pruned 1 0))))
+    (rmail-show-message)
+    (rmail-toggle-header (if pruned 1 0)))
   (run-hooks 'rmail-mode-hook))
 
 (defun rmail-abort-edit ()