changeset 82809:496cd44c3983

(Finsert_file_contents): Consult CHARS_MODIFF to tell whether decoding has modified buffer contents.
author Martin Rudalics <rudalics@gmx.at>
date Fri, 24 Aug 2007 05:35:24 +0000
parents 6e5814967ffb
children 1fce1579a68b
files src/fileio.c
diffstat 1 files changed, 21 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/fileio.c	Fri Aug 24 05:27:22 2007 +0000
+++ b/src/fileio.c	Fri Aug 24 05:35:24 2007 +0000
@@ -4733,14 +4733,21 @@
 	  int opoint = PT;
 	  int opoint_byte = PT_BYTE;
 	  int oinserted = ZV - BEGV;
+	  int ochars_modiff = CHARS_MODIFF;
 	  
 	  TEMP_SET_PT_BOTH (BEGV, BEGV_BYTE); 
 	  insval = call3 (Qformat_decode,
 			  Qnil, make_number (oinserted), visit);
 	  CHECK_NUMBER (insval);
-	  if (XINT (insval) == oinserted)
+	  if (ochars_modiff == CHARS_MODIFF)
+	    /* format_decode didn't modify buffer's characters => move
+	       point back to position before inserted text and leave
+	       value of inserted alone. */
 	    SET_PT_BOTH (opoint, opoint_byte);
-	  inserted = XFASTINT (insval);
+	  else
+	    /* format_decode modified buffer's characters => consider
+	       entire buffer changed and leave point at point-min. */
+	    inserted = XFASTINT (insval);
 	}
 
       /* For consistency with format-decode call these now iff inserted > 0
@@ -4763,15 +4770,24 @@
 	      int opoint = PT;
 	      int opoint_byte = PT_BYTE;
 	      int oinserted = ZV - BEGV;
-
+	      int ochars_modiff = CHARS_MODIFF;
+	      
 	      TEMP_SET_PT_BOTH (BEGV, BEGV_BYTE);
 	      insval = call1 (XCAR (p), make_number (oinserted));
 	      if (!NILP (insval))
 		{
 		  CHECK_NUMBER (insval);
-		  if (XINT (insval) == oinserted)
+		  if (ochars_modiff == CHARS_MODIFF)
+		    /* after_insert_file_functions didn't modify
+		       buffer's characters => move point back to
+		       position before inserted text and leave value of
+		       inserted alone. */
 		    SET_PT_BOTH (opoint, opoint_byte);
-		  inserted = XFASTINT (insval);
+		  else
+		    /* after_insert_file_functions did modify buffer's
+	               characters => consider entire buffer changed and
+	               leave point at point-min. */
+		    inserted = XFASTINT (insval);
 		}
 	    }