]> git.eshelyaron.com Git - emacs.git/commitdiff
Run connection hooks with proper dir-locals
authorJoão Távora <joaotavora@gmail.com>
Wed, 2 Jan 2019 17:12:36 +0000 (17:12 +0000)
committerJoão Távora <joaotavora@gmail.com>
Wed, 2 Jan 2019 20:29:26 +0000 (20:29 +0000)
eglot-connect-hook and eglot-server-initialized-hook must run in a
buffer with properly setup directory-local variables for the project.

This is crucial for things like eglot-signal-didChangeConfiguration,
which needs a properly setup value of eglot-workspace-configuration to
succeed.

I could have chosen any of the buffers where Eglot is activating
itself, but the approach using
hack-dir-local-variables-non-file-buffer seems more correct, despite
the name.

* eglot.el (eglot--connect): Run connection hooks with proper
dir-locals.

GitHub-reference: fix https://github.com/joaotavora/eglot/issues/196

lisp/progmodes/eglot.el

index 4416e52c705cf05c0c0373fa9d12525b9069b675..39f484220aa3ebffe2f86a8cd7612980add6286c 100644 (file)
@@ -840,8 +840,11 @@ This docstring appeases checkdoc, that's all."
                                    (lambda ()
                                      (setf (eglot--inhibit-autoreconnect server)
                                            (null eglot-autoreconnect)))))))
-                          (run-hook-with-args 'eglot-connect-hook server)
-                          (run-hook-with-args 'eglot-server-initialized-hook server)
+                          (let ((default-directory (car (project-roots project)))
+                                (major-mode managed-major-mode))
+                            (hack-dir-local-variables-non-file-buffer)
+                            (run-hook-with-args 'eglot-connect-hook server)
+                            (run-hook-with-args 'eglot-server-initialized-hook server))
                           (eglot--message
                            "Connected! Server `%s' now managing `%s' buffers \
 in project `%s'."