(Fbuffer_swap_text): Reset window->point markers.
This commit is contained in:
parent
21e5e72e89
commit
126f1fc1a3
2 changed files with 24 additions and 0 deletions
|
@ -1,3 +1,7 @@
|
|||
2008-09-07 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* buffer.c (Fbuffer_swap_text): Reset window->point markers.
|
||||
|
||||
2008-09-06 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
|
||||
|
||||
* process.c (Fsystem_process_attributes): Doc fix.
|
||||
|
|
20
src/buffer.c
20
src/buffer.c
|
@ -2269,6 +2269,26 @@ DEFUN ("buffer-swap-text", Fbuffer_swap_text, Sbuffer_swap_text,
|
|||
if (m->buffer == current_buffer)
|
||||
m->buffer = other_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
|
||||
to undo the effect of this swap for window markers. */
|
||||
Lisp_Object w = Fselected_window (), ws = Qnil;
|
||||
Lisp_Object buf1, buf2;
|
||||
XSETBUFFER (buf1, current_buffer); XSETBUFFER (buf2, other_buffer);
|
||||
|
||||
while (NILP (Fmemq (w, ws)))
|
||||
{
|
||||
ws = Fcons (w, ws);
|
||||
if (MARKERP (XWINDOW (w)->pointm)
|
||||
&& (EQ (XWINDOW (w)->buffer, buf1)
|
||||
|| EQ (XWINDOW (w)->buffer, buf2)))
|
||||
Fset_marker (XWINDOW (w)->pointm,
|
||||
make_number (BUF_BEGV (XBUFFER (XWINDOW (w)->buffer))),
|
||||
XWINDOW (w)->buffer);
|
||||
w = Fnext_window (w, Qt, Qt);
|
||||
}
|
||||
}
|
||||
|
||||
if (current_buffer->text->intervals)
|
||||
(eassert (EQ (current_buffer->text->intervals->up.obj, buffer)),
|
||||
XSETBUFFER (current_buffer->text->intervals->up.obj, current_buffer));
|
||||
|
|
Loading…
Add table
Reference in a new issue