Function: eglot
eglot is an autoloaded, interactive and byte-compiled function defined
in eglot.el.gz.
Signature
(eglot MANAGED-MAJOR-MODE PROJECT CLASS CONTACT LANGUAGE-ID &optional INTERACTIVE)
Documentation
Start LSP server in support of PROJECT's buffers under MANAGED-MAJOR-MODE.
This starts a Language Server Protocol (LSP) server suitable for the
buffers of PROJECT whose major-mode is MANAGED-MAJOR-MODE.
CLASS is the class of the LSP server to start and CONTACT specifies
how to connect to the server.
Interactively, the command attempts to guess MANAGED-MAJOR-MODE
from the current buffer's major-mode, CLASS and CONTACT from
eglot-server-programs looked up by the major mode, and PROJECT from
project-find-functions. The search for active projects in this
context binds eglot-lsp-context (which see).
If it can't guess, it prompts the user for the mode and the server.
With a single C-u (universal-argument) prefix arg, it always prompts for COMMAND.
With two C-u (universal-argument), it also always prompts for MANAGED-MAJOR-MODE.
The LSP server of CLASS is started (or contacted) via CONTACT.
If this operation is successful, current *and future* file
buffers of MANAGED-MAJOR-MODE inside PROJECT become "managed"
by the LSP server, meaning the information about their contents is
exchanged periodically with the server to provide enhanced
code-analysis via xref-find-definitions, flymake-mode(var)/flymake-mode(fun),
eldoc-mode(var)/eldoc-mode(fun), and completion-at-point, among others.
PROJECT is a project object as returned by project-current.
CLASS is a subclass of eglot-lsp-server(var)/eglot-lsp-server(fun).
CONTACT specifies how to contact the server. It is a
keyword-value plist used to initialize CLASS or a plain list as
described in eglot-server-programs, which see.
LANGUAGE-ID is the language ID string to send to the server for MANAGED-MAJOR-MODE, which matters to a minority of servers.
INTERACTIVE is ignored and provided for backward compatibility.
Probably introduced at or before Emacs version 29.1.
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/eglot.el.gz
;;;###autoload
(defun eglot (managed-major-mode project class contact language-id
&optional _interactive)
"Start LSP server in support of PROJECT's buffers under MANAGED-MAJOR-MODE.
This starts a Language Server Protocol (LSP) server suitable for the
buffers of PROJECT whose `major-mode' is MANAGED-MAJOR-MODE.
CLASS is the class of the LSP server to start and CONTACT specifies
how to connect to the server.
Interactively, the command attempts to guess MANAGED-MAJOR-MODE
from the current buffer's `major-mode', CLASS and CONTACT from
`eglot-server-programs' looked up by the major mode, and PROJECT from
`project-find-functions'. The search for active projects in this
context binds `eglot-lsp-context' (which see).
If it can't guess, it prompts the user for the mode and the server.
With a single \\[universal-argument] prefix arg, it always prompts for COMMAND.
With two \\[universal-argument], it also always prompts for MANAGED-MAJOR-MODE.
The LSP server of CLASS is started (or contacted) via CONTACT.
If this operation is successful, current *and future* file
buffers of MANAGED-MAJOR-MODE inside PROJECT become \"managed\"
by the LSP server, meaning the information about their contents is
exchanged periodically with the server to provide enhanced
code-analysis via `xref-find-definitions', `flymake-mode',
`eldoc-mode', and `completion-at-point', among others.
PROJECT is a project object as returned by `project-current'.
CLASS is a subclass of `eglot-lsp-server'.
CONTACT specifies how to contact the server. It is a
keyword-value plist used to initialize CLASS or a plain list as
described in `eglot-server-programs', which see.
LANGUAGE-ID is the language ID string to send to the server for
MANAGED-MAJOR-MODE, which matters to a minority of servers.
INTERACTIVE is ignored and provided for backward compatibility."
(interactive
(let ((current-server (eglot-current-server)))
(unless (or (null current-server)
(y-or-n-p "\
[eglot] Shut down current connection before attempting new one?"))
(user-error "[eglot] Connection attempt aborted by user."))
(prog1 (append (eglot--guess-contact t) '(t))
(when current-server (ignore-errors (eglot-shutdown current-server))))))
(eglot--connect (eglot--ensure-list managed-major-mode)
project class contact language-id))