Function: next-overlay-change

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

Signature

(next-overlay-change POS)

Documentation

Return the next position after POS where an overlay starts or ends.

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

Other relevant functions are documented in the overlay group.

Probably introduced at or before Emacs version 19.29.

Shortdoc

;; overlay
(next-overlay-change 1)
    e.g. => 20

Aliases

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

Source Code

// Defined in /usr/src/emacs/src/buffer.c
{
  ptrdiff_t i, len, noverlays;
  ptrdiff_t endpos;
  Lisp_Object *overlay_vec;

  CHECK_FIXNUM_COERCE_MARKER (pos);

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

  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.
     endpos gets the position where the next overlay starts.  */
  noverlays = overlays_at (XFIXNUM (pos), 1, &overlay_vec, &len,
			   &endpos, 0, 1);

  /* If any of these overlays ends before endpos,
     use its ending point instead.  */
  for (i = 0; i < noverlays; i++)
    {
      Lisp_Object oend;
      ptrdiff_t oendpos;

      oend = OVERLAY_END (overlay_vec[i]);
      oendpos = OVERLAY_POSITION (oend);
      if (oendpos < endpos)
	endpos = oendpos;
    }

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