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.

View in manual

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));
}