]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix bug #15973 with erratic cursor motion after reverting a buffer.
authorEli Zaretskii <eliz@gnu.org>
Wed, 27 Nov 2013 16:08:53 +0000 (18:08 +0200)
committerEli Zaretskii <eliz@gnu.org>
Wed, 27 Nov 2013 16:08:53 +0000 (18:08 +0200)
 src/fileio.c (Finsert_file_contents): Invalidate buffer caches when
 deleting portions of the buffer under non-nil REPLACE argument.

src/ChangeLog
src/fileio.c

index b43f758cec458aa8a84f8b590fdd6366fab56127..89d1fb307745d5f7382e7b24383127e443c2bef4 100644 (file)
@@ -1,5 +1,9 @@
 2013-11-27  Eli Zaretskii  <eliz@gnu.org>
 
+       * fileio.c (Finsert_file_contents): Invalidate buffer caches when
+       deleting portions of the buffer under non-nil REPLACE argument.
+       (Bug#15973)
+
        * w32notify.c (Fw32notify_add_watch): If the argument FILE is a
        directory, watch it and not its parent.
        (add_watch): Allow empty string in FILE.
index 07d3601618669ab801ca4481731894cab0cde124..a0603b490d9f523c6d52ae71474bb21002eacac3 100644 (file)
@@ -3858,6 +3858,9 @@ by calling `format-decode', which see.  */)
          beg_offset += same_at_start - BEGV_BYTE;
          end_offset -= ZV_BYTE - same_at_end;
 
+         invalidate_buffer_caches (current_buffer,
+                                   BYTE_TO_CHAR (same_at_start),
+                                   BYTE_TO_CHAR (same_at_end));
          del_range_byte (same_at_start, same_at_end, 0);
          /* Insert from the file at the proper position.  */
          temp = BYTE_TO_CHAR (same_at_start);
@@ -3968,7 +3971,12 @@ by calling `format-decode', which see.  */)
        {
          /* Truncate the buffer to the size of the file.  */
          if (same_at_start != same_at_end)
-           del_range_byte (same_at_start, same_at_end, 0);
+           {
+             invalidate_buffer_caches (current_buffer,
+                                       BYTE_TO_CHAR (same_at_start),
+                                       BYTE_TO_CHAR (same_at_end));
+             del_range_byte (same_at_start, same_at_end, 0);
+           }
          inserted = 0;
 
          unbind_to (this_count, Qnil);
@@ -4016,6 +4024,9 @@ by calling `format-decode', which see.  */)
 
       if (same_at_end != same_at_start)
        {
+         invalidate_buffer_caches (current_buffer,
+                                   BYTE_TO_CHAR (same_at_start),
+                                   BYTE_TO_CHAR (same_at_end));
          del_range_byte (same_at_start, same_at_end, 0);
          temp = GPT;
          eassert (same_at_start == GPT_BYTE);