Commit c7f53895 authored by Dmitry Antipov's avatar Dmitry Antipov
Browse files

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.
parent ef454cf7
...@@ -17,6 +17,8 @@ ...@@ -17,6 +17,8 @@
which is verified by eassert. which is verified by eassert.
* editfns.c (save_excursion_save): Do not assume that * editfns.c (save_excursion_save): Do not assume that
selected_window always displays the buffer. 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> 2013-03-27 Stefan Monnier <monnier@iro.umontreal.ca>
   
......
...@@ -2394,8 +2394,9 @@ DEFUN ("buffer-swap-text", Fbuffer_swap_text, Sbuffer_swap_text, ...@@ -2394,8 +2394,9 @@ DEFUN ("buffer-swap-text", Fbuffer_swap_text, Sbuffer_swap_text,
BUF_MARKERS(buf) should either be for `buf' or dead. */ BUF_MARKERS(buf) should either be for `buf' or dead. */
eassert (!m->buffer); eassert (!m->buffer);
} }
{ /* Some of the C code expects that w->buffer == w->pointm->buffer. { /* Some of the C code expects that both window markers of a
So since we just swapped the markers between the two buffers, we need 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. */ to undo the effect of this swap for window markers. */
Lisp_Object w = Fselected_window (), ws = Qnil; Lisp_Object w = Fselected_window (), ws = Qnil;
Lisp_Object buf1, buf2; Lisp_Object buf1, buf2;
...@@ -2411,6 +2412,13 @@ DEFUN ("buffer-swap-text", Fbuffer_swap_text, Sbuffer_swap_text, ...@@ -2411,6 +2412,13 @@ DEFUN ("buffer-swap-text", Fbuffer_swap_text, Sbuffer_swap_text,
make_number make_number
(BUF_BEGV (XBUFFER (XWINDOW (w)->buffer))), (BUF_BEGV (XBUFFER (XWINDOW (w)->buffer))),
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); w = Fnext_window (w, Qt, Qt);
} }
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment