emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/trunk r112168: Fix commit 112164 which brok


From: Dmitry Antipov
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r112168: Fix commit 112164 which brokes Fbuffer_swap_text.
Date: Thu, 28 Mar 2013 13:25:25 +0400
User-agent: Bazaar (2.5.0)

------------------------------------------------------------
revno: 112168
committer: Dmitry Antipov <address@hidden>
branch nick: trunk
timestamp: Thu 2013-03-28 13:25:25 +0400
message:
  Fix commit 112164 which brokes Fbuffer_swap_text.
  * buffer.c (Fbuffer_swap_text): Adjust window start markers.
  Fix comment.
modified:
  src/ChangeLog
  src/buffer.c
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2013-03-28 09:18:16 +0000
+++ b/src/ChangeLog     2013-03-28 09:25:25 +0000
@@ -17,6 +17,8 @@
        which is verified by eassert.
        * editfns.c (save_excursion_save): Do not assume that
        selected_window always displays the buffer.
+       * buffer.c (Fbuffer_swap_text): Adjust window start markers.
+       Fix comment.
 
 2013-03-27  Stefan Monnier  <address@hidden>
 

=== modified file 'src/buffer.c'
--- a/src/buffer.c      2013-01-19 20:04:33 +0000
+++ b/src/buffer.c      2013-03-28 09:25:25 +0000
@@ -2394,8 +2394,9 @@
           BUF_MARKERS(buf) should either be for `buf' or dead.  */
        eassert (!m->buffer);
   }
-  { /* Some of the C code expects that w->buffer == w->pointm->buffer.
-       So since we just swapped the markers between the two buffers, we need
+  { /* Some of the C code expects that both window markers of a
+       live window points to that window's buffer.  So since we
+       just swapped the markers between the two buffers, we need
        to undo the effect of this swap for window markers.  */
     Lisp_Object w = Fselected_window (), ws = Qnil;
     Lisp_Object buf1, buf2;
@@ -2411,6 +2412,13 @@
                       make_number
                       (BUF_BEGV (XBUFFER (XWINDOW (w)->buffer))),
                       XWINDOW (w)->buffer);
+       if (MARKERP (XWINDOW (w)->start)
+           && (EQ (XWINDOW (w)->buffer, buf1)
+               || EQ (XWINDOW (w)->buffer, buf2)))
+         Fset_marker (XWINDOW (w)->start,
+                      make_number
+                      (XBUFFER (XWINDOW (w)->buffer)->last_window_start),
+                      XWINDOW (w)->buffer);
        w = Fnext_window (w, Qt, Qt);
       }
   }


reply via email to

[Prev in Thread] Current Thread [Next in Thread]