]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix 2013-03-28T02:41:05Z!dmantipov@yandex.ru which brokes Fbuffer_swap_text.
authorDmitry Antipov <dmantipov@yandex.ru>
Thu, 28 Mar 2013 09:25:25 +0000 (13:25 +0400)
committerDmitry Antipov <dmantipov@yandex.ru>
Thu, 28 Mar 2013 09:25:25 +0000 (13:25 +0400)
* buffer.c (Fbuffer_swap_text): Adjust window start markers.
Fix comment.

src/ChangeLog
src/buffer.c

index 1e47fa0e1b62a04509907dab6dc38a584daa2c1e..fcc8bb5eaa38b7bbeb25359b32f3e2fba803e20d 100644 (file)
@@ -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  <monnier@iro.umontreal.ca>
 
index aa3fcf8c234026fe9d06331b183b672f1ded1a5a..d02bcf7eceb451f5e68cdeb14e736ae48574e9c1 100644 (file)
@@ -2394,8 +2394,9 @@ DEFUN ("buffer-swap-text", Fbuffer_swap_text, Sbuffer_swap_text,
           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 @@ DEFUN ("buffer-swap-text", Fbuffer_swap_text, Sbuffer_swap_text,
                       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);
       }
   }