From 72f69d0fb317125ef5c0dbe7db29410547cc8285 Mon Sep 17 00:00:00 2001 From: Karl Heuer Date: Tue, 2 Jun 1998 06:54:40 +0000 Subject: [PATCH] (rmail-toggle-header): Preserve point and window-start (more or less) when reverting to original header. --- lisp/mail/rmail.el | 66 +++++++++++++++++++++++++--------------------- 1 file changed, 36 insertions(+), 30 deletions(-) diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el index dde5e975989..b94f4657c6f 100644 --- a/lisp/mail/rmail.el +++ b/lisp/mail/rmail.el @@ -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))))) ;;;; *** Rmail Attributes and Keywords *** -- 2.39.2