changeset 39007:f3d3950ed951

(Finsert_file_contents): Undo change of 2001-08-27.
author Gerd Moellmann <gerd@gnu.org>
date Wed, 29 Aug 2001 10:31:51 +0000
parents 47ac337b9bde
children a2722f5391fe
files src/fileio.c
diffstat 1 files changed, 15 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/fileio.c	Wed Aug 29 09:31:50 2001 +0000
+++ b/src/fileio.c	Wed Aug 29 10:31:51 2001 +0000
@@ -4350,10 +4350,21 @@
 	  || coding.type == coding_type_raw_text))
     {
       /* Visiting a file with these coding systems should always make
-	 the buffer unibyte.  The call to Fset_buffer_multibyte
-	 ensures that existing markers etc are converted to unibyte,
-	 too.  */
-      Fset_buffer_multibyte (Qnil);
+	 the buffer unibyte.  If we happen to be replacing text in a
+	 multibyte buffer (this happens when reverting an RMAIL
+	 buffer), positions in the buffer, markers etc. may have byte
+	 positions != character positions, so just setting
+	 enable_multibyte_characters to nil doesn't suffice.  */
+      if (!NILP (replace)
+	  && !NILP (current_buffer->enable_multibyte_characters))
+	Fset_buffer_multibyte (Qnil);
+      else
+	/* We cannot Fset_buffer_multibyte(nil) here.  When we visit a
+	   file literally in a multibyte buffer, a call to
+	   Fset_buffer_multibyte would change character positions,
+	   although the buffer has unibyte contents, and that's wrong,
+	   of course.  */
+	current_buffer->enable_multibyte_characters = Qnil;
       coding.dst_multibyte = 0;
     }