]> git.eshelyaron.com Git - emacs.git/commitdiff
Prevent save-buffer in Rmail buffers from using the coding-system
authorEli Zaretskii <eliz@gnu.org>
Mon, 7 Dec 2009 19:21:57 +0000 (19:21 +0000)
committerEli Zaretskii <eliz@gnu.org>
Mon, 7 Dec 2009 19:21:57 +0000 (19:21 +0000)
of the current message, and from clobbering the encoding mnemonics
in the mode line (Bug#4623).

(rmail-swap-buffers): Swap encoding and modified flag, too.
(rmail-message-encoding): New variable.
(rmail-write-region-annotate): Record the encoding of the current message
in rmail-message-encoding.
(rmail-after-save-hook): New function, restores the encoding of the current
message after the message collection is saved.

lisp/ChangeLog
lisp/mail/rmail.el

index 0109630543772d505d0e1f0c554c098594b1dd27..9a13c3d51d8f0447a417faad4940d8688ae6130e 100644 (file)
@@ -1,3 +1,17 @@
+2009-12-07  Eli Zaretskii  <eliz@gnu.org>
+
+       Prevent save-buffer in Rmail buffers from using the coding-system
+       of the current message, and from clobbering the encoding mnemonics
+       in the mode line (Bug#4623).
+
+       * mail/rmail.el (rmail-swap-buffers): Swap encoding and modified
+       flag, too.
+       (rmail-message-encoding): New variable.
+       (rmail-write-region-annotate): Record the encoding of the current
+       message in rmail-message-encoding.
+       (rmail-after-save-hook): New function, restores the encoding of
+       the current message after the message collection is saved.
+
 2009-12-07  Juri Linkov  <juri@jurta.org>
 
        * progmodes/grep.el (grep-read-files): Use `completing-read'
index 18fd1f6f727593a734d4c48b2113b3894d576f60..21be36fae388f824037250c7fcc84a833bf5586b 100644 (file)
@@ -1316,13 +1316,19 @@ Create the buffer if necessary."
 This function preserves the current buffer's modified flag, and also
 sets the current buffer's `buffer-file-coding-system' to that of
 `rmail-view-buffer'."
-  (let ((modp (buffer-modified-p))
-       (coding
+  (let ((modp-this (buffer-modified-p))
+       (modp-that
+        (with-current-buffer rmail-view-buffer (buffer-modified-p)))
+       (coding-this buffer-file-coding-system)
+       (coding-that
         (with-current-buffer rmail-view-buffer
           buffer-file-coding-system)))
     (buffer-swap-text rmail-view-buffer)
-    (setq buffer-file-coding-system coding)
-    (restore-buffer-modified-p modp)))
+    (setq buffer-file-coding-system coding-that)
+    (with-current-buffer rmail-view-buffer
+      (setq buffer-file-coding-system coding-this)
+      (restore-buffer-modified-p modp-that))
+    (restore-buffer-modified-p modp-this)))
 
 (defun rmail-buffers-swapped-p ()
   "Return non-nil if the message collection is in `rmail-view-buffer'."
@@ -4179,16 +4185,31 @@ encoded string (and the same mask) will decode the string."
 (add-to-list 'desktop-buffer-mode-handlers
             '(rmail-mode . rmail-restore-desktop-buffer))
 
+;; We use this to record the encoding of the current message before
+;; saving the message collection.
+(defvar rmail-message-encoding nil)
+
 ;; Used in `write-region-annotate-functions' to write rmail files.
 (defun rmail-write-region-annotate (start end)
   (when (and (null start) (rmail-buffers-swapped-p))
+    (setq rmail-message-encoding buffer-file-coding-system)
     (set-buffer rmail-view-buffer)
-    ;; Prevent viewing different messages from messing up the coding. (Bug#4623)
-    ;; FIXME is there a better solution?
-    (set (make-local-variable 'coding-system-for-write) 'no-conversion)
     (widen)
     nil))
 
+;; Used to restore the encoding of the buffer where we show the
+;; current message, after we save the message collection.  This is
+;; needed because rmail-write-region-annotate switches buffers behind
+;; save-file's back, with the side effect that last-coding-system-used
+;; is assigned to buffer-file-coding-system of the wrong buffer.
+(defun rmail-after-save-hook ()
+  (if (or (eq rmail-view-buffer (current-buffer))
+         (eq rmail-buffer (current-buffer)))
+      (with-current-buffer
+         (if (rmail-buffers-swapped-p) rmail-buffer rmail-view-buffer)
+       (setq buffer-file-coding-system rmail-message-encoding))))
+(add-hook 'after-save-hook 'rmail-after-save-hook)
+
 \f
 ;;; Start of automatically extracted autoloads.
 \f