From: Harald Kirsch <pifpafpuf@gmx.de>
To: Eli Zaretskii <eliz@gnu.org>
Cc: emacs-devel@gnu.org
Subject: Re: Any expert on font-lock machinery able to provide some insight
Date: Fri, 3 Jan 2025 14:57:00 +0100 [thread overview]
Message-ID: <a55ea3e0-ef48-4e61-8474-6a274a6f6959@gmx.de> (raw)
In-Reply-To: <86cyh4gh0t.fsf@gnu.org>
For better research I made a trivial example font lock function and call
it, to simulate the async server round-trip, on a timer like so:
;;; -*- lexical-binding: t; -*-
(defun eglot-semtok-request-fontification (&optional beg end loudly)
(message "front %s-%s" beg end)
(run-with-timer
0.1 nil
(lambda () (t-eglot-semtok-request-fontification beg end loudly)) ) )
(defun t-eglot-semtok-request-fontification (&optional beg end loudly)
(message "timer %s-%s" beg end)
(save-excursion
(font-lock-unfontify-region beg end)
(goto-char beg)
(while-let ((mend (re-search-forward "[a-z]+\\(-[a-z]+\\)+" end t))
(mstart (car (match-data))) )
(add-face-text-property mstart mend 'bold) ) ))
(setq font-lock-defaults
'(nil nil nil nil
(font-lock-fontify-region-function
. eglot-semtok-request-fontification )
(font-lock-fontify-buffer-function
. eglot-semtok-request-fontification ) ) )
- put into text file (easier to override font-lock)
- M-x eval-buffer
- M-x font-lock-mode
- M-x font-lock-mode
- insert a space near the top
- move cursor
See how for each cursor move the same front and timer messages are
shown. When configuring the t-... function directly in setq and starting
over, the extra font-lock calls are not seen.
How would eglot-semtok-request-fontification need to change, short of
actually fontifying everything, to lure font-locking into thinking all
is fine, no need to run again shortly after?
Harald.
On 03.01.25 14:32, Eli Zaretskii wrote:
> [Please use Reply All, to keep the list CC'ed.]
>
>> Date: Fri, 3 Jan 2025 13:44:04 +0100
>> From: Harald Kirsch <pifpafpuf@gmx.de>
>>
>> Hi Eli,
>>
>> thanks for the explanation.
>>
>> On 03.01.25 12:58, Eli Zaretskii wrote:
>> ...
>>>> But it seems I am missing another channel of information which triggers
>>>> font-locking too often.
>>>
>>> Why does it bother you that it happens too often?
>>
>> 1. I compare with elisp font-locking which is much less frequent.
>>
>> 2. It is eglot-semtok, which does an LSP server call to get font-lock
>> information. It is quick enough and I wouldn't have noticed without the
>> logging, but it seems a waste nevertheless.
>>
>>>> With describe-char I do see
>>>>
>>>> There are text properties here:
>>>> fontified defer
>>>>
>>>> not going away. Can this point to the problem?
>>>
>>> This should only happen with buffer positions that were not yet
>>> fontified. If the buffer position was already fontified, the value
>>> should be t.
>>
>> The buffer position was already fontified, so I should not see this. I
>> might be doing something wrong so that the font-lock machinery thinks,
>> font-locking did not happen. The actual fontification happens
>> asynchronously (due to the server roundtrip), but I thought I had given
>> the engine enough info pretending all is done. I don't fully understand,
>> how the decision is made to fontify again.
>>
>> Cheers
>> Harald
>>
next prev parent reply other threads:[~2025-01-03 13:57 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-03 10:26 Any expert on font-lock machinery able to provide some insight Harald Kirsch
2025-01-03 11:58 ` Eli Zaretskii
[not found] ` <91114d5a-4af9-4ae1-b7c9-b673e5edf25e@gmx.de>
2025-01-03 13:32 ` Eli Zaretskii
2025-01-03 13:57 ` Harald Kirsch [this message]
2025-01-03 16:09 ` Any expert on font-lock machinery able to provide some insight --- problem solved Harald Kirsch
2025-01-03 14:42 ` Any expert on font-lock machinery able to provide some insight John ff
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=a55ea3e0-ef48-4e61-8474-6a274a6f6959@gmx.de \
--to=pifpafpuf@gmx.de \
--cc=eliz@gnu.org \
--cc=emacs-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).