unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Markus Rost <rost@math.uni-bielefeld.de>
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: lekktu@gmail.com, 4655@emacsbugs.donarmstrong.com
Subject: bug#4655: 23.1.50; buffer-swap-text oddity
Date: Thu,  8 Oct 2009 18:48:39 +0200 (CEST)	[thread overview]
Message-ID: <20091008164839.BAC66EFE6B@sonic02.math.uni-bielefeld.de> (raw)
In-Reply-To: <jwv63arwazq.fsf-monnier+emacsbugreports@gnu.org> (message from Stefan Monnier on Wed, 07 Oct 2009 10:29:11 -0400)

A follow up to my previous message:

If you look at the end of rmail-cease-edit:

    (save-excursion
      (rmail-show-message)
      (rmail-toggle-header (if pruned 1 0))))
  (run-hooks 'rmail-mode-hook))

the question arises in which buffer rmail-mode-hook should be run?
One may check with

(add-hook 'rmail-mode-hook
	  (lambda () (message "foo: %s" (current-buffer))))

that currently it runs in rmail-view-buffer, which is perhaps not what
one expects.  Changing to

    (rmail-show-message)
    (save-excursion
      (rmail-toggle-header (if pruned 1 0))))
  (run-hooks 'rmail-mode-hook))

is probably OK.  That would be in line with Stefan's point:

>  5- most uses of save-excursion are wrong,

=======

Here are more issues related to the usage of buffer-swap-text:

I tried to fix

<URL:http://lists.gnu.org/archive/html/bug-gnu-emacs/2009-10/msg00052.html>
<URL:http://lists.gnu.org/archive/html/bug-gnu-emacs/2009-10/msg00054.html>

(I think this bug should be fixed before the next release:  The mbox
files should not be corrupted.)

with the patch below.  See also the thread of

<URL:http://lists.gnu.org/archive/html/emacs-devel/2008-10/msg00468.html>

It seems to work, except that after a save ('s' in Rmail) the
rmail-buffer gets a wrong value of buffer-file-coding-system (to be
seen in the mode line).  Only temporarily, switching back and forth to
another message in Rmail restores the correct value of
buffer-file-coding-system.

After further debugging, it turned out that the problem sits in

;; 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))
    (set-buffer rmail-view-buffer)
    (widen)
    nil))

Namely, when rmail-expunge-and-save calls save-buffer, then, with
rmail-write-region-annotate in write-region-annotate-functions,
save-buffer and basic-save-buffer* write the rmail-view-buffer to the
file (which is correct) but then set the buffer-file-coding-system to
last-coding-system-used in the rmail-buffer (which is not correct).

It seems that generally write-region-annotate-functions should not
change the buffer to be written.  (What if arg START of write-region
is a buffer position?)


===File ~/.emacs.d/rmail/rmail23/bug/rmail-swap.diff========
*** rmail.el	06 Oct 2009 13:20:10 +0200	1.554
--- rmail.el	08 Oct 2009 14:07:01 +0200	
***************
*** 1306,1320 ****
  
  (defun rmail-swap-buffers ()
    "Swap text between current buffer and `rmail-view-buffer'.
! 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
  	 (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)))
  
  (defun rmail-buffers-swapped-p ()
--- 1306,1322 ----
  
  (defun rmail-swap-buffers ()
    "Swap text between current buffer and `rmail-view-buffer'.
! This function preserves the current buffer's modified flag and
! also swaps the value of `buffer-file-coding-system'."
    (let ((modp (buffer-modified-p))
+ 	(coding0 buffer-file-coding-system)
  	(coding
  	 (with-current-buffer rmail-view-buffer
  	   buffer-file-coding-system)))
      (buffer-swap-text rmail-view-buffer)
      (setq buffer-file-coding-system coding)
+     (with-current-buffer rmail-view-buffer
+       (setq buffer-file-coding-system coding0))
      (restore-buffer-modified-p modp)))
  
  (defun rmail-buffers-swapped-p ()
============================================================





  reply	other threads:[~2009-10-08 16:48 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <jwv3a2eiia3.fsf-monnier+emacs@gnu.org>
2009-10-06 18:46 ` bug#4655: 23.1.50; buffer-swap-text oddity Markus Rost
2009-10-07  4:01   ` Juanma Barranquero
2009-10-07  5:41     ` Stefan Monnier
2009-10-07  8:53       ` Markus Rost
2009-10-07 10:07       ` Juanma Barranquero
2009-10-07 14:29         ` Stefan Monnier
2009-10-08 16:48           ` Markus Rost [this message]
2011-07-13 14:08           ` Lars Magne Ingebrigtsen
2016-07-11  1:58             ` npostavs
2016-07-11 14:37               ` Eli Zaretskii
2016-07-11 18:50                 ` Markus Rost
2016-07-11 19:07                   ` Dmitry Gutov
2016-07-12  1:58                     ` npostavs
2016-07-12  5:16                       ` Eli Zaretskii
2016-07-13 23:50                         ` npostavs
2016-07-14 15:03                           ` Eli Zaretskii
2016-07-15  0:05                             ` npostavs
2010-01-10  7:36   ` bug#5273: marked as done (23.1; format-alist encode vs write-region-post-annotation-function) Emacs bug Tracking System
2010-01-13  0:45   ` bug#5256: marked as done (conjunct formation should follow input sequence when inserting text) Emacs bug Tracking System
2010-01-13  0:49   ` bug#5265: marked as done (23.1.90; vc - can't reread redirected stdin for log message) Emacs bug Tracking System
2010-01-14  1:22   ` bug#5276: marked as done (23.1; Doc string of bookmark-bmenu-execute-deletions) Emacs bug Tracking System
2010-01-16 20:05   ` bug#5267: 23.1; doc string of defstruct Chong Yidong
2010-01-16 21:39   ` bug#5279: 23.1; VC: should set LC_MESSAGES to C (with patch) Chong Yidong
2010-05-13 19:20   ` bug#5284: 23.1; gnus-summary-expire-thread does not work Glenn Morris
2010-05-24 19:53   ` bug#5270: [PATCH] * lisp/image-dired.el (image-dired-dired-insert-marked-thumbs) Insert thumbnails before file names of marked files in the dired buffer Thierry Volpiatto
2010-05-25 15:49     ` Juri Linkov
2010-05-25 16:59       ` Thierry Volpiatto
2010-05-25 17:46         ` Juri Linkov
2010-06-30 20:35   ` bug#5281: 23.1; xml-parse-region causes infinite loops if the region is not well-formed XML Chong Yidong
2009-12-29 18:19 bug#5284: 23.1; gnus-summary-expire-thread does not work Tom Tromey
2010-05-11  6:04 ` Andreas Seltenreich
     [not found]   ` <mailman.7.1273778942.8369.bug-gnu-emacs@gnu.org>
2010-06-30 21:35     ` Ted Zlatanov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20091008164839.BAC66EFE6B@sonic02.math.uni-bielefeld.de \
    --to=rost@math.uni-bielefeld.de \
    --cc=4655@emacsbugs.donarmstrong.com \
    --cc=lekktu@gmail.com \
    --cc=monnier@iro.umontreal.ca \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).