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.
This commit is contained in:
parent
ef454cf704
commit
c7f53895b9
2 changed files with 12 additions and 2 deletions
|
@ -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>
|
||||
|
||||
|
|
12
src/buffer.c
12
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);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue