emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] User-defined fringe tooltips (a request for review)


From: Vladimir Kazanov
Subject: Re: [PATCH] User-defined fringe tooltips (a request for review)
Date: Tue, 26 Mar 2024 22:16:02 +0000

Hey,

I just did a deep dive into the code again - looking for a cleaner solution.

> The condition is only evaluated at glyph generation time, as for any
> other display property.  When the tooltip should be displayed, the
> condition is not relevant, since if it were false when the glyphs were
> generated, you wouldn't have had the fringe bitmap shown in the first
> place.
>
> However, I think there's an easy way of making the implementation
> easier: just introduce a new overlay property called, say,
> fringe-help-echo, and put that property on the same text as the
> display property which produces the fringe.  Then the code in
> note_fringe_highlight should simply check if the text which yielded
> the fringe bitmap also has this special property on it, and if so,
> display the tooltip.

Maybe an even easier solution would work:

1. Record buffer position of the fringe display spec in struct it.
Then move it to glyph_row the same way user_fringe_bitmap_id's are
copied over.  It is just a ptrdiff so nothing out of place for
glyph_rows.

2. In note_fringe_highlight it becomes easy to retrieve the fringe
display spec using a single call to get_char_property_and_overlay(),
no need to iterate over a line, or have the implementation detail leak
into text properties.

What I don't really understand is whether I should handle overlays
with after-string/before-string properties. Overlays can contain
strings propertized with fringe display specs as well. In fact, there
is an example showing this trick in the manual
(https://www.gnu.org/software/emacs/manual/html_node/elisp/Fringe-Bitmaps.html).

Should I just go through all overlays touching the spec position and
parse into the after-string/before-string as well?

Pardon the many questions, display code has many moving parts.

Thank you

-- 
Regards,

Vladimir Kazanov



reply via email to

[Prev in Thread] Current Thread [Next in Thread]