changeset 16740:202689a911b7

(set_point): Use virtual bounds, not real bounds, in the abort test for POSITION. Skip the intangibility test if POSITION is at either end of buffer.
author Richard M. Stallman <rms@gnu.org>
date Fri, 20 Dec 1996 18:15:52 +0000
parents 41dc4644dec9
children e4e15030dad3
files src/intervals.c
diffstat 1 files changed, 36 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/intervals.c	Fri Dec 20 18:15:32 1996 +0000
+++ b/src/intervals.c	Fri Dec 20 18:15:52 1996 +0000
@@ -769,11 +769,43 @@
      So split this interval at the insertion point.  */
   if (! (position == i->position || eobp)
       && END_NONSTICKY_P (i)
-      && ! FRONT_STICKY_P (i))
+      && FRONT_NONSTICKY_P (i))
     {
-      temp = split_interval_right (i, position - i->position);
-      copy_properties (i, temp);
-      i = temp;
+      Lisp_Object tail;
+      Lisp_Object front, rear;
+
+      front = textget (i->plist, Qfront_sticky);
+      rear  = textget (i->plist, Qrear_nonsticky);
+
+      /* Does any actual property pose an actual problem?  */
+      for (tail = i->plist; ! NILP (tail); tail = Fcdr (Fcdr (tail)))
+	{
+	  Lisp_Object prop;
+	  prop = XCONS (tail)->car;
+
+	  /* Is this particular property rear-sticky?
+	     Note, if REAR isn't a cons, it must be non-nil,
+	     which means that all properties are rear-nonsticky.  */
+	  if (CONSP (rear) && NILP (Fmemq (prop, rear)))
+	    continue;
+
+	  /* Is this particular property front-sticky?
+	     Note, if FRONT isn't a cons, it must be nil,
+	     which means that all properties are front-nonsticky.  */
+	  if (CONSP (front) && ! NILP (Fmemq (prop, front)))
+	    continue;
+
+	  /* PROP isn't sticky on either side => it is a real problem.  */
+	  break;
+	}
+
+      /* If any property is a real problem, split the interval.  */
+      if (! NILP (tail))
+	{
+	  temp = split_interval_right (i, position - i->position);
+	  copy_properties (i, temp);
+	  i = temp;
+	}
     }
 
   /* If we are positioned between intervals, check the stickiness of