]> git.eshelyaron.com Git - emacs.git/commitdiff
* src/fileio.c (Finsert_file_contents): Preserve undo info when reverting
authorStefan Monnier <monnier@iro.umontreal.ca>
Wed, 29 May 2013 01:07:53 +0000 (21:07 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Wed, 29 May 2013 01:07:53 +0000 (21:07 -0400)
a buffer.

Fixes: debbugs:8447
src/ChangeLog
src/fileio.c

index b1f13e62b4061c3b7d72b9f890db087f456c558e..4b1281c17e629e1813c2a6f1694baf65cb439c0e 100644 (file)
@@ -1,3 +1,8 @@
+2013-05-29  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * fileio.c (Finsert_file_contents): Preserve undo info when reverting
+       a buffer (bug#8447).
+
 2013-05-27  Eli Zaretskii  <eliz@gnu.org>
 
        * xdisp.c (pos_visible_p): When CHARPOS is displayed frrom a
@@ -25,8 +30,8 @@
        (struct MonitorInfo): New struct.
        (free_monitors, make_monitor_attribute_list): Declare.
 
-       * frame.c (Qgeometry, Qworkarea, Qmm_size, Qframes, Qsource): New
-       Lisp_Object:s.
+       * frame.c (Qgeometry, Qworkarea, Qmm_size, Qframes, Qsource):
+       New Lisp_Object:s.
        (free_monitors, make_monitor_attribute_list): New functions.
        (syms_of_frame): DEFSYM Qgeometry, Qworkarea, Qmm_size, Qframes,
        Qsource.
index f20721251e636c37b51f0ea7e73d4b3aed5483b6..e2b1007fb0b8fb39d8032a3d8a3748779b75a728 100644 (file)
@@ -3506,6 +3506,11 @@ by calling `format-decode', which see.  */)
   bool set_coding_system = 0;
   Lisp_Object coding_system;
   bool read_quit = 0;
+  /* If the undo log only contains the insertion, there's no point
+     keeping it.  It's typically when we first fill a file-buffer.  */
+  bool empty_undo_list_p
+    = (!NILP (visit) && NILP (BVAR (current_buffer, undo_list))
+       && BEG == Z);
   Lisp_Object old_Vdeactivate_mark = Vdeactivate_mark;
   bool we_locked_file = 0;
   bool deferred_remove_unwind_protect = 0;
@@ -4108,6 +4113,7 @@ by calling `format-decode', which see.  */)
        {
          del_range_byte (same_at_start, same_at_end, 0);
          temp = GPT;
+         eassert (same_at_start == GPT_BYTE);
          same_at_start = GPT_BYTE;
        }
       else
@@ -4120,6 +4126,7 @@ by calling `format-decode', which see.  */)
        = buf_bytepos_to_charpos (XBUFFER (conversion_buffer),
                                  same_at_start - BEGV_BYTE
                                  + BUF_BEG_BYTE (XBUFFER (conversion_buffer)));
+      eassert (same_at_start_charpos == temp - (BEGV - BEG));
       inserted_chars
        = (buf_bytepos_to_charpos (XBUFFER (conversion_buffer),
                                   same_at_start + inserted - BEGV_BYTE
@@ -4404,7 +4411,7 @@ by calling `format-decode', which see.  */)
 
   if (!NILP (visit))
     {
-      if (!EQ (BVAR (current_buffer, undo_list), Qt) && !nochange)
+      if (empty_undo_list_p)
        bset_undo_list (current_buffer, Qnil);
 
       if (NILP (handler))
@@ -4546,7 +4553,7 @@ by calling `format-decode', which see.  */)
          p = XCDR (p);
        }
 
-      if (NILP (visit))
+      if (!empty_undo_list_p)
        {
          bset_undo_list (current_buffer, old_undo);
          if (CONSP (old_undo) && inserted != old_inserted)