[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#70541: track-changes-mode logs warnings (with input method, in Eglot
From: |
Stefan Monnier |
Subject: |
bug#70541: track-changes-mode logs warnings (with input method, in Eglot buffer) |
Date: |
Mon, 29 Apr 2024 16:27:42 -0400 |
User-agent: |
Gnus/5.13 (Gnus v5.13) |
> This idea is good, if I understand it correctly, though I would
> prefer if Eglot interfaced only with track-changes.el, and
> it would tell it that it should momentarily halt reports
> of changes to the server.
I guess we could add a function `track-change-inconsistent-state-p`
which Eglot could consult before calling `track-changes-fetch` and if
that returns non-nil, Eglot could reschedule the update to "later".
But that would just be a kludge usable by some packages like Eglot
because they have the luxury to reschedule. For example, if some code
is run (e.g. via font-lock) which uses `syntax-ppss` while Quail's extra
chars are inserted, then `syntax-ppss` can't reschedule, and it may
record the resulting state in its cache after which
`inhibit-modification-hooks` may in turn prevent the cache from being
properly flushed when Quail removes its extra chars.
Removing the `inhibit-modification-hooks` would be a much
cleaner solution. I asked Kenichi why he added that binding (back in
2005), but he hasn't replied yet.
> Can someone clarify in a simple example exactly what Eglot tells
> the LSP server as someone is inputting something with the Quail.
> I need to understand exactly where the "lie" is happening.
Here's the scenario: the user wants to insert `xᵃ` using the TeX input
method (the same problem can occur with other methods, of course), so
Emacs will receive the following inputs:
x ^ a
but let's assume the user pauses between `^` and `a`.
At this point, the `before/after-change-functions` have been called to
announce the insertion of `x` and nothing more, but the buffer also has
an (unannounced) `^` inserted at point.
So the buffer's content as seen by `before/after-change-functions` (and
hence by the LSP server) is out of sync because of this additional `^`.
Since Quail does not call the `before/after-change-functions`, Eglot
doesn't specifically send Quail's input to the LSP server: in the above
scenario, `eglot--signal-textDocument/didChange` is called because the
`before/after-change-functions` was called in response to the previous
`x`.
Stefan
- bug#70541: track-changes-mode logs warnings (with input method, in Eglot buffer), (continued)
- bug#70541: track-changes-mode logs warnings (with input method, in Eglot buffer), Eli Zaretskii, 2024/04/24
- bug#70541: track-changes-mode logs warnings (with input method, in Eglot buffer), Stefan Monnier, 2024/04/24
- bug#70541: track-changes-mode logs warnings (with input method, in Eglot buffer), Eli Zaretskii, 2024/04/24
- bug#70541: track-changes-mode logs warnings (with input method, in Eglot buffer), João Távora, 2024/04/24
- bug#70541: track-changes-mode logs warnings (with input method, in Eglot buffer), Stefan Monnier, 2024/04/28
- bug#70541: track-changes-mode logs warnings (with input method, in Eglot buffer), Eli Zaretskii, 2024/04/29
- bug#70541: track-changes-mode logs warnings (with input method, in Eglot buffer), João Távora, 2024/04/29
- bug#70541: track-changes-mode logs warnings (with input method, in Eglot buffer), Ihor Radchenko, 2024/04/29
- bug#70541: track-changes-mode logs warnings (with input method, in Eglot buffer), Eli Zaretskii, 2024/04/29
- bug#70541: track-changes-mode logs warnings (with input method, in Eglot buffer), Ihor Radchenko, 2024/04/29
- bug#70541: track-changes-mode logs warnings (with input method, in Eglot buffer),
Stefan Monnier <=
- bug#70541: track-changes-mode logs warnings (with input method, in Eglot buffer), João Távora, 2024/04/29
- bug#70541: track-changes-mode logs warnings (with input method, in Eglot buffer), Stefan Monnier, 2024/04/29