(defvar rmail-view-buffer nil
"Buffer which holds RMAIL message for MIME displaying.")
+(make-variable-buffer-local 'rmail-view-buffer)
(put 'rmail-view-buffer 'permanent-local t)
\f
;; `Sticky' default variables.
The first parenthesized expression should match the MIME-charset name.")
\f
-;;; Regexp matching the delimiter of messages in UNIX mail format
-;;; (UNIX From lines), minus the initial ^. Note that if you change
-;;; this expression, you must change the code in rmail-nuke-pinhead-header
-;;; that knows the exact ordering of the \\( \\) subexpressions.
(defvar rmail-unix-mail-delimiter
(let ((time-zone-regexp
(concat "\\([A-Z]?[A-Z]?[A-Z][A-Z]\\( DST\\)?"
"\\(remote from .*\\)?"
"\n"))
- nil)
+ "Regexp matching the delimiter of messages in UNIX mail format
+\(UNIX From lines), minus the initial ^. Note that if you change
+this expression, you must change the code in rmail-nuke-pinhead-header
+that knows the exact ordering of the \\( \\) subexpressions.")
(defvar rmail-font-lock-keywords
;; These are all matched case-insensitively.
(let ((rmail-total-messages total))
,@body))
(select-window window))))
- (save-excursion
- (set-buffer rmail-summary-buffer)
+ (with-current-buffer rmail-summary-buffer
(let ((rmail-total-messages total))
,@body)))
(rmail-maybe-display-summary)))
(switch-to-buffer
(let ((enable-local-variables nil))
(find-file-noselect file-name))))
- ;; Insure that the collection and view buffers are in sync and
- ;; insure that a message is not being edited.
+ ;; Ensure that the collection and view buffers are in sync and
+ ;; ensure that a message is not being edited.
(if (eq major-mode 'rmail-mode)
(rmail-swap-buffers-maybe))
(if (eq major-mode 'rmail-edit-mode)
(error "Exit Rmail Edit mode before getting new mail"))
(or (and existed (> (buffer-size) 0))
(setq run-mail-hook t))
- ;; Insure that the Rmail file is in mbox format, the buffer is in
+ ;; Ensure that the Rmail file is in mbox format, the buffer is in
;; Rmail mode and has been scanned to find all the messages
;; (setting the global message variables in the process).
(rmail-convert-file-maybe)
\f
;;; Set up Rmail mode keymaps
-(defvar rmail-mode-map nil)
-(if rmail-mode-map
- nil
- (setq rmail-mode-map (make-keymap))
- (suppress-keymap rmail-mode-map)
- (define-key rmail-mode-map "a" 'rmail-add-label)
- (define-key rmail-mode-map "b" 'rmail-bury)
- (define-key rmail-mode-map "c" 'rmail-continue)
- (define-key rmail-mode-map "d" 'rmail-delete-forward)
- (define-key rmail-mode-map "\C-d" 'rmail-delete-backward)
- (define-key rmail-mode-map "e" 'rmail-edit-current-message)
- (define-key rmail-mode-map "f" 'rmail-forward)
- (define-key rmail-mode-map "g" 'rmail-get-new-mail)
- (define-key rmail-mode-map "h" 'rmail-summary)
- (define-key rmail-mode-map "i" 'rmail-input)
- (define-key rmail-mode-map "j" 'rmail-show-message-maybe)
- (define-key rmail-mode-map "k" 'rmail-kill-label)
- (define-key rmail-mode-map "l" 'rmail-summary-by-labels)
- (define-key rmail-mode-map "\e\C-h" 'rmail-summary)
- (define-key rmail-mode-map "\e\C-l" 'rmail-summary-by-labels)
- (define-key rmail-mode-map "\e\C-r" 'rmail-summary-by-recipients)
- (define-key rmail-mode-map "\e\C-s" 'rmail-summary-by-regexp)
- (define-key rmail-mode-map "\e\C-t" 'rmail-summary-by-topic)
- (define-key rmail-mode-map "m" 'rmail-mail)
- (define-key rmail-mode-map "\em" 'rmail-retry-failure)
- (define-key rmail-mode-map "n" 'rmail-next-undeleted-message)
- (define-key rmail-mode-map "\en" 'rmail-next-message)
- (define-key rmail-mode-map "\e\C-n" 'rmail-next-labeled-message)
- (define-key rmail-mode-map "o" 'rmail-output)
- (define-key rmail-mode-map "\C-o" 'rmail-output-as-seen)
- (define-key rmail-mode-map "p" 'rmail-previous-undeleted-message)
- (define-key rmail-mode-map "\ep" 'rmail-previous-message)
- (define-key rmail-mode-map "\e\C-p" 'rmail-previous-labeled-message)
- (define-key rmail-mode-map "q" 'rmail-quit)
- (define-key rmail-mode-map "r" 'rmail-reply)
-;; I find I can't live without the default M-r command -- rms.
-;; (define-key rmail-mode-map "\er" 'rmail-search-backwards)
- (define-key rmail-mode-map "s" 'rmail-expunge-and-save)
- (define-key rmail-mode-map "\es" 'rmail-search)
- (define-key rmail-mode-map "t" 'rmail-toggle-header)
- (define-key rmail-mode-map "u" 'rmail-undelete-previous-message)
- (define-key rmail-mode-map "w" 'rmail-output-body-to-file)
- (define-key rmail-mode-map "\C-c\C-w" 'rmail-widen)
- (define-key rmail-mode-map "x" 'rmail-expunge)
- (define-key rmail-mode-map "." 'rmail-beginning-of-message)
- (define-key rmail-mode-map "/" 'rmail-end-of-message)
- (define-key rmail-mode-map "<" 'rmail-first-message)
- (define-key rmail-mode-map ">" 'rmail-last-message)
- (define-key rmail-mode-map " " 'scroll-up)
- (define-key rmail-mode-map "\177" 'scroll-down)
- (define-key rmail-mode-map "?" 'describe-mode)
- (define-key rmail-mode-map "\C-c\C-s\C-d" 'rmail-sort-by-date)
- (define-key rmail-mode-map "\C-c\C-s\C-s" 'rmail-sort-by-subject)
- (define-key rmail-mode-map "\C-c\C-s\C-a" 'rmail-sort-by-author)
- (define-key rmail-mode-map "\C-c\C-s\C-r" 'rmail-sort-by-recipient)
- (define-key rmail-mode-map "\C-c\C-s\C-c" 'rmail-sort-by-correspondent)
- (define-key rmail-mode-map "\C-c\C-s\C-l" 'rmail-sort-by-lines)
- (define-key rmail-mode-map "\C-c\C-s\C-k" 'rmail-sort-by-labels)
- (define-key rmail-mode-map "\C-c\C-n" 'rmail-next-same-subject)
- (define-key rmail-mode-map "\C-c\C-p" 'rmail-previous-same-subject)
- )
+(defvar rmail-mode-map
+ (let ((map (make-keymap)))
+ (suppress-keymap map)
+ (define-key map "a" 'rmail-add-label)
+ (define-key map "b" 'rmail-bury)
+ (define-key map "c" 'rmail-continue)
+ (define-key map "d" 'rmail-delete-forward)
+ (define-key map "\C-d" 'rmail-delete-backward)
+ (define-key map "e" 'rmail-edit-current-message)
+ (define-key map "f" 'rmail-forward)
+ (define-key map "g" 'rmail-get-new-mail)
+ (define-key map "h" 'rmail-summary)
+ (define-key map "i" 'rmail-input)
+ (define-key map "j" 'rmail-show-message-maybe)
+ (define-key map "k" 'rmail-kill-label)
+ (define-key map "l" 'rmail-summary-by-labels)
+ (define-key map "\e\C-h" 'rmail-summary)
+ (define-key map "\e\C-l" 'rmail-summary-by-labels)
+ (define-key map "\e\C-r" 'rmail-summary-by-recipients)
+ (define-key map "\e\C-s" 'rmail-summary-by-regexp)
+ (define-key map "\e\C-t" 'rmail-summary-by-topic)
+ (define-key map "m" 'rmail-mail)
+ (define-key map "\em" 'rmail-retry-failure)
+ (define-key map "n" 'rmail-next-undeleted-message)
+ (define-key map "\en" 'rmail-next-message)
+ (define-key map "\e\C-n" 'rmail-next-labeled-message)
+ (define-key map "o" 'rmail-output)
+ (define-key map "\C-o" 'rmail-output-as-seen)
+ (define-key map "p" 'rmail-previous-undeleted-message)
+ (define-key map "\ep" 'rmail-previous-message)
+ (define-key map "\e\C-p" 'rmail-previous-labeled-message)
+ (define-key map "q" 'rmail-quit)
+ (define-key map "r" 'rmail-reply)
+ ;; I find I can't live without the default M-r command -- rms.
+ ;; (define-key rmail-mode-map "\er" 'rmail-search-backwards)
+ (define-key map "s" 'rmail-expunge-and-save)
+ (define-key map "\es" 'rmail-search)
+ (define-key map "t" 'rmail-toggle-header)
+ (define-key map "u" 'rmail-undelete-previous-message)
+ (define-key map "w" 'rmail-output-body-to-file)
+ (define-key map "\C-c\C-w" 'rmail-widen)
+ (define-key map "x" 'rmail-expunge)
+ (define-key map "." 'rmail-beginning-of-message)
+ (define-key map "/" 'rmail-end-of-message)
+ (define-key map "<" 'rmail-first-message)
+ (define-key map ">" 'rmail-last-message)
+ (define-key map " " 'scroll-up)
+ (define-key map "\177" 'scroll-down)
+ (define-key map "?" 'describe-mode)
+ (define-key map "\C-c\C-s\C-d" 'rmail-sort-by-date)
+ (define-key map "\C-c\C-s\C-s" 'rmail-sort-by-subject)
+ (define-key map "\C-c\C-s\C-a" 'rmail-sort-by-author)
+ (define-key map "\C-c\C-s\C-r" 'rmail-sort-by-recipient)
+ (define-key map "\C-c\C-s\C-c" 'rmail-sort-by-correspondent)
+ (define-key map "\C-c\C-s\C-l" 'rmail-sort-by-lines)
+ (define-key map "\C-c\C-s\C-k" 'rmail-sort-by-labels)
+ (define-key map "\C-c\C-n" 'rmail-next-same-subject)
+ (define-key map "\C-c\C-p" 'rmail-previous-same-subject)
+
\f
-(define-key rmail-mode-map [menu-bar] (make-sparse-keymap))
+ (define-key map [menu-bar] (make-sparse-keymap))
+
+ (define-key map [menu-bar classify]
+ (cons "Classify" (make-sparse-keymap "Classify")))
-(define-key rmail-mode-map [menu-bar classify]
- (cons "Classify" (make-sparse-keymap "Classify")))
+ (define-key map [menu-bar classify input-menu]
+ nil)
-(define-key rmail-mode-map [menu-bar classify input-menu]
- nil)
+ (define-key map [menu-bar classify output-menu]
+ nil)
-(define-key rmail-mode-map [menu-bar classify output-menu]
- nil)
+ (define-key map [menu-bar classify output-body]
+ '("Output body to file..." . rmail-output-body-to-file))
-(define-key rmail-mode-map [menu-bar classify output-body]
- '("Output body to file..." . rmail-output-body-to-file))
+ (define-key map [menu-bar classify output-inbox]
+ '("Output..." . rmail-output))
-(define-key rmail-mode-map [menu-bar classify output-inbox]
- '("Output..." . rmail-output))
+ (define-key map [menu-bar classify output]
+ '("Output as seen..." . rmail-output-as-seen))
-(define-key rmail-mode-map [menu-bar classify output]
- '("Output as seen..." . rmail-output-as-seen))
+ (define-key map [menu-bar classify kill-label]
+ '("Kill Label..." . rmail-kill-label))
-(define-key rmail-mode-map [menu-bar classify kill-label]
- '("Kill Label..." . rmail-kill-label))
+ (define-key map [menu-bar classify add-label]
+ '("Add Label..." . rmail-add-label))
-(define-key rmail-mode-map [menu-bar classify add-label]
- '("Add Label..." . rmail-add-label))
+ (define-key map [menu-bar summary]
+ (cons "Summary" (make-sparse-keymap "Summary")))
-(define-key rmail-mode-map [menu-bar summary]
- (cons "Summary" (make-sparse-keymap "Summary")))
+ (define-key map [menu-bar summary senders]
+ '("By Senders..." . rmail-summary-by-senders))
-(define-key rmail-mode-map [menu-bar summary senders]
- '("By Senders..." . rmail-summary-by-senders))
+ (define-key map [menu-bar summary labels]
+ '("By Labels..." . rmail-summary-by-labels))
-(define-key rmail-mode-map [menu-bar summary labels]
- '("By Labels..." . rmail-summary-by-labels))
+ (define-key map [menu-bar summary recipients]
+ '("By Recipients..." . rmail-summary-by-recipients))
-(define-key rmail-mode-map [menu-bar summary recipients]
- '("By Recipients..." . rmail-summary-by-recipients))
+ (define-key map [menu-bar summary topic]
+ '("By Topic..." . rmail-summary-by-topic))
-(define-key rmail-mode-map [menu-bar summary topic]
- '("By Topic..." . rmail-summary-by-topic))
+ (define-key map [menu-bar summary regexp]
+ '("By Regexp..." . rmail-summary-by-regexp))
-(define-key rmail-mode-map [menu-bar summary regexp]
- '("By Regexp..." . rmail-summary-by-regexp))
+ (define-key map [menu-bar summary all]
+ '("All" . rmail-summary))
-(define-key rmail-mode-map [menu-bar summary all]
- '("All" . rmail-summary))
+ (define-key map [menu-bar mail]
+ (cons "Mail" (make-sparse-keymap "Mail")))
-(define-key rmail-mode-map [menu-bar mail]
- (cons "Mail" (make-sparse-keymap "Mail")))
+ (define-key map [menu-bar mail rmail-get-new-mail]
+ '("Get New Mail" . rmail-get-new-mail))
-(define-key rmail-mode-map [menu-bar mail rmail-get-new-mail]
- '("Get New Mail" . rmail-get-new-mail))
+ (define-key map [menu-bar mail lambda]
+ '("----"))
-(define-key rmail-mode-map [menu-bar mail lambda]
- '("----"))
+ (define-key map [menu-bar mail continue]
+ '("Continue" . rmail-continue))
-(define-key rmail-mode-map [menu-bar mail continue]
- '("Continue" . rmail-continue))
+ (define-key map [menu-bar mail resend]
+ '("Re-send..." . rmail-resend))
-(define-key rmail-mode-map [menu-bar mail resend]
- '("Re-send..." . rmail-resend))
+ (define-key map [menu-bar mail forward]
+ '("Forward" . rmail-forward))
-(define-key rmail-mode-map [menu-bar mail forward]
- '("Forward" . rmail-forward))
+ (define-key map [menu-bar mail retry]
+ '("Retry" . rmail-retry-failure))
-(define-key rmail-mode-map [menu-bar mail retry]
- '("Retry" . rmail-retry-failure))
+ (define-key map [menu-bar mail reply]
+ '("Reply" . rmail-reply))
-(define-key rmail-mode-map [menu-bar mail reply]
- '("Reply" . rmail-reply))
+ (define-key map [menu-bar mail mail]
+ '("Mail" . rmail-mail))
-(define-key rmail-mode-map [menu-bar mail mail]
- '("Mail" . rmail-mail))
+ (define-key map [menu-bar delete]
+ (cons "Delete" (make-sparse-keymap "Delete")))
-(define-key rmail-mode-map [menu-bar delete]
- (cons "Delete" (make-sparse-keymap "Delete")))
+ (define-key map [menu-bar delete expunge/save]
+ '("Expunge/Save" . rmail-expunge-and-save))
-(define-key rmail-mode-map [menu-bar delete expunge/save]
- '("Expunge/Save" . rmail-expunge-and-save))
+ (define-key map [menu-bar delete expunge]
+ '("Expunge" . rmail-expunge))
-(define-key rmail-mode-map [menu-bar delete expunge]
- '("Expunge" . rmail-expunge))
+ (define-key map [menu-bar delete undelete]
+ '("Undelete" . rmail-undelete-previous-message))
-(define-key rmail-mode-map [menu-bar delete undelete]
- '("Undelete" . rmail-undelete-previous-message))
+ (define-key map [menu-bar delete delete]
+ '("Delete" . rmail-delete-forward))
-(define-key rmail-mode-map [menu-bar delete delete]
- '("Delete" . rmail-delete-forward))
+ (define-key map [menu-bar move]
+ (cons "Move" (make-sparse-keymap "Move")))
-(define-key rmail-mode-map [menu-bar move]
- (cons "Move" (make-sparse-keymap "Move")))
+ (define-key map [menu-bar move search-back]
+ '("Search Back..." . rmail-search-backwards))
-(define-key rmail-mode-map [menu-bar move search-back]
- '("Search Back..." . rmail-search-backwards))
+ (define-key map [menu-bar move search]
+ '("Search..." . rmail-search))
-(define-key rmail-mode-map [menu-bar move search]
- '("Search..." . rmail-search))
+ (define-key map [menu-bar move previous]
+ '("Previous Nondeleted" . rmail-previous-undeleted-message))
-(define-key rmail-mode-map [menu-bar move previous]
- '("Previous Nondeleted" . rmail-previous-undeleted-message))
+ (define-key map [menu-bar move next]
+ '("Next Nondeleted" . rmail-next-undeleted-message))
-(define-key rmail-mode-map [menu-bar move next]
- '("Next Nondeleted" . rmail-next-undeleted-message))
+ (define-key map [menu-bar move last]
+ '("Last" . rmail-last-message))
-(define-key rmail-mode-map [menu-bar move last]
- '("Last" . rmail-last-message))
+ (define-key map [menu-bar move first]
+ '("First" . rmail-first-message))
-(define-key rmail-mode-map [menu-bar move first]
- '("First" . rmail-first-message))
+ (define-key map [menu-bar move previous]
+ '("Previous" . rmail-previous-message))
-(define-key rmail-mode-map [menu-bar move previous]
- '("Previous" . rmail-previous-message))
+ (define-key map [menu-bar move next]
+ '("Next" . rmail-next-message))
-(define-key rmail-mode-map [menu-bar move next]
- '("Next" . rmail-next-message))
+ map))
;; Rmail toolbar
(defvar rmail-tool-bar-map
buffer-file-coding-system)))
(buffer-swap-text rmail-view-buffer)
(setq buffer-file-coding-system coding)
- (set-buffer-modified-p modp)))
+ (restore-buffer-modified-p modp)))
(defun rmail-buffers-swapped-p ()
"Return non-nil if the message collection is in `rmail-view-buffer'."
(make-local-variable 'rmail-buffer)
(setq rmail-buffer (current-buffer))
(set-buffer-multibyte nil)
- (make-local-variable 'rmail-view-buffer)
- (save-excursion
- (setq rmail-view-buffer (rmail-generate-viewer-buffer))
- (set-buffer rmail-view-buffer)
+ (with-current-buffer (setq rmail-view-buffer (rmail-generate-viewer-buffer))
(setq buffer-undo-list t)
(set-buffer-multibyte t)
;; Force C-x C-s write Unix EOLs.
(interactive)
(set-buffer rmail-buffer)
(rmail-expunge t)
- (rmail-swap-buffers-maybe)
+ ;; No need to swap buffers: rmail-write-region-annotate takes care of it.
+ ;; (rmail-swap-buffers-maybe)
(save-buffer)
(if (rmail-summary-exists)
(rmail-select-summary (set-buffer-modified-p nil)))
limit)
;; Detect an empty inbox file.
(unless (= start (point-max))
- ;; Scan the new messages to establish a count and to insure that
+ ;; Scan the new messages to establish a count and to ensure that
;; an attribute header is present.
(while (looking-at "From ")
;; Determine if a new attribute header needs to be added to
(save-excursion
;; ... so it is ok to go to a different buffer.
(if (rmail-buffers-swapped-p) (set-buffer rmail-view-buffer))
+ (save-excursion
(save-restriction
(widen)
- (save-excursion
(goto-char msgbeg)
(setq end (search-forward "\n\n" nil t))
(if end
(save-excursion
;; ... so it is ok to go to a different buffer.
(if (rmail-buffers-swapped-p) (set-buffer rmail-view-buffer))
+ (save-excursion
(save-restriction
(widen)
- (save-excursion
(goto-char msgbeg)
(setq end (search-forward "\n\n" nil t))
(if end (setq end (1- end)))
(save-excursion
;; ... so it is ok to go to a different buffer.
(if (rmail-buffers-swapped-p) (set-buffer rmail-view-buffer))
+ (save-excursion
(save-restriction
(widen)
- (save-excursion
;; Determine if the current state is the desired state.
(goto-char msgbeg)
(save-excursion
(save-excursion
;; ... so it is ok to go to a different buffer.
(if (rmail-buffers-swapped-p) (set-buffer rmail-view-buffer))
+ (save-excursion
(save-restriction
(widen)
- (save-excursion
(goto-char msgbeg)
- (save-restriction
(narrow-to-region msgbeg msgend)
- (apply function args)))))))))
+ (apply function args))))))))
(defun rmail-widen-to-current-msgbeg (function)
"Call FUNCTION with point at start of internal data of current message.
(interactive "p")
(or (eq major-mode 'rmail-mode)
(switch-to-buffer rmail-buffer))
+ ;; FIXME: Why do we swap the raw data back in?
(rmail-swap-buffers-maybe)
(rmail-maybe-set-message-counters)
(widen)
iso-8859, koi8-r, etc."
(interactive "zCoding system for re-decoding this message: ")
(when (not rmail-enable-mime)
- (save-excursion
- (set-buffer rmail-buffer)
+ (with-current-buffer rmail-buffer
(rmail-swap-buffers-maybe)
(save-restriction
(widen)
(rmail-show-message-maybe msg))
(rmail-set-attribute rmail-deleted-attr-index nil)
(if (rmail-summary-exists)
- (save-excursion
- (set-buffer rmail-summary-buffer)
+ (with-current-buffer rmail-summary-buffer
(rmail-summary-mark-undeleted msg)))
(rmail-maybe-display-summary))))
This is use in the send-actions for message buffers.
MSGNUM-LIST is a list of the form (MSGNUM)
which is an element of rmail-msgref-vector."
- (save-excursion
- (set-buffer buffer)
+ (with-current-buffer buffer
(if (car msgnum-list)
(rmail-set-attribute attribute t (car msgnum-list)))))
(remove-hook 'rmail-show-message-hook 'rmail-fontify-message t)
(remove-text-properties (point-min) (point-max) '(rmail-fontified nil))
(font-lock-default-unfontify-buffer)
- (and (not modified) (buffer-modified-p) (set-buffer-modified-p nil)))))
+ (and (not modified) (buffer-modified-p)
+ (restore-buffer-modified-p nil)))))
(defun rmail-fontify-message ()
;; Fontify the current message if it is not already fontified.
(save-match-data
(add-text-properties (point-min) (point-max) '(rmail-fontified t))
(font-lock-fontify-region (point-min) (point-max))
- (and (not modified) (buffer-modified-p) (set-buffer-modified-p nil)))))))
+ (and (not modified) (buffer-modified-p)
+ (restore-buffer-modified-p nil)))))))
\f
;;; Speedbar support for RMAIL files.
(eval-when-compile (require 'speedbar))
Under Folders: Click a name to read it, or on the <M> to move the
current message into that RMAIL folder."
(let ((from nil))
- (save-excursion
- (set-buffer buffer)
+ (with-current-buffer buffer
(goto-char (point-min))
(if (not (re-search-forward "^Reply-To: " nil t))
(if (not (re-search-forward "^From:? " nil t))
'rmail-speedbar-button 'rmail-reply))
(insert "Folders:\n")
(let* ((case-fold-search nil)
- (df (directory-files (save-excursion (set-buffer buffer)
- default-directory)
+ (df (directory-files (with-current-buffer buffer
+ default-directory)
nil rmail-speedbar-match-folder-regexp)))
(while df
(speedbar-insert-button "<M>" 'speedbar-button-face 'highlight