emacs-devel
[Top][All Lists]
Advanced

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

Re: Colorful line numbers


From: João Távora
Subject: Re: Colorful line numbers
Date: Fri, 22 Jul 2022 13:02:01 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux)

Eli Zaretskii <eliz@gnu.org> writes:

>> Does checking for a given text property on some buffer text call into
>> Lisp?  If it isn't, and it's cheap, then this hypothetical feature could
>> have very low overhead when not used.
> You want the line number to have the same face as the character
> displayed immediately after it?

Not the "same face", rather some face which is the result of querying
text properties on that text. 

> That can be done from C without calling Lisp, but how would that work
> reliably?  Any change in the buffer text will risk breaking the
> feature.

It's up to the Lisp package that is interested in this functionality to
set or unset the correct text property. 

> And even this is already a complication I'd like to avoid: line number
> of a line is rendered before we examine the buffer text of the line
> (and even know whether there is any text there).  Now we would need to
> look forward in the buffer and get text properties of that text.
> Which might not work correctly, btw, if jit-lock was not yet invoked
> to produce the faces there.

See above. This wouldn't be a problem because I'm not interesting in
choosing the same face that jit-lock selected.  The indirection would be
some text property, say line-number-face

> Likewise if the line is hscrolled, so
> that the first character displayed to the right of the line number is
> not the first character of the physical line.

It would be up to the Lisp package to propertize the whole line with
'line-number-face'.

>> Even if you're opposed the idea, could you perhaps some pointers on how
>> to implement it, so that I try my hand at it and benchmark the
>> before/after?
>
> The implementation is in maybe_produce_line_number in xdisp.c.

Yes, I've seen it (this is would I discovered the closed set of faces).
But I'm not familiar with xdisp.c code and how to get to the buffer text
about to be displayed besides the line number (if it indeed exists) and
the associated text properties of that text.  The only argument passed
to maybe_produce_line_number is a 'struct it'.  How to go from there to
any valid buffer position of the same line that the 'struct it' refers
to?

> You can change the colors of the text without affecting the line
> numbers.  Line numbers have a distinct face for a good reason.

See above.  I'm not interested in having line number have exactly the
same face/color as any one of the characters in the buffer text.

>> I've recently discovered Jay Kamat's most excellent rmsbolt.el.  It is
>> is even better than godbolt.org in many aspects but is missing this last
>> feature, which I would like to add.  But instead of highlighting the
>> whole line, I thought it would be nicer and less distracting if I just
>> highlighted the line number's background.
>
> Why not put some indication on the fringe instead?

I'm experimenting with that, too.  Not the fringe, since it only works
on graphical displays, but the margin.

>> > And if they aren't enough, why cannot you use line-number-mode?
>> I do use line-number-mode, but I don't understand how it can help me
>> here.  AFAIK it shows me one line number at a time in the modeline, not
>> besides the text.
> Sorry, I meant linum-mode.

Ah.  I could indeed, but I would still like to experiment with the
display-line-numbers-mode.

João



reply via email to

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