From: Dmitry Antipov Date: Thu, 28 Mar 2013 09:25:25 +0000 (+0400) Subject: Fix 2013-03-28T02:41:05Z!dmantipov@yandex.ru which brokes Fbuffer_swap_text. X-Git-Tag: emacs-24.3.90~173^2^2~42^2~45^2~387^2~2026^2~526^2~59 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=c7f53895b9e314345c08f000751a863bf78f7e18;p=emacs.git Fix 2013-03-28T02:41:05Z!dmantipov@yandex.ru which brokes Fbuffer_swap_text. * buffer.c (Fbuffer_swap_text): Adjust window start markers. Fix comment. --- diff --git a/src/ChangeLog b/src/ChangeLog index 1e47fa0e1b6..fcc8bb5eaa3 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -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 diff --git a/src/buffer.c b/src/buffer.c index aa3fcf8c234..d02bcf7eceb 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -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); } }