]> git.eshelyaron.com Git - emacs.git/commitdiff
(rmail-toggle-header): Preserve point
authorKarl Heuer <kwzh@gnu.org>
Tue, 2 Jun 1998 06:54:40 +0000 (06:54 +0000)
committerKarl Heuer <kwzh@gnu.org>
Tue, 2 Jun 1998 06:54:40 +0000 (06:54 +0000)
and window-start (more or less) when reverting to original header.

lisp/mail/rmail.el

index dde5e975989ce6e9602c4dd1a3e0b2177451bc1e..b94f4657c6f625c9d5c5a62e7acbc4d05e8f745f 100644 (file)
@@ -1780,36 +1780,42 @@ Otherwise, delete all header fields whose names match `rmail-ignored-headers'."
 With argument ARG, show the message header pruned if ARG is greater than zero;
 otherwise, show it in full."
   (interactive "P")
-  (let* ((buffer-read-only nil)
-        (pruned (rmail-msg-is-pruned))
-        (prune (if arg
-                   (> (prefix-numeric-value arg) 0)
-                 (not pruned))))
-    (if (eq pruned prune)
-       t
-      (rmail-maybe-set-message-counters)
-      (narrow-to-region (rmail-msgbeg rmail-current-message) (point-max))
-      (if pruned
-         (progn (goto-char (point-min))
-                (forward-line 1)
-                (delete-char 1)
-                (insert ?0)
-                (forward-line 1)
-                (let ((case-fold-search t))
-                  (while (looking-at "Summary-Line:\\|Mail-From:")
-                    (forward-line 1)))
-                (insert "*** EOOH ***\n")
-                (forward-char -1)
-                (search-forward "\n*** EOOH ***\n")
-                (forward-line -1)
-                (let ((temp (point)))
-                  (and (search-forward "\n\n" nil t)
-                       (delete-region temp (point))))
-                (goto-char (point-min))
-                (search-forward "\n*** EOOH ***\n")
-                (narrow-to-region (point) (point-max)))
-       (rmail-reformat-message (point-min) (point-max)))
-      (rmail-highlight-headers))))
+  (save-excursion
+    (let* ((buffer-read-only nil)
+          (pruned (rmail-msg-is-pruned))
+          (prune (if arg
+                     (> (prefix-numeric-value arg) 0)
+                   (not pruned))))
+      (if (eq pruned prune)
+         t
+       (rmail-maybe-set-message-counters)
+       (narrow-to-region (rmail-msgbeg rmail-current-message) (point-max))
+       (if pruned
+           (let (window-at-top)
+             (goto-char (point-min))
+             (forward-line 1)
+             (delete-char 1)
+             (insert ?0)
+             (forward-line 1)
+             (let ((case-fold-search t))
+               (while (looking-at "Summary-Line:\\|Mail-From:")
+                 (forward-line 1)))
+             (insert "*** EOOH ***\n")
+             (forward-char -1)
+             (search-forward "\n*** EOOH ***\n")
+             (forward-line -1)
+             (let ((temp (point)))
+               (when (search-forward "\n\n" nil t)
+                 (if (< (window-start) (point))
+                     (setq window-at-top t))
+                 (delete-region temp (point))))
+             (goto-char (point-min))
+             (search-forward "\n*** EOOH ***\n")
+             (if window-at-top
+                 (set-window-start (selected-window) (point) t))
+             (narrow-to-region (point) (point-max)))
+         (rmail-reformat-message (point-min) (point-max)))
+       (rmail-highlight-headers)))))
 \f
 ;;;; *** Rmail Attributes and Keywords ***