# HG changeset patch # User Stefan Monnier # Date 1053197196 0 # Node ID 4370ce3fabb362ef1efce5e474ba2ef4eb32f15f # Parent cdd70d6da48dcd1b6f9d22edb0b71ad0f6860018 (text_property_stickiness): New arg `buffer'. diff -r cdd70d6da48d -r 4370ce3fabb3 src/intervals.h --- a/src/intervals.h Sat May 17 15:53:12 2003 +0000 +++ b/src/intervals.h Sat May 17 18:46:36 2003 +0000 @@ -1,5 +1,5 @@ /* Definitions and global variables for intervals. - Copyright (C) 1993, 1994, 2000, 2002 Free Software Foundation, Inc. + Copyright (C) 1993, 1994, 2000, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -134,7 +134,7 @@ { \ (i)->total_length = (i)->position = 0; \ (i)->left = (i)->right = NULL_INTERVAL; \ - SET_INTERVAL_PARENT (i, NULL_INTERVAL); \ + SET_INTERVAL_PARENT (i, NULL_INTERVAL); \ (i)->write_protect = 0; \ (i)->visible = 0; \ (i)->front_sticky = (i)->rear_sticky = 0; \ @@ -304,7 +304,7 @@ void extend_property_ranges P_ ((Lisp_Object, Lisp_Object, Lisp_Object)); Lisp_Object get_char_property_and_overlay P_ ((Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object*)); -extern int text_property_stickiness P_ ((Lisp_Object prop, Lisp_Object pos)); +extern int text_property_stickiness P_ ((Lisp_Object prop, Lisp_Object pos, Lisp_Object buffer)); extern void syms_of_textprop (); diff -r cdd70d6da48d -r 4370ce3fabb3 src/textprop.c --- a/src/textprop.c Sat May 17 15:53:12 2003 +0000 +++ b/src/textprop.c Sat May 17 18:46:36 2003 +0000 @@ -1,5 +1,5 @@ /* Interface code for dealing with text properties. - Copyright (C) 1993, 1994, 1995, 1997, 1999, 2000, 2001, 2002 + Copyright (C) 1993, 1994, 1995, 1997, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -1703,23 +1703,26 @@ /* Return the direction from which the text-property PROP would be inherited by any new text inserted at POS: 1 if it would be inherited from the char after POS, -1 if it would be inherited from - the char before POS, and 0 if from neither. */ + the char before POS, and 0 if from neither. + BUFFER can be either a buffer or nil (meaning current buffer). */ int -text_property_stickiness (prop, pos) - Lisp_Object prop; - Lisp_Object pos; +text_property_stickiness (prop, pos, buffer) + Lisp_Object prop, pos, buffer; { Lisp_Object prev_pos, front_sticky; int is_rear_sticky = 1, is_front_sticky = 0; /* defaults */ - if (XINT (pos) > BEGV) + if (NILP (buffer)) + XSETBUFFER (buffer, current_buffer); + + if (XINT (pos) > BUF_BEGV (XBUFFER (buffer))) /* Consider previous character. */ { Lisp_Object rear_non_sticky; prev_pos = make_number (XINT (pos) - 1); - rear_non_sticky = Fget_text_property (prev_pos, Qrear_nonsticky, Qnil); + rear_non_sticky = Fget_text_property (prev_pos, Qrear_nonsticky, buffer); if (!NILP (CONSP (rear_non_sticky) ? Fmemq (prop, rear_non_sticky) @@ -1729,7 +1732,7 @@ } /* Consider following character. */ - front_sticky = Fget_text_property (pos, Qfront_sticky, Qnil); + front_sticky = Fget_text_property (pos, Qfront_sticky, buffer); if (EQ (front_sticky, Qt) || (CONSP (front_sticky) @@ -1749,7 +1752,8 @@ disambiguate. Basically, rear-sticky wins, _except_ if the property that would be inherited has a value of nil, in which case front-sticky wins. */ - if (XINT (pos) == BEGV || NILP (Fget_text_property (prev_pos, prop, Qnil))) + if (XINT (pos) == BUF_BEGV (XBUFFER (buffer)) + || NILP (Fget_text_property (prev_pos, prop, buffer))) return 1; else return -1;