Mercurial > emacs
changeset 50941:5490960951c1
(adjust_point_for_property): Try harder to move point
to the non-sticky end of an invisible property.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Sat, 10 May 2003 16:36:02 +0000 |
parents | ee3ba06bba1a |
children | 46d187316243 |
files | src/keyboard.c |
diffstat | 1 files changed, 18 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/keyboard.c Sat May 10 16:27:35 2003 +0000 +++ b/src/keyboard.c Sat May 10 16:36:02 2003 +0000 @@ -1,5 +1,5 @@ /* Keyboard and mouse input; editor command loop. - Copyright (C) 1985,86,87,88,89,93,94,95,96,97,99, 2000, 01, 02 + Copyright (C) 1985,86,87,88,89,93,94,95,96,97,99,2000,01,02,03 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -1874,7 +1874,10 @@ int beg, end; Lisp_Object val, overlay, tmp; int check_composition = 1, check_display = 1, check_invisible = 1; - + int orig_pt = PT; + + /* FIXME: cycling is probably not necessary because these properties + can't be usefully combined anyway. */ while (check_composition || check_display || check_invisible) { if (check_composition @@ -1941,7 +1944,19 @@ /* Move away from the inside area. */ if (beg < PT && end > PT) { - SET_PT (PT < last_pt ? beg : end); + SET_PT ((orig_pt == PT && (last_pt < beg || last_pt > end)) + /* We haven't moved yet (so we don't need to fear + infinite-looping) and we were outside the range + before (so either end of the range still corresponds + to a move in the right direction): pretend we moved + less than we actually did, so that we still have + more freedom below in choosing which end of the range + to go to. */ + ? (PT < last_pt ? end : beg) + /* We either have moved already or the last point + was already in the range: we don't get to choose + which end of the range we have to go to. */ + : (PT < last_pt ? beg : end)); check_composition = check_display = 1; } xassert (PT == beg || PT == end);