- (goto-char (rmail-msgend rmail-current-message))
- (narrow-to-region (point) (point))
- (insert rmail-mail-separator)
- (narrow-to-region (point) (point))
- (while old-fwd-from
- (insert "Forwarded-From: " (car old-fwd-from) "\n")
- (insert "Forwarded-Date: " (car old-fwd-date) "\n")
- (setq old-fwd-from (cdr old-fwd-from))
- (setq old-fwd-date (cdr old-fwd-date)))
- (insert "Forwarded-From: " fwd-from "\n")
- (insert "Forwarded-Date: " fwd-date "\n")
- (insert forward-msg)
- (save-restriction
- (goto-char (point-min))
- (re-search-forward "\n$" nil 'move)
- (narrow-to-region (point-min) (point))
+ (goto-char beg)
+ (search-forward "\n\n" msgend)
+ (narrow-to-region beg (point))
+ (let ((old-fwd-from (mail-fetch-field "Forwarded-From" nil nil t))
+ (old-fwd-date (mail-fetch-field "Forwarded-Date" nil nil t))
+ (fwd-from (mail-fetch-field "From"))
+ (fwd-date (mail-fetch-field "Date"))
+ (buffer-read-only nil)
+ prefix forward-msg end)
+ (widen)
+ (narrow-to-region beg msgend)
+ (cond ((re-search-forward rmail-forward-separator-regex nil t)
+ (forward-line 1)
+ (skip-chars-forward "\n")
+ (setq beg (point))
+ (setq end (if (re-search-forward "^----.*[^- \t\n]" nil t)
+ (match-beginning 0) (point-max)))
+ (setq forward-msg
+ (replace-regexp-in-string
+ "^- -" "-" (buffer-substring beg end))))
+ ((and (re-search-forward "^\\(> ?\\)[a-zA-Z-]+: .*\n" nil t)
+ (setq beg (match-beginning 0))
+ (setq prefix (match-string-no-properties 1))
+ (goto-char beg)
+ (looking-at (concat "\\(" prefix ".+\n\\)*"
+ prefix "Date: ."))
+ (looking-at (concat "\\(" prefix ".+\n\\)*"
+ prefix "From: .+\n"
+ "\\(" prefix ".+\n\\)*"
+ "\\(> ?\\)?\n" prefix)))
+ (re-search-forward "^[^>\n]" nil 'move)
+ (backward-char)
+ (skip-chars-backward " \t\n")
+ (forward-line 1)
+ (setq end (point))
+ (setq forward-msg
+ (replace-regexp-in-string
+ (if (string= prefix ">") "^>" "> ?")
+ "" (buffer-substring beg end))))
+ (t
+ (error "No forwarded message found")))
+ (widen)
+ (goto-char msgend)
+ ;; Insert a fake From line.
+ ;; FIXME we could construct one using the From and Date headers
+ ;; of the forwarded message - is it worth it?
+ (insert "\n\nFrom rmail@localhost " (current-time-string) "\n")
+ (setq beg (point)) ; start of header
+ (while old-fwd-from
+ (insert "Forwarded-From: " (car old-fwd-from) "\n")
+ (insert "Forwarded-Date: " (car old-fwd-date) "\n")
+ (setq old-fwd-from (cdr old-fwd-from))
+ (setq old-fwd-date (cdr old-fwd-date)))
+ (insert "Forwarded-From: " fwd-from "\n")
+ (insert "Forwarded-Date: " fwd-date "\n")
+ (insert forward-msg "\n")
+ (goto-char beg)
+ (re-search-forward "\n$" nil 'move) ; end of header
+ (narrow-to-region beg (point))