|
From: | Dmitry Gutov |
Subject: | bug#66317: Project mode-line |
Date: | Thu, 19 Oct 2023 14:23:28 +0300 |
User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.13.0 |
On 19/10/2023 09:40, Juri Linkov wrote:
FWIW, I haven't been able to reproduce this so far.Unfortunately it's not easily reproducible.The bug occurs when multiple lines are displayed in the echo area. Then '(:eval (project-mode-line-format)) is called twice. At the end of the first call 'buffer-file-coding-system' is still correct: utf-8. But at the beginning of the second call it's already wrong: raw-text. I guess it was a mistake to allow specifying the project name in .dir-locals.el. A better place would be in ~/.emacs.d/projects.But project-name uses project--value-in-dir which uses a temporary buffer to apply all variables in.So it does this extensive work several times per second every time when the mode-line is updated? Then maybe better to cache the project name somewhere?
There is an existing caching mechanism IIUC based on the dir-locals' file mtime (see the description in dir-locals-find-file), which is better than nothing.
We could add something on top of it, but it would have to be a cache keyed on the directory (because project-name should return the right value inside C-x p p <choose other project> k, for example), and it would be invalidated once every 5 seconds or so (or use some other more advanced logic, but I'm not sure which).
Does that affect the original buffer somehow?Actually it doesn't affect the original buffer directly. When saving a buffer and the message is multi-line during saving, then '(project-mode-line-format)' is called twice, and the buffer coding is changed between these calls.
I suppose some global value like last-coding-system-used might create an interrelation between such calls. The use of a temp buffer should protect us from adverse effects, though.
I don't know where is this code that decides to evaluate mode-line-format twice in a row, and how this code is affected by temporary buffers used by project--value-in-dir.
I'm not sure what to recommend, but some print-debugging could help. E.g. just add a (backtrace) call inside project-mode-line-format.
But that's a lot of output to sort through, so there's definitely room for improvement in this recipe.
[Prev in Thread] | Current Thread | [Next in Thread] |