changeset 58270:1bc0c9f25148

(Fvertical_motion): In batch mode, use vmotion directly.
author Richard M. Stallman <rms@gnu.org>
date Tue, 16 Nov 2004 16:58:16 +0000
parents 46739a0845d3
children 8b3b0ccbe80b
files src/indent.c
diffstat 1 files changed, 27 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/src/indent.c	Tue Nov 16 15:42:24 2004 +0000
+++ b/src/indent.c	Tue Nov 16 16:58:16 2004 +0000
@@ -2061,29 +2061,38 @@
       XSETBUFFER (w->buffer, current_buffer);
     }
 
-  SET_TEXT_POS (pt, PT, PT_BYTE);
-  start_display (&it, w, pt);
-
-  /* Scan from the start of the line containing PT.  If we don't
-     do this, we start moving with IT->current_x == 0, while PT is
-     really at some x > 0.  The effect is, in continuation lines, that
-     we end up with the iterator placed at where it thinks X is 0,
-     while the end position is really at some X > 0, the same X that
-     PT had.  */
-  if (XINT (lines) < 0)
+  if (noninteractive)
     {
-      reseat_at_previous_visible_line_start (&it);
-      it.current_x = it.hpos = 0;
-      move_it_to (&it, PT, -1, -1, -1, MOVE_TO_POS);
-      it.vpos = 0;
+      struct position pos;
+      pos = *vmotion (PT, XINT (lines), w);
+      SET_PT_BOTH (pos.bufpos, pos.bytepos);
     }
   else
-    move_it_by_lines (&it, 0, 0);
+    {
+      SET_TEXT_POS (pt, PT, PT_BYTE);
+      start_display (&it, w, pt);
 
-  if (XINT (lines) != 0)
-    move_it_by_lines (&it, XINT (lines), 0);
+      /* Scan from the start of the line containing PT.  If we don't
+	 do this, we start moving with IT->current_x == 0, while PT is
+	 really at some x > 0.  The effect is, in continuation lines, that
+	 we end up with the iterator placed at where it thinks X is 0,
+	 while the end position is really at some X > 0, the same X that
+	 PT had.  */
+      if (XINT (lines) < 0)
+	{
+	  reseat_at_previous_visible_line_start (&it);
+	  it.current_x = it.hpos = 0;
+	  move_it_to (&it, PT, -1, -1, -1, MOVE_TO_POS);
+	  it.vpos = 0;
+	}
+      else
+	move_it_by_lines (&it, 0, 0);
 
-  SET_PT_BOTH (IT_CHARPOS (it), IT_BYTEPOS (it));
+      if (XINT (lines) != 0)
+	move_it_by_lines (&it, XINT (lines), 0);
+
+      SET_PT_BOTH (IT_CHARPOS (it), IT_BYTEPOS (it));
+    }
 
   if (BUFFERP (old_buffer))
     w->buffer = old_buffer;