]> git.eshelyaron.com Git - emacs.git/commit
Make eglot-ensure's post-command-hook run a bit later (bug#62065)
authorJoão Távora <joaotavora@gmail.com>
Sun, 12 Mar 2023 18:19:40 +0000 (18:19 +0000)
committerJoão Távora <joaotavora@gmail.com>
Sun, 12 Mar 2023 18:43:35 +0000 (18:43 +0000)
commitb916ec88b2ffe22a49128f17cdfb78f0ab1bc713
treecf8cfe39528013796d8494a6244da5a339963d9a
parent1c05175c21adc5e3af4ea518f25b76be4c60abed
Make eglot-ensure's post-command-hook run a bit later (bug#62065)

'eglot-ensure', typically used in the major-mode-hook, use
'post-command-hook' to schedule an automated, non-interactive
connection attempt to a server.  The goal is to connect when the
buffer is ready, i.e. after the user command that found the file.

However, if there are dir-local or buffer-local variables to confirm,
finding the file will cause a minibuffer prompt to appear.

In that case, 'eglot-ensure's addition to the global post-command-hook
runs before it was intended too and a connection is started
prematurely.

In turn, this means that a call to 'hack-dir-local-variables' -- which
is part of the connection process -- which also needs a minibuffer
prompt, collides with the previous one.  This generates an error and
confuses the user, who doesn't know if the directory-local variables
have been applied or not.

This commit fixes the clash by having 'eglot-ensure' set
'post-command-hook' buffer-locally.  This causes the automated
connection to take place, as intended, after the user's original
file-finding command has ended.

However, the problem reported in bug#62065 is not completely fixed.
If the user answers "no" to the first "confirm local variables"
"prompt, she will be prompted again in the second one.  A subsequent
commit will address this separate problem.

* lisp/progmodes/eglot.el (eglot-ensure): Use buffer-local post-command-hook.
lisp/progmodes/eglot.el