# HG changeset patch # User Gerd Moellmann # Date 932593432 0 # Node ID ab513f624bc623c76326243f8b427c2e305f8e6f # Parent f36ec150350e2325c24a78323b0c1e23e273d5b4 (Fvertical_motion): Rewritten. diff -r f36ec150350e -r ab513f624bc6 src/indent.c --- a/src/indent.c Wed Jul 21 21:43:52 1999 +0000 +++ b/src/indent.c Wed Jul 21 21:43:52 1999 +0000 @@ -203,7 +203,7 @@ characters immediately following, then *NEXT_BOUNDARY_P will equal the return value. */ -static int +int skip_invisible (pos, next_boundary_p, to, window) int pos; int *next_boundary_p; @@ -1518,6 +1518,7 @@ return &val_compute_motion; } + #if 0 /* The doc string is too long for some compilers, but make-docfile can find it in this comment. */ DEFUN ("compute-motion", Ffoo, Sfoo, 7, 7, 0, @@ -1814,7 +1815,10 @@ (lines, window) Lisp_Object lines, window; { - struct position pos; + struct it it; + struct text_pos pt; + struct buffer *old, *b; + struct window *w; CHECK_NUMBER (lines, 0); if (! NILP (window)) @@ -1822,11 +1826,28 @@ else window = selected_window; - pos = *vmotion (PT, (int) XINT (lines), XWINDOW (window)); + w = XWINDOW (window); + b = XBUFFER (w->buffer); + if (b != current_buffer) + { + old = current_buffer; + set_buffer_internal_1 (b); + } + else + old = NULL; + + SET_TEXT_POS (pt, PT, PT_BYTE); + start_display (&it, w, pt); + move_it_by_lines (&it, XINT (lines), 0); + SET_PT_BOTH (IT_CHARPOS (it), IT_BYTEPOS (it)); - SET_PT (pos.bufpos); - return make_number (pos.vpos); + if (old) + set_buffer_internal_1 (old); + + return make_number (it.vpos); } + + /* file's initialization. */