=== modified file 'src/indent.c' *** src/indent.c 2011-07-10 08:20:10 +0000 --- src/indent.c 2011-07-11 19:05:41 +0000 *************** *** 1985,1991 **** struct text_pos pt; struct window *w; Lisp_Object old_buffer; ! struct gcpro gcpro1; Lisp_Object lcols = Qnil; double cols IF_LINT (= 0); --- 1985,1992 ---- struct text_pos pt; struct window *w; Lisp_Object old_buffer; ! EMACS_INT old_charpos, old_bytepos; ! struct gcpro gcpro1, gcpro2, gcpro3; Lisp_Object lcols = Qnil; double cols IF_LINT (= 0); *************** *** 2005,2016 **** w = XWINDOW (window); old_buffer = Qnil; ! GCPRO1 (old_buffer); if (XBUFFER (w->buffer) != current_buffer) { /* Set the window's buffer temporarily to the current buffer. */ old_buffer = w->buffer; XSETBUFFER (w->buffer, current_buffer); } if (noninteractive) --- 2006,2021 ---- w = XWINDOW (window); old_buffer = Qnil; ! GCPRO3 (old_buffer, old_charpos, old_bytepos); if (XBUFFER (w->buffer) != current_buffer) { /* Set the window's buffer temporarily to the current buffer. */ old_buffer = w->buffer; + old_charpos = XMARKER (w->pointm)->charpos; + old_bytepos = XMARKER (w->pointm)->bytepos; XSETBUFFER (w->buffer, current_buffer); + set_marker_both + (w->pointm, w->buffer, BUF_PT (current_buffer), BUF_PT_BYTE (current_buffer)); } if (noninteractive) *************** *** 2131,2137 **** } if (BUFFERP (old_buffer)) ! w->buffer = old_buffer; RETURN_UNGCPRO (make_number (it.vpos)); } --- 2136,2145 ---- } if (BUFFERP (old_buffer)) ! { ! w->buffer = old_buffer; ! set_marker_both (w->pointm, w->buffer, old_charpos, old_bytepos); ! } RETURN_UNGCPRO (make_number (it.vpos)); }