(Fconstrain_to_field): Fix the conditions for deciding when to constrain
authorMiles Bader <miles@gnu.org>
Tue, 1 Aug 2000 12:56:24 +0000 (12:56 +0000)
committerMiles Bader <miles@gnu.org>
Tue, 1 Aug 2000 12:56:24 +0000 (12:56 +0000)
  NEW_POS (they were pretty screwed up before).

src/ChangeLog
src/editfns.c

index f2f6236..5efe0ed 100644 (file)
@@ -1,3 +1,8 @@
+2000-08-01  Miles Bader  <miles@gnu.org>
+
+       * editfns.c (Fconstrain_to_field): Fix the conditions for deciding
+       when to constrain NEW_POS (they were pretty screwed up before).
+
 2000-07-31  Eli Zaretskii  <eliz@is.elta.co.il>
 
        * msdos.c (run_msdos_command): Save and restore the master
index 10a52ca..d469a99 100644 (file)
@@ -593,20 +593,23 @@ Field boundaries are not noticed if `inhibit-field-text-motion' is non-nil.")
       else
        field_bound = Ffield_beginning (old_pos, escape_from_edge);
 
-      if (/* If ONLY_IN_LINE is non-nil, we only constrain NEW_POS if doing
-            so would remain within the same line.  */
-         NILP (only_in_line)
-         /* In that case, see if ESCAPE_FROM_EDGE caused FIELD_BOUND
-             to jump to the other side of NEW_POS, which would mean
-             that NEW_POS is already acceptable, and that we don't
-             have to do the line-check.  */
-         || ((XFASTINT (field_bound) < XFASTINT (new_pos)) ? !fwd : fwd)
-         /* If not, see if there's no newline intervening between
-             NEW_POS and FIELD_BOUND.  */
-         || (scan_buffer ('\n',
-                          XFASTINT (new_pos), XFASTINT (field_bound),
-                          fwd ? -1 : 1, &shortage, 1),
-             shortage != 0))
+      if (/* See if ESCAPE_FROM_EDGE caused FIELD_BOUND to jump to the
+             other side of NEW_POS, which would mean that NEW_POS is
+             already acceptable, and it's not necessary to constrain it
+             to FIELD_BOUND.  */
+         ((XFASTINT (field_bound) < XFASTINT (new_pos)) ? fwd : !fwd)
+         /* NEW_POS should be constrained, but only if either
+            ONLY_IN_LINE is nil (in which case any constraint is OK),
+            or NEW_POS and FIELD_BOUND are on the same line (in which
+            case the constraint is OK even if ONLY_IN_LINE is non-nil). */
+         && (NILP (only_in_line)
+             /* This is the ONLY_IN_LINE case, check that NEW_POS and
+                FIELD_BOUND are on the same line by seeing whether
+                there's an intervening newline or not.  */
+             || (scan_buffer ('\n',
+                              XFASTINT (new_pos), XFASTINT (field_bound),
+                              fwd ? -1 : 1, &shortage, 1),
+                 shortage != 0)))
        /* Constrain NEW_POS to FIELD_BOUND.  */
        new_pos = field_bound;