]> code.delx.au - gnu-emacs/commitdiff
(Fvertical_motion): In batch mode, use vmotion directly.
authorRichard M. Stallman <rms@gnu.org>
Tue, 16 Nov 2004 16:58:16 +0000 (16:58 +0000)
committerRichard M. Stallman <rms@gnu.org>
Tue, 16 Nov 2004 16:58:16 +0000 (16:58 +0000)
src/indent.c

index 559b69d93117d890368ec883ff3db6559e331ec0..0ece40790a797991ec64c547f64a004a2e1c4a38 100644 (file)
@@ -2061,29 +2061,38 @@ whether or not it is currently displayed in some window.  */)
       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);
+
+      /* 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);
 
-  if (XINT (lines) != 0)
-    move_it_by_lines (&it, XINT (lines), 0);
+      if (XINT (lines) != 0)
+       move_it_by_lines (&it, XINT (lines), 0);
 
-  SET_PT_BOTH (IT_CHARPOS (it), IT_BYTEPOS (it));
+      SET_PT_BOTH (IT_CHARPOS (it), IT_BYTEPOS (it));
+    }
 
   if (BUFFERP (old_buffer))
     w->buffer = old_buffer;