# HG changeset patch # User Miles Bader # Date 965134304 0 # Node ID 73040724e6532c8da4a5228c8e4a29573a2a4b5c # Parent e8eb478c663437678844346c4b0a6fe022ba09ff (Fconstrain_to_field): Fix the conditions for deciding when to constrain NEW_POS (they were pretty screwed up before). diff -r e8eb478c6634 -r 73040724e653 src/editfns.c --- a/src/editfns.c Tue Aug 01 10:12:00 2000 +0000 +++ b/src/editfns.c Tue Aug 01 12:51:44 2000 +0000 @@ -593,20 +593,23 @@ 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;