[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/lisp/mail/rmail.el [rmail-mbox-branch]
From: |
Richard M . Stallman |
Subject: |
[Emacs-diffs] Changes to emacs/lisp/mail/rmail.el [rmail-mbox-branch] |
Date: |
Mon, 20 Sep 2004 12:41:35 -0400 |
Index: emacs/lisp/mail/rmail.el
diff -c emacs/lisp/mail/rmail.el:1.368.2.5 emacs/lisp/mail/rmail.el:1.368.2.6
*** emacs/lisp/mail/rmail.el:1.368.2.5 Sun Feb 23 00:33:25 2003
--- emacs/lisp/mail/rmail.el Mon Sep 20 16:33:36 2004
***************
*** 691,698 ****
(setq run-mail-hook t)))
(setq run-mail-hook t)
(rmail-mode-2)
! ;; Convert all or part to Babyl file if possible.
! ;;; (rmail-convert-file)
(goto-char (point-max)))
;; As we have read a file by raw-text, the buffer is set to
;; unibyte. We must make it multibyte if necessary.
--- 691,700 ----
(setq run-mail-hook t)))
(setq run-mail-hook t)
(rmail-mode-2)
! (goto-char (point-min))
! ;; If file starts like a Babyl file, reject it.
! (if (looking-at "BABYL OPTIONS:")
! (error "This is a BABYL file; use M-x unrmail to convert it")))
(goto-char (point-max)))
;; As we have read a file by raw-text, the buffer is set to
;; unibyte. We must make it multibyte if necessary.
***************
*** 735,807 ****
; list))))
; list))
- ; I have checked that adding "-*- rmail -*-" to the BABYL OPTIONS line
- ; will not cause emacs 18.55 problems.
-
- ;; This calls rmail-decode-babyl-format if the file is already Babyl.
-
- ;;; mbox: DEPECATED
- (defun rmail-convert-file ()
- (let (convert)
- (widen)
- (goto-char (point-min))
- ;; If file doesn't start like a Babyl file,
- ;; convert it to one, by adding a header and converting each message.
- (cond ((looking-at "BABYL OPTIONS:"))
- ((looking-at "Version: 5\n")
- ;; Losing babyl file made by old version of Rmail.
- ;; Just fix the babyl file header; don't make a new one,
- ;; so we don't lose the Labels: file attribute, etc.
- (let ((buffer-read-only nil))
- (insert "BABYL OPTIONS: -*- rmail -*-\n")))
- ((equal (point-min) (point-max))
- ;; Empty RMAIL file. Just insert the header.
- (rmail-insert-rmail-file-header))
- (t
- ;; Non-empty file in non-RMAIL format. Add header and convert.
- (setq convert t)
- (rmail-insert-rmail-file-header)))
- ;; If file was not a Babyl file or if there are
- ;; Unix format messages added at the end,
- ;; convert file as necessary.
- (if (or convert
- (save-excursion
- (goto-char (point-max))
- (search-backward "\n\^_")
- (forward-char 2)
- (looking-at "\n*From ")))
- (let ((buffer-read-only nil))
- (message "Converting to Babyl format...")
- ;; If file needs conversion, convert it all,
- ;; except for the BABYL header.
- ;; (rmail-convert-to-babyl-format would delete the header.)
- (goto-char (point-min))
- (search-forward "\n\^_" nil t)
- (narrow-to-region (point) (point-max))
- (rmail-convert-to-babyl-format)
- (message "Converting to Babyl format...done"))
- (if (and (not rmail-enable-mime)
- rmail-enable-multibyte)
- ;; We still have to decode BABYL part.
- (rmail-decode-babyl-format)))))
-
- ;;;###deprecated
- (defun rmail-insert-rmail-file-header ()
- (let ((buffer-read-only nil)
- (header-line "X-BABYL: -*-rmail-*-"))
- ;; Determine if the header has already been inserted.
- (goto-char (point-min))
- (if (not (looking-at "X-BABYL: "))
- ;; The header has not been inserted. Insert -*-rmail-*- here
- ;; so that visiting the file normally recognizes it as an
- ;; Rmail file.
- (insert (concat header-line "\nX-BABYL-Version: 6
- Version: 6
- Labels:
- Note: This is the header of an rmail file.
- Note: If you are seeing it in rmail,
- Note: it means the file has no messages in it.")))))
-
(defun rmail-initialize-messages ()
"Initialize message state and process the messages in the buffer to
update message state."
--- 737,742 ----
***************
*** 1096,1102 ****
default-enable-multibyte-characters)
(let ((rmail-enable-multibyte t))
(rmail-require-mime-maybe)
- (rmail-convert-file)
(goto-char (point-max))
(set-buffer-multibyte t)))
(rmail-set-message-counters)
--- 1031,1036 ----
***************
*** 1675,1866 ****
(setq coding 'undecided))
(decode-coding-region from to coding))
- ;; the rmail-break-forwarded-messages feature is not implemented
- ;;; NOT DONE but not called any more
- (defun rmail-convert-to-babyl-format ()
- (let ((count 0) start
- (case-fold-search nil)
- (invalid-input-resync
- (function (lambda ()
- (message "Invalid Babyl format in inbox!")
- (sit-for 3)
- ;; Try to get back in sync with a real message.
- (if (re-search-forward
- (concat rmail-mmdf-delim1 "\\|^From") nil t)
- (beginning-of-line)
- (goto-char (point-max)))))))
- (goto-char (point-min))
- (save-restriction
- (while (not (eobp))
- (setq start (point))
- (cond ((looking-at "BABYL OPTIONS:");Babyl header
- (if (search-forward "\n\^_" nil t)
- ;; If we find the proper terminator, delete through there.
- (delete-region (point-min) (point))
- (funcall invalid-input-resync)
- (delete-region (point-min) (point))))
- ;; Babyl format message
- ((looking-at "\^L")
- (or (search-forward "\n\^_" nil t)
- (funcall invalid-input-resync))
- (setq count (1+ count))
- ;; Make sure there is no extra white space after the ^_
- ;; at the end of the message.
- ;; Narrowing will make sure that whatever follows the junk
- ;; will be treated properly.
- (delete-region (point)
- (save-excursion
- (skip-chars-forward " \t\n")
- (point)))
- (setq last-coding-system-used nil)
- (or rmail-enable-mime
- (not rmail-enable-multibyte)
- (decode-coding-region start (point)
- (or rmail-file-coding-system
- 'undecided)))
- ;; Add an X-Coding-System: header if we don't have one.
- (save-excursion
- (goto-char start)
- (forward-line 1)
- (if (looking-at "0")
- (forward-line 1)
- (forward-line 2))
- (or (save-restriction
- (narrow-to-region (point) (point-max))
- (rfc822-goto-eoh)
- (goto-char (point-min))
- (re-search-forward "^X-Coding-System:" nil t))
- (insert "X-Coding-System: "
- (symbol-name last-coding-system-used)
- "\n")))
- (narrow-to-region (point) (point-max)))
- ;;*** MMDF format
- ((let ((case-fold-search t))
- (looking-at rmail-mmdf-delim1))
- (let ((case-fold-search t))
- (replace-match "\^L\n0, unseen,,\n*** EOOH ***\n")
- (re-search-forward rmail-mmdf-delim2 nil t)
- (replace-match "\^_"))
- (save-excursion
- (save-restriction
- (narrow-to-region start (1- (point)))
- (goto-char (point-min))
- (while (search-forward "\n\^_" nil t); single char "\^_"
- (replace-match "\n^_")))); 2 chars: "^" and "_"
- (setq last-coding-system-used nil)
- (or rmail-enable-mime
- (not rmail-enable-multibyte)
- (decode-coding-region start (point) 'undecided))
- (save-excursion
- (goto-char start)
- (forward-line 3)
- (insert "X-Coding-System: "
- (symbol-name last-coding-system-used)
- "\n"))
- (narrow-to-region (point) (point-max))
- (setq count (1+ count)))
- ;;*** Mail format
- ((looking-at "^From ")
- (insert "\^L\n0, unseen,,\n*** EOOH ***\n")
- (rmail-nuke-pinhead-header)
- ;; If this message has a Content-Length field,
- ;; skip to the end of the contents.
- (let* ((header-end (save-excursion
- (and (re-search-forward "\n\n" nil t)
- (1- (point)))))
- (case-fold-search t)
- (quoted-printable-header-field-end
- (save-excursion
- (re-search-forward
- "^content-transfer-encoding:\\(\n?[\t
]\\)*quoted-printable\\(\n?[\t ]\\)*"
- header-end t)))
- (size
- ;; Get the numeric value from the Content-Length field.
- (save-excursion
- ;; Back up to end of prev line,
- ;; in case the Content-Length field comes first.
- (forward-char -1)
- (and (search-forward "\ncontent-length: "
- header-end t)
- (let ((beg (point))
- (eol (progn (end-of-line) (point))))
- (string-to-int (buffer-substring beg eol)))))))
- (and size
- (if (and (natnump size)
- (<= (+ header-end size) (point-max))
- ;; Make sure this would put us at a position
- ;; that we could continue from.
- (save-excursion
- (goto-char (+ header-end size))
- (skip-chars-forward "\n")
- (or (eobp)
- (and (looking-at "BABYL OPTIONS:")
- (search-forward "\n\^_" nil t))
- (and (looking-at "\^L")
- (search-forward "\n\^_" nil t))
- (let ((case-fold-search t))
- (looking-at rmail-mmdf-delim1))
- (looking-at "From "))))
- (goto-char (+ header-end size))
- (message "Ignoring invalid Content-Length field")
- (sit-for 1 0 t)))
- (if (let ((case-fold-search nil))
- (re-search-forward
- (concat "^[\^_]?\\("
- rmail-unix-mail-delimiter
- "\\|"
- rmail-mmdf-delim1 "\\|"
- "^BABYL OPTIONS:\\|"
- "\^L\n[01],\\)") nil t))
- (goto-char (match-beginning 1))
- (goto-char (point-max)))
- (setq count (1+ count))
- (if quoted-printable-header-field-end
- (save-excursion
- (rmail-decode-quoted-printable header-end (point))
- ;; Change "quoted-printable" to "8bit",
- ;; to reflect the decoding we just did.
- (goto-char quoted-printable-header-field-end)
- (delete-region (point) (search-backward ":"))
- (insert ": 8bit"))))
-
- (save-excursion
- (save-restriction
- (narrow-to-region start (point))
- (goto-char (point-min))
- (while (search-forward "\n\^_" nil t); single char
- (replace-match "\n^_")))); 2 chars: "^" and "_"
- (insert ?\^_)
- (setq last-coding-system-used nil)
- (or rmail-enable-mime
- (not rmail-enable-multibyte)
- (let ((mime-charset
- (if (and rmail-decode-mime-charset
- (save-excursion
- (goto-char start)
- (search-forward "\n\n" nil t)
- (let ((case-fold-search t))
- (re-search-backward
- rmail-mime-charset-pattern
- start t))))
- (intern (downcase (match-string 1))))))
- (rmail-decode-region start (point) mime-charset)))
- (save-excursion
- (goto-char start)
- (forward-line 3)
- (insert "X-Coding-System: "
- (symbol-name last-coding-system-used)
- "\n"))
- (narrow-to-region (point) (point-max)))
- ;;
- ;; This kludge is because some versions of sendmail.el
- ;; insert an extra newline at the beginning that shouldn't
- ;; be there. sendmail.el has been fixed, but old versions
- ;; may still be in use. -- rms, 7 May 1993.
- ((eolp) (delete-char 1))
- (t (error "Cannot convert to babyl format")))))
- count))
-
(defun rmail-hex-char-to-integer (character)
"Return CHARACTER's value interpreted as a hex digit."
(if (and (>= character ?0) (<= character ?9))
--- 1609,1614 ----
***************
*** 2201,2212 ****
(rmail-desc-get-end rmail-current-message)))))
(defun rmail-process-new-messages (&optional nomsg)
! "Process the new messages in the buffer. The buffer has been
! narrowed to expose only the new messages. For each new message append
! an entry to the message vector and, if necessary, add a header that
! will capture the salient BABYL information. Return the number of new
! messages. If NOMSG is non-nil then do not show any progress
! messages."
(let ((inhibit-read-only t)
(case-fold-search nil)
(new-message-counter 0)
--- 1949,1960 ----
(rmail-desc-get-end rmail-current-message)))))
(defun rmail-process-new-messages (&optional nomsg)
! "Process the new messages in the buffer.
! The buffer has been narrowed to expose only the new messages.
! For each new message append an entry to the message vector and,
! if necessary, add a header that will capture the salient BABYL
! information. Return the number of new messages. If NOMSG is
! non-nil then do not show any progress messages."
(let ((inhibit-read-only t)
(case-fold-search nil)
(new-message-counter 0)
***************
*** 2533,2539 ****
;; Deal with the message headers and URLs..
(rmail-header-hide-headers)
(rmail-highlight-headers)
! (rmail-activate-urls)
;; ?
(if transient-mark-mode (deactivate-mark))
--- 2281,2287 ----
;; Deal with the message headers and URLs..
(rmail-header-hide-headers)
(rmail-highlight-headers)
! (rmail-activate-urls)
;; ?
(if transient-mark-mode (deactivate-mark))
***************
*** 3162,3167 ****
--- 2910,2917 ----
prefix argument means ignore them. While composing the reply,
use \\[mail-yank-original] to yank the original message into it."
(interactive "P")
+ (if (= rmail-total-messages 0)
+ (error "No messages in this file"))
(save-excursion
(save-restriction
(let ((msgnum rmail-current-message)
***************
*** 3232,3247 ****
" " message-id))))))))
(defun rmail-reply-callback (buffer attr state n)
! "Mail reply callback function. Sets ATTR (a string) if STATE is
! non-nil, otherwise clears it. N is the message number. BUFFER,
! possibly narrowed, contains an mbox mail message."
(save-excursion
(set-buffer buffer)
(rmail-set-attribute attr state n)))
(defun rmail-mark-message (msgnum-list attr-index)
! "Set the attribute denoted by ATTRIBUTE-INDEX in the message denoted
! by the car of MSGNUM-LIST. This is used in the send-actions for
message buffers. MSGNUM-LIST is a list of the form (MSGNUM)."
(save-excursion
(let ((n (car msgnum-list)))
--- 2982,2998 ----
" " message-id))))))))
(defun rmail-reply-callback (buffer attr state n)
! "Mail reply callback function.
! Sets ATTR (a string) if STATE is
! non-nil, otherwise clears it. N is the message number.
! BUFFER, possibly narrowed, contains an mbox mail message."
(save-excursion
(set-buffer buffer)
(rmail-set-attribute attr state n)))
(defun rmail-mark-message (msgnum-list attr-index)
! "Set attribute ATTRIBUTE-INDEX in the message of the car of MSGNUM-LIST.
! This is used in the send-actions for
message buffers. MSGNUM-LIST is a list of the form (MSGNUM)."
(save-excursion
(let ((n (car msgnum-list)))
***************
*** 3250,3257 ****
(rmail-desc-set-attribute attr-index t n))))
(defun rmail-narrow-to-message (n)
! "Set the narrowing restriction in the current (rmail) buffer to
! bracket message N."
(widen)
(narrow-to-region (rmail-desc-get-start n) (rmail-desc-get-end n)))
--- 3001,3007 ----
(rmail-desc-set-attribute attr-index t n))))
(defun rmail-narrow-to-message (n)
! "Narrow the current (rmail) buffer to bracket message N."
(widen)
(narrow-to-region (rmail-desc-get-start n) (rmail-desc-get-end n)))
***************
*** 3320,3325 ****
--- 3070,3077 ----
With prefix argument, \"resend\" the message instead of forwarding it;
see the documentation of `rmail-resend'."
(interactive "P")
+ (if (= rmail-total-messages 0)
+ (error "No messages in this file"))
(if resend
(call-interactively 'rmail-resend)
(let ((forward-buffer rmail-buffer)
***************
*** 3382,3387 ****
--- 3134,3141 ----
Optional ALIAS-FILE is alternate aliases file to be used by sendmail,
typically for purposes of moderating a list."
(interactive "sResend to: ")
+ (if (= rmail-total-messages 0)
+ (error "No messages in this file"))
(require 'sendmail)
(require 'mailalias)
(unless (or (eq rmail-view-buffer (current-buffer))
***************
*** 3491,3496 ****
--- 3245,3252 ----
The variable `rmail-retry-ignored-headers' is a regular expression
specifying headers which should not be copied into the new message."
(interactive)
+ (if (= rmail-total-messages 0)
+ (error "No messages in this file"))
(require 'mail-utils)
(let ((rmail-this-buffer (current-buffer))
(msgnum rmail-current-message)
***************
*** 3878,3883 ****
--- 3634,3641 ----
(defun rmail-browse-body ()
"Send the message body to a browser to be rendered."
(interactive)
+ (if (= rmail-total-messages 0)
+ (error "No messages in this file"))
(save-excursion
(save-restriction
(goto-char (point-min))
- [Emacs-diffs] Changes to emacs/lisp/mail/rmail.el [rmail-mbox-branch],
Richard M . Stallman <=