Mercurial > emacs
changeset 11327:76908dad81a4
(set_point): When skipping intangible text,
stop where property value changes.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sun, 09 Apr 1995 09:42:28 +0000 |
parents | 0d5ebc078c51 |
children | 54e681a175d2 |
files | src/intervals.c |
diffstat | 1 files changed, 27 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- 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