[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#62795: 29.0.90; eglot: gdscript default port is 6005
From: |
João Távora |
Subject: |
bug#62795: 29.0.90; eglot: gdscript default port is 6005 |
Date: |
Sun, 16 Apr 2023 12:08:50 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) |
Ruijie Yu <ruijie@netyu.xyz> writes:
> TLDR: I think the Melpa package "gdscript-mode" needs to define a
> function `gdscript-mode-find-lsp', and eglot needs decide how to use
> this function to get the port number. Elaborations below.
>
> xiliuya via "Bug reports for GNU Emacs, the Swiss army knife of text editors"
> <bug-gnu-emacs@gnu.org> writes:
>
>> João Távora <joaotavora@gmail.com> writes:
>>
>>> I see. So it's not an inferior process to Emacs. Then
>>> maybe a function can be crafted in Elisp -- and housed
>>> in gdscript-mode -- that somehow discovers if the Godot
>>> Engine is running and finds the correct port. Then
>>> gdscript-mode can add that function to eglot-server-programs.
>>
>> I wrote this function to add gdscript-mode:
>> -----
>> (defun eglot-add-gdscript-lsp ()
>> (let* ((lsp-port (string-to-number
>> (shell-command-to-string
>> "awk -F'=' '/network\\/language_server\\/remote_port/
>> {print $2;}' $HOME/.config/godot/editor_settings-4.tres")))
>> (lsp-list (cons 'gdscript-mode (list "localhost" lsp-port
>> ))))
>> (push lsp-list
>> eglot-server-programs)))
>> -----
We're getting closer, but this is not what I meant at all. It's much
simpler.
(defun gdscript-eglot-contact (&optional _interactive)
"Produce a suitable value for LSP contact in `eglot-server-programs'."
(list "localhost"
(string-to-number
(shell-command-to-string
"awk -F'=' '/network\\/language_server\\/remote_port/ {print $2;}'
$HOME/.config/godot/editor_settings-4.tres"))))
In your configuration, or in gdscript-mode.el directly
(add-to-list 'eglot-server-programs
'(gdscript-mode . gdscript-eglot-contact))
Do you follow the idea? You can add a function object to
eglot-server-programs _instead_ of the host/port list. The docstring of
eglot-server-programs should be clear on the matter.
[...]
CONTACT can be:
[...]
* A list (HOST PORT [TCP-ARGS...]) where HOST is a string and
PORT is a positive integer for connecting to a server via TCP.
[...]
* A function of a single argument producing any of the above
values for CONTACT. The argument's value is non-nil if the
connection was requested interactively (e.g. from the `eglot'
command), and nil if it wasn't (e.g. from `eglot-ensure'). If
the call is interactive, the function can ask the user for
hints on finding the required programs, etc. Otherwise, it
should not ask the user for any input, and return nil or signal
an error if it can't produce a valid CONTACT. [...]
If it's not clear, let us know.
Another detail: I think the use of `awk` can probably be be optimized
away Elisp code for processing text. Same for the shell use of $HOME
which is also has an Elisp abstraction (see docstring of
`expand-file-name`). In theory, you don't need shell-command-to-string
at all.
If the function is made simple enough and portable across operating
systems where the Godot engine runs, then a lambda version of it can be
added to eglot.el IMO. But it's really better to add it to
gdscript-mode.el, wherever it is maintained.
João
- bug#62795: 29.0.90; eglot: gdscript default port is 6005, (continued)
- bug#62795: 29.0.90; eglot: gdscript default port is 6005, João Távora, 2023/04/15
- bug#62795: 29.0.90; eglot: gdscript default port is 6005, xiliuya, 2023/04/15
- bug#62795: 29.0.90; eglot: gdscript default port is 6005, Ruijie Yu, 2023/04/16
- bug#62795: 29.0.90; eglot: gdscript default port is 6005, xiliuya, 2023/04/16
- bug#62795: 29.0.90; eglot: gdscript default port is 6005, Ruijie Yu, 2023/04/16
- bug#62795: 29.0.90; eglot: gdscript default port is 6005, xiliuya, 2023/04/16
- bug#62795: 29.0.90; eglot: gdscript default port is 6005,
João Távora <=
- bug#62795: 29.0.90; eglot: gdscript default port is 6005, xiliuya, 2023/04/16
- bug#62795: 29.0.90; eglot: gdscript default port is 6005, Ruijie Yu, 2023/04/17
- bug#62795: 29.0.90; eglot: gdscript default port is 6005, Ruijie Yu, 2023/04/17
- bug#62795: 29.0.90; eglot: gdscript default port is 6005, xiliuya, 2023/04/17
- bug#62795: 29.0.90; eglot: gdscript default port is 6005, João Távora, 2023/04/16