Function: overlays-at

overlays-at is a function defined in buffer.c.

Signature

(overlays-at POS &optional SORTED)

Documentation

Return a list of the overlays that contain the character at POS.

If SORTED is non-nil, then sort them by decreasing priority.

Zero-length (a.k.a. "empty") overlays that start and stop at POS are not included in the return value. Use overlays-in if empty overlays are of interest.

This function can return overlays outside of the current narrowing of the buffer if POS is outside of the narrowing.

Other relevant functions are documented in the overlay group.

View in manual

Probably introduced at or before Emacs version 24.4.

Shortdoc

;; overlay
(overlays-at 15)
    e.g. => (#<overlay from 1 to 10 in *foo*>)

Aliases

semantic-overlays-at (obsolete since 27.1)

Source Code

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

  CHECK_FIXNUM_COERCE_MARKER (pos);

  if (!buffer_has_overlays ())
    return Qnil;

  len = 10;
  /* We can't use alloca here because overlays_at can call xrealloc.  */
  overlay_vec = xmalloc (len * sizeof *overlay_vec);

  /* Put all the overlays we want in a vector in overlay_vec.
     Store the length in len.  */
  noverlays = overlays_at (XFIXNUM (pos), true, &overlay_vec, &len, NULL);

  if (!NILP (sorted))
    noverlays = sort_overlays (overlay_vec, noverlays,
			       WINDOWP (sorted) ? XWINDOW (sorted) : NULL);

  /* Make a list of them all.  */
  result = Flist (noverlays, overlay_vec);

  /* The doc string says the list should be in decreasing order of
     priority, so we reverse the list, because sort_overlays sorts in
     the increasing order of priority.  */
  if (!NILP (sorted))
    result = Fnreverse (result);

  xfree (overlay_vec);
  return result;
}