Annotation of GNUtools/emacs/lisp/rmailout.el, revision 1.1.1.1

1.1       root        1: ;; "RMAIL" mail reader for Emacs: output message to a file.
                      2: ;; Copyright (C) 1985, 1987 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: 
                     21: ;; Temporary until Emacs always has this variable.
                     22: (defvar rmail-delete-after-output nil
                     23:   "*Non-nil means automatically delete a message that is copied to a file.")
                     24: 
                     25: (defun rmail-output-to-rmail-file (file-name)
                     26:   "Append the current message to an Rmail file named FILE-NAME.
                     27: If the file does not exist, ask if it should be created.
                     28: If file is being visited, the message is appended to the Emacs
                     29: buffer visiting that file."
                     30:   (interactive (list (read-file-name
                     31:                      (concat "Output message to Rmail file: (default "
                     32:                              (file-name-nondirectory rmail-last-rmail-file)
                     33:                              ") ")
                     34:                      (file-name-directory rmail-last-rmail-file)
                     35:                      rmail-last-rmail-file)))
                     36:   (setq file-name (expand-file-name file-name))
                     37:   (setq rmail-last-rmail-file file-name)
                     38:   (rmail-maybe-set-message-counters)
                     39:   (or (get-file-buffer file-name)
                     40:       (file-exists-p file-name)
                     41:       (if (yes-or-no-p
                     42:           (concat "\"" file-name "\" does not exist, create it? "))
                     43:          (let ((file-buffer (create-file-buffer file-name)))
                     44:            (save-excursion
                     45:              (set-buffer file-buffer)
                     46:              (rmail-insert-rmail-file-header)
                     47:              (let ((require-final-newline nil))
                     48:                (write-region (point-min) (point-max) file-name t 1)))
                     49:            (kill-buffer file-buffer))
                     50:        (error "Output file does not exist")))
                     51:   (save-restriction
                     52:     (widen)
                     53:     ;; Decide whether to append to a file or to an Emacs buffer.
                     54:     (save-excursion
                     55:       (let ((buf (get-file-buffer file-name))
                     56:            (cur (current-buffer))
                     57:            (beg (1+ (rmail-msgbeg rmail-current-message)))
                     58:            (end (1+ (rmail-msgend rmail-current-message))))
                     59:        (if (not buf)
                     60:            (append-to-file beg end file-name)
                     61:          (if (eq buf (current-buffer))
                     62:              (error "Can't output message to same file it's already in"))
                     63:          ;; File has been visited, in buffer BUF.
                     64:          (set-buffer buf)
                     65:          (let ((buffer-read-only nil)
                     66:                (msg (and (boundp 'rmail-current-message)
                     67:                          rmail-current-message)))
                     68:            ;; If MSG is non-nil, buffer is in RMAIL mode.
                     69:            (if msg
                     70:                (rmail-maybe-set-message-counters))
                     71:            (widen)
                     72:            (narrow-to-region (point-max) (point-max))
                     73:            (insert-buffer-substring cur beg end)
                     74:            (if msg
                     75:                (progn
                     76:                  (goto-char (point-min))
                     77:                  (widen)
                     78:                  (search-backward "\^_")
                     79:                  (narrow-to-region (point) (point-max))
                     80:                  (goto-char (1+ (point-min)))
                     81:                  (rmail-count-new-messages t)
                     82:                  (rmail-show-message msg))))))))
                     83:   (rmail-set-attribute "filed" t)
                     84:   (and rmail-delete-after-output (rmail-delete-forward)))
                     85: 
                     86: (defun rmail-output (file-name)
                     87:   "Append this message to Unix mail file named FILE-NAME."
                     88:   (interactive
                     89:    (list
                     90:     (read-file-name
                     91:      (concat "Output message to Unix mail file"
                     92:             (if rmail-last-file
                     93:                 (concat " (default "
                     94:                         (file-name-nondirectory rmail-last-file)
                     95:                         "): " )
                     96:               ": "))                   
                     97:      (and rmail-last-file (file-name-directory rmail-last-file))
                     98:      rmail-last-file)))
                     99:   (setq file-name (expand-file-name file-name))
                    100:   (setq rmail-last-file file-name)
                    101:   (let ((rmailbuf (current-buffer))
                    102:        (tembuf (get-buffer-create " rmail-output"))
                    103:        (case-fold-search t))
                    104:     (save-excursion
                    105:       (set-buffer tembuf)
                    106:       (erase-buffer)
                    107:       (insert-buffer-substring rmailbuf)
                    108:       (insert "\n")
                    109:       (goto-char (point-min))
                    110:       (insert "From "
                    111:              (if (mail-fetch-field "from")
                    112:                  (mail-strip-quoted-names (mail-fetch-field "from"))
                    113:                "unknown")
                    114:              " " (current-time-string) "\n")
                    115:       ;; ``Quote'' "\nFrom " as "\n>From "
                    116:       ;;  (note that this isn't really quoting, as there is no requirement
                    117:       ;;   that "\n[>]+From " be quoted in the same transparent way.)
                    118:       (while (search-forward "\nFrom " nil t)
                    119:        (forward-char -5)
                    120:        (insert ?>))
                    121:       (append-to-file (point-min) (point-max) file-name))
                    122:     (kill-buffer tembuf))
                    123:   (if (equal major-mode 'rmail-mode)
                    124:       (progn
                    125:        (rmail-set-attribute "filed" t)
                    126:        (and rmail-delete-after-output (rmail-delete-forward)))))

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.