aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Monnier2009-02-01 03:39:37 +0000
committerStefan Monnier2009-02-01 03:39:37 +0000
commit2dc00ad0c32453ea4d5573ebac7ab041f54330fd (patch)
tree0494b3efdc528fba201a5975c2761d9272c4b2af
parent73d7bcb9186581589b8ab10b2b4f9f98f734d7fc (diff)
downloademacs-2dc00ad0c32453ea4d5573ebac7ab041f54330fd.tar.gz
emacs-2dc00ad0c32453ea4d5573ebac7ab041f54330fd.zip
(rmail-view-buffer): Make buffer-local.
(rmail-select-summary, rmail-perm-variables, rmail-redecode-body) (rmail-undelete-previous-message, rmail-mark-message) (rmail-speedbar-buttons): Use with-current-buffer. (rmail-mode-map): Move initialization into declaration. (rmail-swap-buffers, rmail-unfontify-buffer-function) (rmail-fontify-message): Use restore-buffer-modified-p. (rmail-expunge-and-save): Don't swap buffer. (rmail-get-header, rmail-set-header, rmail-set-attribute) (rmail-apply-in-message): Swap save-excursion and save-restriction.
-rw-r--r--lisp/ChangeLog11
-rw-r--r--lisp/mail/rmail.el341
2 files changed, 179 insertions, 173 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 9188230e6f7..020cc4e71cb 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,5 +1,16 @@
12009-02-01 Stefan Monnier <monnier@iro.umontreal.ca> 12009-02-01 Stefan Monnier <monnier@iro.umontreal.ca>
2 2
3 * mail/rmail.el (rmail-view-buffer): Make buffer-local.
4 (rmail-select-summary, rmail-perm-variables, rmail-redecode-body)
5 (rmail-undelete-previous-message, rmail-mark-message)
6 (rmail-speedbar-buttons): Use with-current-buffer.
7 (rmail-mode-map): Move initialization into declaration.
8 (rmail-swap-buffers, rmail-unfontify-buffer-function)
9 (rmail-fontify-message): Use restore-buffer-modified-p.
10 (rmail-expunge-and-save): Don't swap buffer.
11 (rmail-get-header, rmail-set-header, rmail-set-attribute)
12 (rmail-apply-in-message): Swap save-excursion and save-restriction.
13
3 * mail/rmailsort.el (rmail-sort-messages): Use car-less-than-car 14 * mail/rmailsort.el (rmail-sort-messages): Use car-less-than-car
4 if possible. 15 if possible.
5 16
diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el
index b2bd29c1991..3966c0edac3 100644
--- a/lisp/mail/rmail.el
+++ b/lisp/mail/rmail.el
@@ -563,6 +563,7 @@ by substituting the new message number into the existing list.")
563 563
564(defvar rmail-view-buffer nil 564(defvar rmail-view-buffer nil
565 "Buffer which holds RMAIL message for MIME displaying.") 565 "Buffer which holds RMAIL message for MIME displaying.")
566(make-variable-buffer-local 'rmail-view-buffer)
566(put 'rmail-view-buffer 'permanent-local t) 567(put 'rmail-view-buffer 'permanent-local t)
567 568
568;; `Sticky' default variables. 569;; `Sticky' default variables.
@@ -675,10 +676,6 @@ the variable `rmail-mime-feature'.")
675The first parenthesized expression should match the MIME-charset name.") 676The first parenthesized expression should match the MIME-charset name.")
676 677
677 678
678;;; Regexp matching the delimiter of messages in UNIX mail format
679;;; (UNIX From lines), minus the initial ^. Note that if you change
680;;; this expression, you must change the code in rmail-nuke-pinhead-header
681;;; that knows the exact ordering of the \\( \\) subexpressions.
682(defvar rmail-unix-mail-delimiter 679(defvar rmail-unix-mail-delimiter
683 (let ((time-zone-regexp 680 (let ((time-zone-regexp
684 (concat "\\([A-Z]?[A-Z]?[A-Z][A-Z]\\( DST\\)?" 681 (concat "\\([A-Z]?[A-Z]?[A-Z][A-Z]\\( DST\\)?"
@@ -729,7 +726,10 @@ The first parenthesized expression should match the MIME-charset name.")
729 "\\(remote from .*\\)?" 726 "\\(remote from .*\\)?"
730 727
731 "\n")) 728 "\n"))
732 nil) 729 "Regexp matching the delimiter of messages in UNIX mail format
730\(UNIX From lines), minus the initial ^. Note that if you change
731this expression, you must change the code in rmail-nuke-pinhead-header
732that knows the exact ordering of the \\( \\) subexpressions.")
733 733
734(defvar rmail-font-lock-keywords 734(defvar rmail-font-lock-keywords
735 ;; These are all matched case-insensitively. 735 ;; These are all matched case-insensitively.
@@ -774,8 +774,7 @@ The first parenthesized expression should match the MIME-charset name.")
774 (let ((rmail-total-messages total)) 774 (let ((rmail-total-messages total))
775 ,@body)) 775 ,@body))
776 (select-window window)))) 776 (select-window window))))
777 (save-excursion 777 (with-current-buffer rmail-summary-buffer
778 (set-buffer rmail-summary-buffer)
779 (let ((rmail-total-messages total)) 778 (let ((rmail-total-messages total))
780 ,@body))) 779 ,@body)))
781 (rmail-maybe-display-summary))) 780 (rmail-maybe-display-summary)))
@@ -843,15 +842,15 @@ If `rmail-display-summary' is non-nil, make a summary for this RMAIL file."
843 (switch-to-buffer 842 (switch-to-buffer
844 (let ((enable-local-variables nil)) 843 (let ((enable-local-variables nil))
845 (find-file-noselect file-name)))) 844 (find-file-noselect file-name))))
846 ;; Insure that the collection and view buffers are in sync and 845 ;; Ensure that the collection and view buffers are in sync and
847 ;; insure that a message is not being edited. 846 ;; ensure that a message is not being edited.
848 (if (eq major-mode 'rmail-mode) 847 (if (eq major-mode 'rmail-mode)
849 (rmail-swap-buffers-maybe)) 848 (rmail-swap-buffers-maybe))
850 (if (eq major-mode 'rmail-edit-mode) 849 (if (eq major-mode 'rmail-edit-mode)
851 (error "Exit Rmail Edit mode before getting new mail")) 850 (error "Exit Rmail Edit mode before getting new mail"))
852 (or (and existed (> (buffer-size) 0)) 851 (or (and existed (> (buffer-size) 0))
853 (setq run-mail-hook t)) 852 (setq run-mail-hook t))
854 ;; Insure that the Rmail file is in mbox format, the buffer is in 853 ;; Ensure that the Rmail file is in mbox format, the buffer is in
855 ;; Rmail mode and has been scanned to find all the messages 854 ;; Rmail mode and has been scanned to find all the messages
856 ;; (setting the global message variables in the process). 855 ;; (setting the global message variables in the process).
857 (rmail-convert-file-maybe) 856 (rmail-convert-file-maybe)
@@ -942,183 +941,183 @@ The buffer is expected to be narrowed to just the header of the message."
942 941
943;;; Set up Rmail mode keymaps 942;;; Set up Rmail mode keymaps
944 943
945(defvar rmail-mode-map nil) 944(defvar rmail-mode-map
946(if rmail-mode-map 945 (let ((map (make-keymap)))
947 nil 946 (suppress-keymap map)
948 (setq rmail-mode-map (make-keymap)) 947 (define-key map "a" 'rmail-add-label)
949 (suppress-keymap rmail-mode-map) 948 (define-key map "b" 'rmail-bury)
950 (define-key rmail-mode-map "a" 'rmail-add-label) 949 (define-key map "c" 'rmail-continue)
951 (define-key rmail-mode-map "b" 'rmail-bury) 950 (define-key map "d" 'rmail-delete-forward)
952 (define-key rmail-mode-map "c" 'rmail-continue) 951 (define-key map "\C-d" 'rmail-delete-backward)
953 (define-key rmail-mode-map "d" 'rmail-delete-forward) 952 (define-key map "e" 'rmail-edit-current-message)
954 (define-key rmail-mode-map "\C-d" 'rmail-delete-backward) 953 (define-key map "f" 'rmail-forward)
955 (define-key rmail-mode-map "e" 'rmail-edit-current-message) 954 (define-key map "g" 'rmail-get-new-mail)
956 (define-key rmail-mode-map "f" 'rmail-forward) 955 (define-key map "h" 'rmail-summary)
957 (define-key rmail-mode-map "g" 'rmail-get-new-mail) 956 (define-key map "i" 'rmail-input)
958 (define-key rmail-mode-map "h" 'rmail-summary) 957 (define-key map "j" 'rmail-show-message-maybe)
959 (define-key rmail-mode-map "i" 'rmail-input) 958 (define-key map "k" 'rmail-kill-label)
960 (define-key rmail-mode-map "j" 'rmail-show-message-maybe) 959 (define-key map "l" 'rmail-summary-by-labels)
961 (define-key rmail-mode-map "k" 'rmail-kill-label) 960 (define-key map "\e\C-h" 'rmail-summary)
962 (define-key rmail-mode-map "l" 'rmail-summary-by-labels) 961 (define-key map "\e\C-l" 'rmail-summary-by-labels)
963 (define-key rmail-mode-map "\e\C-h" 'rmail-summary) 962 (define-key map "\e\C-r" 'rmail-summary-by-recipients)
964 (define-key rmail-mode-map "\e\C-l" 'rmail-summary-by-labels) 963 (define-key map "\e\C-s" 'rmail-summary-by-regexp)
965 (define-key rmail-mode-map "\e\C-r" 'rmail-summary-by-recipients) 964 (define-key map "\e\C-t" 'rmail-summary-by-topic)
966 (define-key rmail-mode-map "\e\C-s" 'rmail-summary-by-regexp) 965 (define-key map "m" 'rmail-mail)
967 (define-key rmail-mode-map "\e\C-t" 'rmail-summary-by-topic) 966 (define-key map "\em" 'rmail-retry-failure)
968 (define-key rmail-mode-map "m" 'rmail-mail) 967 (define-key map "n" 'rmail-next-undeleted-message)
969 (define-key rmail-mode-map "\em" 'rmail-retry-failure) 968 (define-key map "\en" 'rmail-next-message)
970 (define-key rmail-mode-map "n" 'rmail-next-undeleted-message) 969 (define-key map "\e\C-n" 'rmail-next-labeled-message)
971 (define-key rmail-mode-map "\en" 'rmail-next-message) 970 (define-key map "o" 'rmail-output)
972 (define-key rmail-mode-map "\e\C-n" 'rmail-next-labeled-message) 971 (define-key map "\C-o" 'rmail-output-as-seen)
973 (define-key rmail-mode-map "o" 'rmail-output) 972 (define-key map "p" 'rmail-previous-undeleted-message)
974 (define-key rmail-mode-map "\C-o" 'rmail-output-as-seen) 973 (define-key map "\ep" 'rmail-previous-message)
975 (define-key rmail-mode-map "p" 'rmail-previous-undeleted-message) 974 (define-key map "\e\C-p" 'rmail-previous-labeled-message)
976 (define-key rmail-mode-map "\ep" 'rmail-previous-message) 975 (define-key map "q" 'rmail-quit)
977 (define-key rmail-mode-map "\e\C-p" 'rmail-previous-labeled-message) 976 (define-key map "r" 'rmail-reply)
978 (define-key rmail-mode-map "q" 'rmail-quit) 977 ;; I find I can't live without the default M-r command -- rms.
979 (define-key rmail-mode-map "r" 'rmail-reply) 978 ;; (define-key rmail-mode-map "\er" 'rmail-search-backwards)
980;; I find I can't live without the default M-r command -- rms. 979 (define-key map "s" 'rmail-expunge-and-save)
981;; (define-key rmail-mode-map "\er" 'rmail-search-backwards) 980 (define-key map "\es" 'rmail-search)
982 (define-key rmail-mode-map "s" 'rmail-expunge-and-save) 981 (define-key map "t" 'rmail-toggle-header)
983 (define-key rmail-mode-map "\es" 'rmail-search) 982 (define-key map "u" 'rmail-undelete-previous-message)
984 (define-key rmail-mode-map "t" 'rmail-toggle-header) 983 (define-key map "w" 'rmail-output-body-to-file)
985 (define-key rmail-mode-map "u" 'rmail-undelete-previous-message) 984 (define-key map "\C-c\C-w" 'rmail-widen)
986 (define-key rmail-mode-map "w" 'rmail-output-body-to-file) 985 (define-key map "x" 'rmail-expunge)
987 (define-key rmail-mode-map "\C-c\C-w" 'rmail-widen) 986 (define-key map "." 'rmail-beginning-of-message)
988 (define-key rmail-mode-map "x" 'rmail-expunge) 987 (define-key map "/" 'rmail-end-of-message)
989 (define-key rmail-mode-map "." 'rmail-beginning-of-message) 988 (define-key map "<" 'rmail-first-message)
990 (define-key rmail-mode-map "/" 'rmail-end-of-message) 989 (define-key map ">" 'rmail-last-message)
991 (define-key rmail-mode-map "<" 'rmail-first-message) 990 (define-key map " " 'scroll-up)
992 (define-key rmail-mode-map ">" 'rmail-last-message) 991 (define-key map "\177" 'scroll-down)
993 (define-key rmail-mode-map " " 'scroll-up) 992 (define-key map "?" 'describe-mode)
994 (define-key rmail-mode-map "\177" 'scroll-down) 993 (define-key map "\C-c\C-s\C-d" 'rmail-sort-by-date)
995 (define-key rmail-mode-map "?" 'describe-mode) 994 (define-key map "\C-c\C-s\C-s" 'rmail-sort-by-subject)
996 (define-key rmail-mode-map "\C-c\C-s\C-d" 'rmail-sort-by-date) 995 (define-key map "\C-c\C-s\C-a" 'rmail-sort-by-author)
997 (define-key rmail-mode-map "\C-c\C-s\C-s" 'rmail-sort-by-subject) 996 (define-key map "\C-c\C-s\C-r" 'rmail-sort-by-recipient)
998 (define-key rmail-mode-map "\C-c\C-s\C-a" 'rmail-sort-by-author) 997 (define-key map "\C-c\C-s\C-c" 'rmail-sort-by-correspondent)
999 (define-key rmail-mode-map "\C-c\C-s\C-r" 'rmail-sort-by-recipient) 998 (define-key map "\C-c\C-s\C-l" 'rmail-sort-by-lines)
1000 (define-key rmail-mode-map "\C-c\C-s\C-c" 'rmail-sort-by-correspondent) 999 (define-key map "\C-c\C-s\C-k" 'rmail-sort-by-labels)
1001 (define-key rmail-mode-map "\C-c\C-s\C-l" 'rmail-sort-by-lines) 1000 (define-key map "\C-c\C-n" 'rmail-next-same-subject)
1002 (define-key rmail-mode-map "\C-c\C-s\C-k" 'rmail-sort-by-labels) 1001 (define-key map "\C-c\C-p" 'rmail-previous-same-subject)
1003 (define-key rmail-mode-map "\C-c\C-n" 'rmail-next-same-subject) 1002
1004 (define-key rmail-mode-map "\C-c\C-p" 'rmail-previous-same-subject)
1005 )
1006 1003
1007(define-key rmail-mode-map [menu-bar] (make-sparse-keymap)) 1004 (define-key map [menu-bar] (make-sparse-keymap))
1005
1006 (define-key map [menu-bar classify]
1007 (cons "Classify" (make-sparse-keymap "Classify")))
1008 1008
1009(define-key rmail-mode-map [menu-bar classify] 1009 (define-key map [menu-bar classify input-menu]
1010 (cons "Classify" (make-sparse-keymap "Classify"))) 1010 nil)
1011 1011
1012(define-key rmail-mode-map [menu-bar classify input-menu] 1012 (define-key map [menu-bar classify output-menu]
1013 nil) 1013 nil)
1014 1014
1015(define-key rmail-mode-map [menu-bar classify output-menu] 1015 (define-key map [menu-bar classify output-body]
1016 nil) 1016 '("Output body to file..." . rmail-output-body-to-file))
1017 1017
1018(define-key rmail-mode-map [menu-bar classify output-body] 1018 (define-key map [menu-bar classify output-inbox]
1019 '("Output body to file..." . rmail-output-body-to-file)) 1019 '("Output..." . rmail-output))
1020 1020
1021(define-key rmail-mode-map [menu-bar classify output-inbox] 1021 (define-key map [menu-bar classify output]
1022 '("Output..." . rmail-output)) 1022 '("Output as seen..." . rmail-output-as-seen))
1023 1023
1024(define-key rmail-mode-map [menu-bar classify output] 1024 (define-key map [menu-bar classify kill-label]
1025 '("Output as seen..." . rmail-output-as-seen)) 1025 '("Kill Label..." . rmail-kill-label))
1026 1026
1027(define-key rmail-mode-map [menu-bar classify kill-label] 1027 (define-key map [menu-bar classify add-label]
1028 '("Kill Label..." . rmail-kill-label)) 1028 '("Add Label..." . rmail-add-label))
1029 1029
1030(define-key rmail-mode-map [menu-bar classify add-label] 1030 (define-key map [menu-bar summary]
1031 '("Add Label..." . rmail-add-label)) 1031 (cons "Summary" (make-sparse-keymap "Summary")))
1032 1032
1033(define-key rmail-mode-map [menu-bar summary] 1033 (define-key map [menu-bar summary senders]
1034 (cons "Summary" (make-sparse-keymap "Summary"))) 1034 '("By Senders..." . rmail-summary-by-senders))
1035 1035
1036(define-key rmail-mode-map [menu-bar summary senders] 1036 (define-key map [menu-bar summary labels]
1037 '("By Senders..." . rmail-summary-by-senders)) 1037 '("By Labels..." . rmail-summary-by-labels))
1038 1038
1039(define-key rmail-mode-map [menu-bar summary labels] 1039 (define-key map [menu-bar summary recipients]
1040 '("By Labels..." . rmail-summary-by-labels)) 1040 '("By Recipients..." . rmail-summary-by-recipients))
1041 1041
1042(define-key rmail-mode-map [menu-bar summary recipients] 1042 (define-key map [menu-bar summary topic]
1043 '("By Recipients..." . rmail-summary-by-recipients)) 1043 '("By Topic..." . rmail-summary-by-topic))
1044 1044
1045(define-key rmail-mode-map [menu-bar summary topic] 1045 (define-key map [menu-bar summary regexp]
1046 '("By Topic..." . rmail-summary-by-topic)) 1046 '("By Regexp..." . rmail-summary-by-regexp))
1047 1047
1048(define-key rmail-mode-map [menu-bar summary regexp] 1048 (define-key map [menu-bar summary all]
1049 '("By Regexp..." . rmail-summary-by-regexp)) 1049 '("All" . rmail-summary))
1050 1050
1051(define-key rmail-mode-map [menu-bar summary all] 1051 (define-key map [menu-bar mail]
1052 '("All" . rmail-summary)) 1052 (cons "Mail" (make-sparse-keymap "Mail")))
1053 1053
1054(define-key rmail-mode-map [menu-bar mail] 1054 (define-key map [menu-bar mail rmail-get-new-mail]
1055 (cons "Mail" (make-sparse-keymap "Mail"))) 1055 '("Get New Mail" . rmail-get-new-mail))
1056 1056
1057(define-key rmail-mode-map [menu-bar mail rmail-get-new-mail] 1057 (define-key map [menu-bar mail lambda]
1058 '("Get New Mail" . rmail-get-new-mail)) 1058 '("----"))
1059 1059
1060(define-key rmail-mode-map [menu-bar mail lambda] 1060 (define-key map [menu-bar mail continue]
1061 '("----")) 1061 '("Continue" . rmail-continue))
1062 1062
1063(define-key rmail-mode-map [menu-bar mail continue] 1063 (define-key map [menu-bar mail resend]
1064 '("Continue" . rmail-continue)) 1064 '("Re-send..." . rmail-resend))
1065 1065
1066(define-key rmail-mode-map [menu-bar mail resend] 1066 (define-key map [menu-bar mail forward]
1067 '("Re-send..." . rmail-resend)) 1067 '("Forward" . rmail-forward))
1068 1068
1069(define-key rmail-mode-map [menu-bar mail forward] 1069 (define-key map [menu-bar mail retry]
1070 '("Forward" . rmail-forward)) 1070 '("Retry" . rmail-retry-failure))
1071 1071
1072(define-key rmail-mode-map [menu-bar mail retry] 1072 (define-key map [menu-bar mail reply]
1073 '("Retry" . rmail-retry-failure)) 1073 '("Reply" . rmail-reply))
1074 1074
1075(define-key rmail-mode-map [menu-bar mail reply] 1075 (define-key map [menu-bar mail mail]
1076 '("Reply" . rmail-reply)) 1076 '("Mail" . rmail-mail))
1077 1077
1078(define-key rmail-mode-map [menu-bar mail mail] 1078 (define-key map [menu-bar delete]
1079 '("Mail" . rmail-mail)) 1079 (cons "Delete" (make-sparse-keymap "Delete")))
1080 1080
1081(define-key rmail-mode-map [menu-bar delete] 1081 (define-key map [menu-bar delete expunge/save]
1082 (cons "Delete" (make-sparse-keymap "Delete"))) 1082 '("Expunge/Save" . rmail-expunge-and-save))
1083 1083
1084(define-key rmail-mode-map [menu-bar delete expunge/save] 1084 (define-key map [menu-bar delete expunge]
1085 '("Expunge/Save" . rmail-expunge-and-save)) 1085 '("Expunge" . rmail-expunge))
1086 1086
1087(define-key rmail-mode-map [menu-bar delete expunge] 1087 (define-key map [menu-bar delete undelete]
1088 '("Expunge" . rmail-expunge)) 1088 '("Undelete" . rmail-undelete-previous-message))
1089 1089
1090(define-key rmail-mode-map [menu-bar delete undelete] 1090 (define-key map [menu-bar delete delete]
1091 '("Undelete" . rmail-undelete-previous-message)) 1091 '("Delete" . rmail-delete-forward))
1092 1092
1093(define-key rmail-mode-map [menu-bar delete delete] 1093 (define-key map [menu-bar move]
1094 '("Delete" . rmail-delete-forward)) 1094 (cons "Move" (make-sparse-keymap "Move")))
1095 1095
1096(define-key rmail-mode-map [menu-bar move] 1096 (define-key map [menu-bar move search-back]
1097 (cons "Move" (make-sparse-keymap "Move"))) 1097 '("Search Back..." . rmail-search-backwards))
1098 1098
1099(define-key rmail-mode-map [menu-bar move search-back] 1099 (define-key map [menu-bar move search]
1100 '("Search Back..." . rmail-search-backwards)) 1100 '("Search..." . rmail-search))
1101 1101
1102(define-key rmail-mode-map [menu-bar move search] 1102 (define-key map [menu-bar move previous]
1103 '("Search..." . rmail-search)) 1103 '("Previous Nondeleted" . rmail-previous-undeleted-message))
1104 1104
1105(define-key rmail-mode-map [menu-bar move previous] 1105 (define-key map [menu-bar move next]
1106 '("Previous Nondeleted" . rmail-previous-undeleted-message)) 1106 '("Next Nondeleted" . rmail-next-undeleted-message))
1107 1107
1108(define-key rmail-mode-map [menu-bar move next] 1108 (define-key map [menu-bar move last]
1109 '("Next Nondeleted" . rmail-next-undeleted-message)) 1109 '("Last" . rmail-last-message))
1110 1110
1111(define-key rmail-mode-map [menu-bar move last] 1111 (define-key map [menu-bar move first]
1112 '("Last" . rmail-last-message)) 1112 '("First" . rmail-first-message))
1113 1113
1114(define-key rmail-mode-map [menu-bar move first] 1114 (define-key map [menu-bar move previous]
1115 '("First" . rmail-first-message)) 1115 '("Previous" . rmail-previous-message))
1116 1116
1117(define-key rmail-mode-map [menu-bar move previous] 1117 (define-key map [menu-bar move next]
1118 '("Previous" . rmail-previous-message)) 1118 '("Next" . rmail-next-message))
1119 1119
1120(define-key rmail-mode-map [menu-bar move next] 1120 map))
1121 '("Next" . rmail-next-message))
1122 1121
1123;; Rmail toolbar 1122;; Rmail toolbar
1124(defvar rmail-tool-bar-map 1123(defvar rmail-tool-bar-map
@@ -1271,7 +1270,7 @@ sets the current buffer's `buffer-file-coding-system' to that of
1271 buffer-file-coding-system))) 1270 buffer-file-coding-system)))
1272 (buffer-swap-text rmail-view-buffer) 1271 (buffer-swap-text rmail-view-buffer)
1273 (setq buffer-file-coding-system coding) 1272 (setq buffer-file-coding-system coding)
1274 (set-buffer-modified-p modp))) 1273 (restore-buffer-modified-p modp)))
1275 1274
1276(defun rmail-buffers-swapped-p () 1275(defun rmail-buffers-swapped-p ()
1277 "Return non-nil if the message collection is in `rmail-view-buffer'." 1276 "Return non-nil if the message collection is in `rmail-view-buffer'."
@@ -1303,10 +1302,7 @@ If so restore the actual mbox message collection."
1303 (make-local-variable 'rmail-buffer) 1302 (make-local-variable 'rmail-buffer)
1304 (setq rmail-buffer (current-buffer)) 1303 (setq rmail-buffer (current-buffer))
1305 (set-buffer-multibyte nil) 1304 (set-buffer-multibyte nil)
1306 (make-local-variable 'rmail-view-buffer) 1305 (with-current-buffer (setq rmail-view-buffer (rmail-generate-viewer-buffer))
1307 (save-excursion
1308 (setq rmail-view-buffer (rmail-generate-viewer-buffer))
1309 (set-buffer rmail-view-buffer)
1310 (setq buffer-undo-list t) 1306 (setq buffer-undo-list t)
1311 (set-buffer-multibyte t) 1307 (set-buffer-multibyte t)
1312 ;; Force C-x C-s write Unix EOLs. 1308 ;; Force C-x C-s write Unix EOLs.
@@ -1391,7 +1387,8 @@ If so restore the actual mbox message collection."
1391 (interactive) 1387 (interactive)
1392 (set-buffer rmail-buffer) 1388 (set-buffer rmail-buffer)
1393 (rmail-expunge t) 1389 (rmail-expunge t)
1394 (rmail-swap-buffers-maybe) 1390 ;; No need to swap buffers: rmail-write-region-annotate takes care of it.
1391 ;; (rmail-swap-buffers-maybe)
1395 (save-buffer) 1392 (save-buffer)
1396 (if (rmail-summary-exists) 1393 (if (rmail-summary-exists)
1397 (rmail-select-summary (set-buffer-modified-p nil))) 1394 (rmail-select-summary (set-buffer-modified-p nil)))
@@ -1944,7 +1941,7 @@ new messages. Return the number of new messages."
1944 limit) 1941 limit)
1945 ;; Detect an empty inbox file. 1942 ;; Detect an empty inbox file.
1946 (unless (= start (point-max)) 1943 (unless (= start (point-max))
1947 ;; Scan the new messages to establish a count and to insure that 1944 ;; Scan the new messages to establish a count and to ensure that
1948 ;; an attribute header is present. 1945 ;; an attribute header is present.
1949 (while (looking-at "From ") 1946 (while (looking-at "From ")
1950 ;; Determine if a new attribute header needs to be added to 1947 ;; Determine if a new attribute header needs to be added to
@@ -1977,9 +1974,9 @@ If MSGNUM is nil, use the current message."
1977 (save-excursion 1974 (save-excursion
1978 ;; ... so it is ok to go to a different buffer. 1975 ;; ... so it is ok to go to a different buffer.
1979 (if (rmail-buffers-swapped-p) (set-buffer rmail-view-buffer)) 1976 (if (rmail-buffers-swapped-p) (set-buffer rmail-view-buffer))
1977 (save-excursion
1980 (save-restriction 1978 (save-restriction
1981 (widen) 1979 (widen)
1982 (save-excursion
1983 (goto-char msgbeg) 1980 (goto-char msgbeg)
1984 (setq end (search-forward "\n\n" nil t)) 1981 (setq end (search-forward "\n\n" nil t))
1985 (if end 1982 (if end
@@ -2001,9 +1998,9 @@ If MSGNUM is nil, use the current message."
2001 (save-excursion 1998 (save-excursion
2002 ;; ... so it is ok to go to a different buffer. 1999 ;; ... so it is ok to go to a different buffer.
2003 (if (rmail-buffers-swapped-p) (set-buffer rmail-view-buffer)) 2000 (if (rmail-buffers-swapped-p) (set-buffer rmail-view-buffer))
2001 (save-excursion
2004 (save-restriction 2002 (save-restriction
2005 (widen) 2003 (widen)
2006 (save-excursion
2007 (goto-char msgbeg) 2004 (goto-char msgbeg)
2008 (setq end (search-forward "\n\n" nil t)) 2005 (setq end (search-forward "\n\n" nil t))
2009 (if end (setq end (1- end))) 2006 (if end (setq end (1- end)))
@@ -2117,9 +2114,9 @@ change; nil means current message."
2117 (save-excursion 2114 (save-excursion
2118 ;; ... so it is ok to go to a different buffer. 2115 ;; ... so it is ok to go to a different buffer.
2119 (if (rmail-buffers-swapped-p) (set-buffer rmail-view-buffer)) 2116 (if (rmail-buffers-swapped-p) (set-buffer rmail-view-buffer))
2117 (save-excursion
2120 (save-restriction 2118 (save-restriction
2121 (widen) 2119 (widen)
2122 (save-excursion
2123 ;; Determine if the current state is the desired state. 2120 ;; Determine if the current state is the desired state.
2124 (goto-char msgbeg) 2121 (goto-char msgbeg)
2125 (save-excursion 2122 (save-excursion
@@ -2204,13 +2201,12 @@ If MSGNUM is nil, use the current message."
2204 (save-excursion 2201 (save-excursion
2205 ;; ... so it is ok to go to a different buffer. 2202 ;; ... so it is ok to go to a different buffer.
2206 (if (rmail-buffers-swapped-p) (set-buffer rmail-view-buffer)) 2203 (if (rmail-buffers-swapped-p) (set-buffer rmail-view-buffer))
2204 (save-excursion
2207 (save-restriction 2205 (save-restriction
2208 (widen) 2206 (widen)
2209 (save-excursion
2210 (goto-char msgbeg) 2207 (goto-char msgbeg)
2211 (save-restriction
2212 (narrow-to-region msgbeg msgend) 2208 (narrow-to-region msgbeg msgend)
2213 (apply function args))))))))) 2209 (apply function args))))))))
2214 2210
2215(defun rmail-widen-to-current-msgbeg (function) 2211(defun rmail-widen-to-current-msgbeg (function)
2216 "Call FUNCTION with point at start of internal data of current message. 2212 "Call FUNCTION with point at start of internal data of current message.
@@ -2462,6 +2458,7 @@ N defaults to the current message."
2462 (interactive "p") 2458 (interactive "p")
2463 (or (eq major-mode 'rmail-mode) 2459 (or (eq major-mode 'rmail-mode)
2464 (switch-to-buffer rmail-buffer)) 2460 (switch-to-buffer rmail-buffer))
2461 ;; FIXME: Why do we swap the raw data back in?
2465 (rmail-swap-buffers-maybe) 2462 (rmail-swap-buffers-maybe)
2466 (rmail-maybe-set-message-counters) 2463 (rmail-maybe-set-message-counters)
2467 (widen) 2464 (widen)
@@ -2675,8 +2672,7 @@ to be used to fix messages encoded with 8-bit encodings, such as
2675iso-8859, koi8-r, etc." 2672iso-8859, koi8-r, etc."
2676 (interactive "zCoding system for re-decoding this message: ") 2673 (interactive "zCoding system for re-decoding this message: ")
2677 (when (not rmail-enable-mime) 2674 (when (not rmail-enable-mime)
2678 (save-excursion 2675 (with-current-buffer rmail-buffer
2679 (set-buffer rmail-buffer)
2680 (rmail-swap-buffers-maybe) 2676 (rmail-swap-buffers-maybe)
2681 (save-restriction 2677 (save-restriction
2682 (widen) 2678 (widen)
@@ -3109,8 +3105,7 @@ If N is negative, go forwards instead."
3109 (rmail-show-message-maybe msg)) 3105 (rmail-show-message-maybe msg))
3110 (rmail-set-attribute rmail-deleted-attr-index nil) 3106 (rmail-set-attribute rmail-deleted-attr-index nil)
3111 (if (rmail-summary-exists) 3107 (if (rmail-summary-exists)
3112 (save-excursion 3108 (with-current-buffer rmail-summary-buffer
3113 (set-buffer rmail-summary-buffer)
3114 (rmail-summary-mark-undeleted msg))) 3109 (rmail-summary-mark-undeleted msg)))
3115 (rmail-maybe-display-summary)))) 3110 (rmail-maybe-display-summary))))
3116 3111
@@ -3407,8 +3402,7 @@ use \\[mail-yank-original] to yank the original message into it."
3407This is use in the send-actions for message buffers. 3402This is use in the send-actions for message buffers.
3408MSGNUM-LIST is a list of the form (MSGNUM) 3403MSGNUM-LIST is a list of the form (MSGNUM)
3409which is an element of rmail-msgref-vector." 3404which is an element of rmail-msgref-vector."
3410 (save-excursion 3405 (with-current-buffer buffer
3411 (set-buffer buffer)
3412 (if (car msgnum-list) 3406 (if (car msgnum-list)
3413 (rmail-set-attribute attribute t (car msgnum-list))))) 3407 (rmail-set-attribute attribute t (car msgnum-list)))))
3414 3408
@@ -3816,7 +3810,8 @@ This has an effect only if a summary buffer exists."
3816 (remove-hook 'rmail-show-message-hook 'rmail-fontify-message t) 3810 (remove-hook 'rmail-show-message-hook 'rmail-fontify-message t)
3817 (remove-text-properties (point-min) (point-max) '(rmail-fontified nil)) 3811 (remove-text-properties (point-min) (point-max) '(rmail-fontified nil))
3818 (font-lock-default-unfontify-buffer) 3812 (font-lock-default-unfontify-buffer)
3819 (and (not modified) (buffer-modified-p) (set-buffer-modified-p nil))))) 3813 (and (not modified) (buffer-modified-p)
3814 (restore-buffer-modified-p nil)))))
3820 3815
3821(defun rmail-fontify-message () 3816(defun rmail-fontify-message ()
3822 ;; Fontify the current message if it is not already fontified. 3817 ;; Fontify the current message if it is not already fontified.
@@ -3829,7 +3824,8 @@ This has an effect only if a summary buffer exists."
3829 (save-match-data 3824 (save-match-data
3830 (add-text-properties (point-min) (point-max) '(rmail-fontified t)) 3825 (add-text-properties (point-min) (point-max) '(rmail-fontified t))
3831 (font-lock-fontify-region (point-min) (point-max)) 3826 (font-lock-fontify-region (point-min) (point-max))
3832 (and (not modified) (buffer-modified-p) (set-buffer-modified-p nil))))))) 3827 (and (not modified) (buffer-modified-p)
3828 (restore-buffer-modified-p nil)))))))
3833 3829
3834;;; Speedbar support for RMAIL files. 3830;;; Speedbar support for RMAIL files.
3835(eval-when-compile (require 'speedbar)) 3831(eval-when-compile (require 'speedbar))
@@ -3875,8 +3871,7 @@ Click on the address under Reply to: to reply to this person.
3875Under Folders: Click a name to read it, or on the <M> to move the 3871Under Folders: Click a name to read it, or on the <M> to move the
3876current message into that RMAIL folder." 3872current message into that RMAIL folder."
3877 (let ((from nil)) 3873 (let ((from nil))
3878 (save-excursion 3874 (with-current-buffer buffer
3879 (set-buffer buffer)
3880 (goto-char (point-min)) 3875 (goto-char (point-min))
3881 (if (not (re-search-forward "^Reply-To: " nil t)) 3876 (if (not (re-search-forward "^Reply-To: " nil t))
3882 (if (not (re-search-forward "^From:? " nil t)) 3877 (if (not (re-search-forward "^From:? " nil t))
@@ -3896,8 +3891,8 @@ current message into that RMAIL folder."
3896 'rmail-speedbar-button 'rmail-reply)) 3891 'rmail-speedbar-button 'rmail-reply))
3897 (insert "Folders:\n") 3892 (insert "Folders:\n")
3898 (let* ((case-fold-search nil) 3893 (let* ((case-fold-search nil)
3899 (df (directory-files (save-excursion (set-buffer buffer) 3894 (df (directory-files (with-current-buffer buffer
3900 default-directory) 3895 default-directory)
3901 nil rmail-speedbar-match-folder-regexp))) 3896 nil rmail-speedbar-match-folder-regexp)))
3902 (while df 3897 (while df
3903 (speedbar-insert-button "<M>" 'speedbar-button-face 'highlight 3898 (speedbar-insert-button "<M>" 'speedbar-button-face 'highlight