# HG changeset patch # User Richard M. Stallman # Date 797420548 0 # Node ID 76908dad81a4b9c33b17279b1ceb07b0a650b3ea # Parent 0d5ebc078c51792201e40b5fc04a175b8e0d4b0f (set_point): When skipping intangible text, stop where property value changes. diff -r 0d5ebc078c51 -r 76908dad81a4 src/intervals.c --- a/src/intervals.c Sun Apr 09 09:34:05 1995 +0000 +++ b/src/intervals.c Sun Apr 09 09:42:28 1995 +0000 @@ -1644,20 +1644,24 @@ return; } - /* If the new position is between two intangible characters, - move forward or backward across all such characters. */ + /* If the new position is between two intangible characters + with the same intangible property value, + move forward or backward until a change in that property. */ if (NILP (Vinhibit_point_motion_hooks) && ! NULL_INTERVAL_P (to) && ! NULL_INTERVAL_P (toprev)) { if (backwards) { - /* Make sure the following character is intangible - if the previous one is. */ - if (toprev == to - || ! NILP (textget (to->plist, Qintangible))) - /* Ok, that is so. Back up across intangible text. */ - while (! NULL_INTERVAL_P (toprev) - && ! NILP (textget (toprev->plist, Qintangible))) + Lisp_Object intangible_propval; + intangible_propval = textget (to->plist, Qintangible); + + /* If following char is intangible, + skip back over all chars with matching intangible property. */ + if (! NILP (intangible_propval)) + while (to == toprev + || ((! NULL_INTERVAL_P (toprev) + && EQ (textget (toprev->plist, Qintangible), + intangible_propval)))) { to = toprev; toprev = previous_interval (toprev); @@ -1673,13 +1677,16 @@ } else { - /* Make sure the previous character is intangible - if the following one is. */ - if (toprev == to - || ! NILP (textget (toprev->plist, Qintangible))) - /* Ok, that is so. Advance across intangible text. */ - while (! NULL_INTERVAL_P (to) - && ! NILP (textget (to->plist, Qintangible))) + Lisp_Object intangible_propval; + intangible_propval = textget (toprev->plist, Qintangible); + + /* If previous char is intangible, + skip fwd over all chars with matching intangible property. */ + if (! NILP (intangible_propval)) + while (to == toprev + || ((! NULL_INTERVAL_P (to) + && EQ (textget (to->plist, Qintangible), + intangible_propval)))) { toprev = to; to = next_interval (to); @@ -1689,11 +1696,12 @@ position = to->position; } } - /* Here TO is the interval after the stopping point - and TOPREV is the interval before the stopping point. - One or the other may be null. */ } + /* Here TO is the interval after the stopping point + and TOPREV is the interval before the stopping point. + One or the other may be null. */ + BUF_PT (buffer) = position; /* We run point-left and point-entered hooks here, iff the