emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/src/intervals.c


From: Stefan Monnier
Subject: [Emacs-diffs] Changes to emacs/src/intervals.c
Date: Sat, 17 May 2003 14:47:18 -0400

Index: emacs/src/intervals.c
diff -c emacs/src/intervals.c:1.120 emacs/src/intervals.c:1.121
*** emacs/src/intervals.c:1.120 Sun Apr 20 21:39:06 2003
--- emacs/src/intervals.c       Sat May 17 14:47:18 2003
***************
*** 1,5 ****
  /* Code for doing intervals.
!    Copyright (C) 1993, 1994, 1995, 1997, 1998, 2002 Free Software Foundation, 
Inc.
  
  This file is part of GNU Emacs.
  
--- 1,5 ----
  /* Code for doing intervals.
!    Copyright (C) 1993, 1994, 1995, 1997, 1998, 2002, 2003 Free Software 
Foundation, Inc.
  
  This file is part of GNU Emacs.
  
***************
*** 77,83 ****
                           - BUF_BEG (XBUFFER (parent)));
        CHECK_TOTAL_LENGTH (new);
        BUF_INTERVALS (XBUFFER (parent)) = new;
!       new->position = 1;
      }
    else if (STRINGP (parent))
      {
--- 77,83 ----
                           - BUF_BEG (XBUFFER (parent)));
        CHECK_TOTAL_LENGTH (new);
        BUF_INTERVALS (XBUFFER (parent)) = new;
!       new->position = BEG;
      }
    else if (STRINGP (parent))
      {
***************
*** 121,140 ****
    MERGE_INTERVAL_CACHE (source, target);
  
    o = source->plist;
!   while (! EQ (o, Qnil))
      {
!       sym = Fcar (o);
        val = Fmemq (sym, target->plist);
  
        if (NILP (val))
        {
!         o = Fcdr (o);
!         val = Fcar (o);
          target->plist = Fcons (sym, Fcons (val, target->plist));
!         o = Fcdr (o);
        }
        else
!       o = Fcdr (Fcdr (o));
      }
  }
  
--- 121,141 ----
    MERGE_INTERVAL_CACHE (source, target);
  
    o = source->plist;
!   while (CONSP (o))
      {
!       sym = XCAR (o);
        val = Fmemq (sym, target->plist);
  
        if (NILP (val))
        {
!         o = XCDR (o);
!         CHECK_CONS (o);
!         val = XCAR (o);
          target->plist = Fcons (sym, Fcons (val, target->plist));
!         o = XCDR (o);
        }
        else
!       o = Fcdr (XCDR (o));
      }
  }
  
***************
*** 159,171 ****
      abort ();
    i1_len /= 2;
    i0_cdr = i0->plist;
!   while (!NILP (i0_cdr))
      {
        /* Lengths of the two plists were unequal.  */
        if (i1_len == 0)
        return 0;
  
!       i0_sym = Fcar (i0_cdr);
        i1_val = Fmemq (i0_sym, i1->plist);
  
        /* i0 has something i1 doesn't.  */
--- 160,172 ----
      abort ();
    i1_len /= 2;
    i0_cdr = i0->plist;
!   while (CONSP (i0_cdr))
      {
        /* Lengths of the two plists were unequal.  */
        if (i1_len == 0)
        return 0;
  
!       i0_sym = XCAR (i0_cdr);
        i1_val = Fmemq (i0_sym, i1->plist);
  
        /* i0 has something i1 doesn't.  */
***************
*** 173,183 ****
        return 0;
  
        /* i0 and i1 both have sym, but it has different values in each.  */
!       i0_cdr = Fcdr (i0_cdr);
!       if (! EQ (Fcar (Fcdr (i1_val)), Fcar (i0_cdr)))
        return 0;
  
!       i0_cdr = Fcdr (i0_cdr);
        i1_len--;
      }
  
--- 174,185 ----
        return 0;
  
        /* i0 and i1 both have sym, but it has different values in each.  */
!       i0_cdr = XCDR (i0_cdr);
!       CHECK_CONS (i0_cdr);
!       if (!EQ (Fcar (Fcdr (i1_val)), XCAR (i0_cdr)))
        return 0;
  
!       i0_cdr = XCDR (i0_cdr);
        i1_len--;
      }
  
***************
*** 666,673 ****
        else
        {
          tree->position
!           = (position - relative_position /* the left edge of *tree */
!              + LEFT_TOTAL_LENGTH (tree)); /* the left edge of this interval */
  
          return tree;
        }
--- 668,675 ----
        else
        {
          tree->position
!           = (position - relative_position /* left edge of *tree.  */
!              + LEFT_TOTAL_LENGTH (tree)); /* left edge of this interval.  */
  
          return tree;
        }
***************
*** 1125,1143 ****
    rrear  = textget (pright, Qrear_nonsticky);
  
    /* Go through each element of PRIGHT.  */
!   for (tail1 = pright; CONSP (tail1); tail1 = Fcdr (Fcdr (tail1)))
      {
        Lisp_Object tmp;
  
!       sym = Fcar (tail1);
  
        /* Sticky properties get special treatment.  */
        if (EQ (sym, Qrear_nonsticky) || EQ (sym, Qfront_sticky))
        continue;
  
!       rval = Fcar (Fcdr (tail1));
!       for (tail2 = pleft; CONSP (tail2); tail2 = Fcdr (Fcdr (tail2)))
!       if (EQ (sym, Fcar (tail2)))
          break;
  
        /* Indicate whether the property is explicitly defined on the left.
--- 1127,1145 ----
    rrear  = textget (pright, Qrear_nonsticky);
  
    /* Go through each element of PRIGHT.  */
!   for (tail1 = pright; CONSP (tail1); tail1 = Fcdr (XCDR (tail1)))
      {
        Lisp_Object tmp;
  
!       sym = XCAR (tail1);
  
        /* Sticky properties get special treatment.  */
        if (EQ (sym, Qrear_nonsticky) || EQ (sym, Qfront_sticky))
        continue;
  
!       rval = Fcar (XCDR (tail1));
!       for (tail2 = pleft; CONSP (tail2); tail2 = Fcdr (XCDR (tail2)))
!       if (EQ (sym, XCAR (tail2)))
          break;
  
        /* Indicate whether the property is explicitly defined on the left.
***************
*** 1183,1206 ****
      }
  
    /* Now go through each element of PLEFT.  */
!   for (tail2 = pleft; CONSP (tail2); tail2 = Fcdr (Fcdr (tail2)))
      {
        Lisp_Object tmp;
  
!       sym = Fcar (tail2);
  
        /* Sticky properties get special treatment.  */
        if (EQ (sym, Qrear_nonsticky) || EQ (sym, Qfront_sticky))
        continue;
  
        /* If sym is in PRIGHT, we've already considered it.  */
!       for (tail1 = pright; CONSP (tail1); tail1 = Fcdr (Fcdr (tail1)))
!       if (EQ (sym, Fcar (tail1)))
          break;
        if (! NILP (tail1))
        continue;
  
!       lval = Fcar (Fcdr (tail2));
  
        /* Even if lrear or rfront say nothing about the stickiness of
         SYM, Vtext_property_default_nonsticky may give default
--- 1185,1208 ----
      }
  
    /* Now go through each element of PLEFT.  */
!   for (tail2 = pleft; CONSP (tail2); tail2 = Fcdr (XCDR (tail2)))
      {
        Lisp_Object tmp;
  
!       sym = XCAR (tail2);
  
        /* Sticky properties get special treatment.  */
        if (EQ (sym, Qrear_nonsticky) || EQ (sym, Qfront_sticky))
        continue;
  
        /* If sym is in PRIGHT, we've already considered it.  */
!       for (tail1 = pright; CONSP (tail1); tail1 = Fcdr (XCDR (tail1)))
!       if (EQ (sym, XCAR (tail1)))
          break;
        if (! NILP (tail1))
        continue;
  
!       lval = Fcar (XCDR (tail2));
  
        /* Even if lrear or rfront say nothing about the stickiness of
         SYM, Vtext_property_default_nonsticky may give default
***************
*** 1728,1733 ****
--- 1730,1736 ----
                                 Qnil, buf, 0);
        }
        if (! NULL_INTERVAL_P (BUF_INTERVALS (buffer)))
+       /* Shouldn't be necessary.  -stef  */
        BUF_INTERVALS (buffer) = balance_an_interval (BUF_INTERVALS (buffer));
        return;
      }
***************
*** 1741,1747 ****
          Lisp_Object buf;
          XSETBUFFER (buf, buffer);
          BUF_INTERVALS (buffer) = reproduce_tree_obj (source, buf);
!         BUF_INTERVALS (buffer)->position = 1;
  
          /* Explicitly free the old tree here?  */
  
--- 1744,1750 ----
          Lisp_Object buf;
          XSETBUFFER (buf, buffer);
          BUF_INTERVALS (buffer) = reproduce_tree_obj (source, buf);
!         BUF_INTERVALS (buffer)->position = BEG;
  
          /* Explicitly free the old tree here?  */
  
***************
*** 1763,1769 ****
         about inserting properly.  For now, just waste the old intervals.  */
      {
        BUF_INTERVALS (buffer) = reproduce_tree (source, INTERVAL_PARENT 
(tree));
!       BUF_INTERVALS (buffer)->position = 1;
        /* Explicitly free the old tree here.  */
  
        return;
--- 1766,1772 ----
         about inserting properly.  For now, just waste the old intervals.  */
      {
        BUF_INTERVALS (buffer) = reproduce_tree (source, INTERVAL_PARENT 
(tree));
!       BUF_INTERVALS (buffer)->position = BEG;
        /* Explicitly free the old tree here.  */
  
        return;
***************
*** 1963,1969 ****
         such that an insertion at POS would inherit it.  */
        && (NILP (invis_overlay)
          /* Invisible property is from a text-property.  */
!         ? (text_property_stickiness (Qinvisible, make_number (pos))
             == (test_offs == 0 ? 1 : -1))
          /* Invisible property is from an overlay.  */
          : (test_offs == 0
--- 1966,1972 ----
         such that an insertion at POS would inherit it.  */
        && (NILP (invis_overlay)
          /* Invisible property is from a text-property.  */
!         ? (text_property_stickiness (Qinvisible, make_number (pos), Qnil)
             == (test_offs == 0 ? 1 : -1))
          /* Invisible property is from an overlay.  */
          : (test_offs == 0
***************
*** 2338,2344 ****
--- 2341,2355 ----
      --position;
    XSETFASTINT (lispy_position, position);
    XSETBUFFER (lispy_buffer, buffer);
+   /* First check if the CHAR has any property.  This is because when
+      we click with the mouse, the mouse pointer is really pointing
+      to the CHAR after POS.  */
    prop = Fget_char_property (lispy_position, type, lispy_buffer);
+   /* If not, look at the POS's properties.  This is necessary because when
+      editing a field with a `local-map' property, we want insertion at the end
+      to obey the `local-map' property.  */
+   if (NILP (prop))
+     prop = get_pos_property (lispy_position, type, lispy_buffer);
  
    BUF_BEGV (buffer) = old_begv;
    BUF_ZV (buffer) = old_zv;




reply via email to

[Prev in Thread] Current Thread [Next in Thread]