Function: previous-overlay-change

previous-overlay-change is a function defined in buffer.c.

Signature

(previous-overlay-change POS)

Documentation

Return the previous position before POS where an overlay starts or ends.

If there are no overlay boundaries from (point-min) to POS, the value is (point-min).

Other relevant functions are documented in the overlay group.

Probably introduced at or before Emacs version 19.29.

Shortdoc

;; overlay
(previous-overlay-change 30)
    e.g. => 20

Aliases

semantic-overlay-previous-change (obsolete since 27.1)

Source Code

// Defined in /usr/src/emacs/src/buffer.c
{
  ptrdiff_t prevpos;
  Lisp_Object *overlay_vec;
  ptrdiff_t len;

  CHECK_FIXNUM_COERCE_MARKER (pos);

  if (!buffer_has_overlays ())
    return make_fixnum (BEGV);

  /* At beginning of buffer, we know the answer;
     avoid bug subtracting 1 below.  */
  if (XFIXNUM (pos) == BEGV)
    return pos;

  len = 10;
  overlay_vec = xmalloc (len * sizeof *overlay_vec);

  /* Put all the overlays we want in a vector in overlay_vec.
     Store the length in len.
     prevpos gets the position of the previous change.  */
  overlays_at (XFIXNUM (pos), 1, &overlay_vec, &len,
	       0, &prevpos, 1);

  xfree (overlay_vec);
  return make_fixnum (prevpos);
}