comparison src/buffer.c @ 98070:b0d74e2658b7

(Fbuffer_swap_text): Reset window->point markers.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Sun, 07 Sep 2008 01:22:25 +0000
parents ec7f95140247
children 287704bda212
comparison
equal deleted inserted replaced
98069:43a801a18b24 98070:b0d74e2658b7
2267 m->buffer = current_buffer; 2267 m->buffer = current_buffer;
2268 for (m = BUF_MARKERS (other_buffer); m; m = m->next) 2268 for (m = BUF_MARKERS (other_buffer); m; m = m->next)
2269 if (m->buffer == current_buffer) 2269 if (m->buffer == current_buffer)
2270 m->buffer = other_buffer; 2270 m->buffer = other_buffer;
2271 } 2271 }
2272 { /* Some of the C code expects that w->buffer == w->pointm->buffer.
2273 So since we just swapped the markers between the two buffers, we need
2274 to undo the effect of this swap for window markers. */
2275 Lisp_Object w = Fselected_window (), ws = Qnil;
2276 Lisp_Object buf1, buf2;
2277 XSETBUFFER (buf1, current_buffer); XSETBUFFER (buf2, other_buffer);
2278
2279 while (NILP (Fmemq (w, ws)))
2280 {
2281 ws = Fcons (w, ws);
2282 if (MARKERP (XWINDOW (w)->pointm)
2283 && (EQ (XWINDOW (w)->buffer, buf1)
2284 || EQ (XWINDOW (w)->buffer, buf2)))
2285 Fset_marker (XWINDOW (w)->pointm,
2286 make_number (BUF_BEGV (XBUFFER (XWINDOW (w)->buffer))),
2287 XWINDOW (w)->buffer);
2288 w = Fnext_window (w, Qt, Qt);
2289 }
2290 }
2291
2272 if (current_buffer->text->intervals) 2292 if (current_buffer->text->intervals)
2273 (eassert (EQ (current_buffer->text->intervals->up.obj, buffer)), 2293 (eassert (EQ (current_buffer->text->intervals->up.obj, buffer)),
2274 XSETBUFFER (current_buffer->text->intervals->up.obj, current_buffer)); 2294 XSETBUFFER (current_buffer->text->intervals->up.obj, current_buffer));
2275 if (other_buffer->text->intervals) 2295 if (other_buffer->text->intervals)
2276 (eassert (EQ (other_buffer->text->intervals->up.obj, Fcurrent_buffer ())), 2296 (eassert (EQ (other_buffer->text->intervals->up.obj, Fcurrent_buffer ())),