|
|
1.1 root 1: ;; "RMAIL" mail reader for Emacs.
2: ;; Copyright (C) 1985, 1986 Free Software Foundation, Inc.
3:
4: ;; This file is part of GNU Emacs.
5:
6: ;; GNU Emacs is free software; you can redistribute it and/or modify
7: ;; it under the terms of the GNU General Public License as published by
8: ;; the Free Software Foundation; either version 1, or (at your option)
9: ;; any later version.
10:
11: ;; GNU Emacs is distributed in the hope that it will be useful,
12: ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
13: ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14: ;; GNU General Public License for more details.
15:
16: ;; You should have received a copy of the GNU General Public License
17: ;; along with GNU Emacs; see the file COPYING. If not, write to
18: ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
19:
20: ;; note Interent RFP934
21:
22: (defun undigestify-rmail-message ()
23: "Break up a digest message into its constituent messages.
24: Leaves original message, deleted, before the undigestified messages."
25: (interactive)
26: (widen)
27: (let ((buffer-read-only nil)
28: (msg-string (buffer-substring (rmail-msgbeg rmail-current-message)
29: (rmail-msgend rmail-current-message))))
30: (goto-char (rmail-msgend rmail-current-message))
31: (narrow-to-region (point) (point))
32: (insert msg-string)
33: (narrow-to-region (point-min) (1- (point-max))))
34: (let ((error t)
35: (buffer-read-only nil))
36: (unwind-protect
37: (progn
38: (save-restriction
39: (goto-char (point-min))
40: (delete-region (point-min)
41: (progn (search-forward "\n*** EOOH ***\n")
42: (point)))
43: (insert "\^_\^L\n0, unseen,,\n*** EOOH ***\n")
44: (narrow-to-region (point)
45: (point-max))
46: (let* ((fill-prefix "")
47: (case-fold-search t)
48: (digest-name
49: (mail-strip-quoted-names
50: (or (save-restriction
51: (search-forward "\n\n")
52: (narrow-to-region (point-min) (point))
53: (goto-char (point-max))
54: (or (mail-fetch-field "Reply-To")
55: (mail-fetch-field "To")
56: (mail-fetch-field "Apparently-To")))
57: (error "Message is not a digest")))))
58: (save-excursion
59: (goto-char (point-max))
60: (skip-chars-backward " \t\n")
61: (let ((count 10) found)
62: ;; compensate for broken un*x digestifiers. Sigh Sigh.
63: (while (and (> count 0) (not found))
64: (forward-line -1)
65: (setq count (1- count))
66: (if (looking-at (concat "End of.*Digest.*\n"
67: (regexp-quote "*********") "*"
68: "\\(\n------*\\)*"))
69: (setq found t)))
70: (if (not found) (error "Message is not a digest"))))
71: (re-search-forward (concat "^" (make-string 55 ?-) "-*\n*"))
72: (replace-match "\^_\^L\n0, unseen,,\n*** EOOH ***\n")
73: (save-restriction
74: (narrow-to-region (point)
75: (progn (search-forward "\n\n")
76: (point)))
77: (if (mail-fetch-field "To") nil
78: (goto-char (point-min))
79: (insert "To: " digest-name "\n")))
80: (while (re-search-forward
81: (concat "\n\n" (make-string 27 ?-) "-*\n*")
82: nil t)
83: (replace-match "\n\n\^_\^L\n0, unseen,,\n*** EOOH ***\n")
84: (save-restriction
85: (if (looking-at "End ")
86: (insert "To: " digest-name "\n\n")
87: (narrow-to-region (point)
88: (progn (search-forward "\n\n"
89: nil 'move)
90: (point))))
91: (if (mail-fetch-field "To") nil
92: (goto-char (point-min))
93: (insert "To: " digest-name "\n"))))))
94: (setq error nil)
95: (message "Message successfully undigestified")
96: (let ((n rmail-current-message))
97: (rmail-forget-messages)
98: (rmail-show-message n)
99: (rmail-delete-forward)))
100: (cond (error
101: (narrow-to-region (point-min) (1+ (point-max)))
102: (delete-region (point-min) (point-max))
103: (rmail-show-message rmail-current-message))))))
104:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.