Function: previous-property-change
previous-property-change is a function defined in textprop.c.
Signature
(previous-property-change POSITION &optional OBJECT LIMIT)
Documentation
Return the position of previous property change.
Scans characters backwards from POSITION in OBJECT till it finds a change in some text property, then returns the position of the change. If the optional second argument OBJECT is a buffer (or nil, which means the current buffer), POSITION is a buffer position (integer or marker). If OBJECT is a string, POSITION is a 0-based index into it. Return nil if LIMIT is nil or omitted, and the property is constant all the way to the start of OBJECT; if the value is non-nil, it is a position less than POSITION, never equal.
If the optional third argument LIMIT is non-nil, don't search back past position LIMIT; return LIMIT if nothing is found until LIMIT.
Other relevant functions are documented in the text-properties group.
Probably introduced at or before Emacs version 19.23.
Shortdoc
;; text-properties
(previous-property-change (point) (current-buffer))
Source Code
// Defined in /usr/src/emacs/src/textprop.c
{
register INTERVAL i, previous;
if (NILP (object))
XSETBUFFER (object, current_buffer);
if (!NILP (limit))
CHECK_FIXNUM_COERCE_MARKER (limit);
i = validate_interval_range (object, &position, &position, soft);
if (!i)
return limit;
/* Start with the interval containing the char before point. */
if (i->position == XFIXNAT (position))
i = previous_interval (i);
previous = previous_interval (i);
while (previous && intervals_equal (previous, i)
&& (NILP (limit)
|| (previous->position + LENGTH (previous) > XFIXNUM (limit))))
previous = previous_interval (previous);
if (!previous
|| (previous->position + LENGTH (previous)
<= (FIXNUMP (limit)
? XFIXNUM (limit)
: (STRINGP (object) ? 0 : BUF_BEGV (XBUFFER (object))))))
return limit;
else
return make_fixnum (previous->position + LENGTH (previous));
}