]> git.eshelyaron.com Git - emacs.git/commitdiff
(Finsert_file_contents): Consult CHARS_MODIFF to tell
authorMartin Rudalics <rudalics@gmx.at>
Fri, 24 Aug 2007 05:36:39 +0000 (05:36 +0000)
committerMartin Rudalics <rudalics@gmx.at>
Fri, 24 Aug 2007 05:36:39 +0000 (05:36 +0000)
whether decoding has modified buffer contents.

src/ChangeLog
src/fileio.c

index fca37df9e8d6c8707d6ed7cc65244f7569089025..164a6c19d6058518279f5a50f1f48293d01bca30 100644 (file)
@@ -1,3 +1,8 @@
+2007-08-24  Martin Rudalics  <rudalics@gmx.at>
+
+       * fileio.c (Finsert_file_contents): Consult CHARS_MODIFF to tell
+       whether decoding has modified buffer contents.
+
 2007-08-24  Jason Rumney  <jasonr@gnu.org>
 
        * image.c [HAVE_NTGUI]: Define dynamic loaded functions for SVG.
index 45eb7d29f91855332f56cb25b50a99766b84e9b9..62331122a249b21ab9d54d514a1fdab18ff21ca5 100644 (file)
@@ -4733,14 +4733,21 @@ variable `last-coding-system-used' to the coding system actually used.  */)
          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 @@ variable `last-coding-system-used' to the coding system actually used.  */)
              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);
                }
            }