Eli Zaretskii <eliz@gnu.org> writes:

From: Elijah Gabe Pérez <eg642616@gmail.com>
Date: Thu, 27 Mar 2025 08:53:25 -0600
Cc: mail@daniel-mendler.de, 77224@debbugs.gnu.org,
Juri Linkov <juri@linkov.net>

Eli Zaretskii <eliz@gnu.org> writes:

Btw, a possibly even better way is to modify the cursor looks from the
hooks of the relevant commands, like overwrite-mode. If some of them
don't have a hook, we could add a hook. This is better because it
doesn't unnecessarily "punish" Emacs anywhere else, only the commands
that could affect the cursor.

But what if user prefer using a lambda instead a function? For example for a specific mode or action from a
key binding package such as evil or meow
Sorry, I don't understand: what lambda? Aren't all the modes you want
to catch normal minor modes with a hook?

Not only minor mode, also functions (function symbols or anonymous ones).
for example if user wants to change cursor appearance if a text at
current cursor position have an overlay or whatever, can do it
defining a function in their config:

(defun my/cursor-change ()
  (string-prefix-p " *" (buffer-name)))

(setopt cursor-indicators-conditions `((my/cursor-change hollow "yellow")))

or

(setopt cursor-indicators-conditions `((,(lambda () (string-prefix-p " *" (buffer-name)))
                                        hollow "yellow")))

The current code only check if symbol is a variable or a function
symbol (since minor modes also defines a variable with same minor
mode name) or a lambda, and it must return non-nil.