Date: Sun, 04 Oct 2020 22:36:21 -0700
From: Jared Finder <jared@finder.org>
Cc: emacs-devel@gnu.org
> This is okay as a general idea, but it would be more clean to make
> Fmouse_position call a new C function (extracted from the first part
> of Fmouse_position's code) that just computes the mouse coordinates.
> Then Fmouse_position's would call mouse-position-function after the
> new C function returns. Then in term.c we could call just that new C
> function. This is because it is inappropriate for mouse_get_xy to
> call mouse-position-function when a menu is being processed.
That won't work. Making mouse_get_xy call mouse-position-function is
the
purpose of this change. mouse-position-function is how xterm-mouse
injects its calculated mouse positions to the TTY menus. From
searching
the Emacs codebase for usage of mouse-position-function, it appears
that
xterm-mouse is the only client. Of course external libraries could use
it too, but I assume they would have the same goal.
Okay, but mouse-position-function can be used for any number of
purposes. That it's currently used only by xterm-mouse in the Emacs
sources doesn't mean it isn't used elsewhere. The functions in that
variable are not necessarily meant to be called in the context of TTY
menus; that would be an incompatible change. So I still think we
shouldn't call mouse-position-function in general in the TTY menu
case, only when xterm-mouse is active. Please change the code to call
mouse-position-function only in that single case.
Perhaps a slightly more general way of doing that would be to
introduce another variable that a package must set for
mouse-position-function to be called in the context of TTY menus;
xterm-mouse will then bind that variable (or the TTY menu code in
menu-bar.el could do that for xterm-mouse). This way, we don't
hard-code xterm-mouse in the C sources.