Jordan Ellis Coppard <jc+o.em...@wz.ht> writes:

> Hello Michael,

Hi Jordan,

> For my "jam" connection if I disable it being a direct-async-process
> eglot works fine; however if it is a direct-async-process eglot does not
> work. It looks like eglot can at least invoke the remote lsp but
> afterwards for whatever reason eglot thinks it dies.
>
> My guess is that eglot might be reading the response of an unrelated
> tramp command and eglot then fails to decode that response (since it's
> not meant for it) and dies as a result.

You might enable Eglot (or jsonrpc) traces in order to prove this.

> I wonder if it's possible to get this working nicely, especially since
> eglot is a built-in package. I did some searching and saw previous
> mentions of problems with lsp-mode and direct-async-process one of which
> you commented on but no resolution as of yet.

There is also bug#61350. Long discussion ...

It started with discussion of ssh settings (not relevant for you). But
then, the second part discusses the concurrent accept-process-output
problem, no proper solution 'tho.

And there's the difference that this bug does not discuss the direct
async case.

Anyway, I hope you'll find something useful in the Eglot traces. From
the Tramp pov, everything looks OK:

> 01:45:16.104210 tramp-send-command (6) # test -e /home/jammy/project/ 
> 2>/dev/null; echo tramp_exit_status $?
> 01:45:16.105482 tramp-wait-for-regexp (6) #
> tramp_exit_status 0
> ///310e327f7778448f90c65a48eaaa112f#$

This is the last Tramp command send prior to the direct async call.

> 01:45:16.108552 tramp-handle-make-process (6) # podman exec -it -e TERM=dumb 
> -u jammy --workdir /home/jammy/project jam-zevem /bin/sh --noediting --norc 
> --noprofile -c cd /home/jammy/project/ && ( env 
> INSIDE_EMACS\=31.0.50\,tramp\:2.8.0-pre HISTFILE\=\~/.tramp_history 
> PATH\=/home/jammy/bin\:/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
>  ENV\=\'\' TMOUT\=0 LC_CTYPE\=\'\' CDPATH\= HISTORY\= MAIL\= MAILCHECK\= 
> MAILPATH\= PAGER\=cat autocorrect\= correct\= /bin/sh -c stty\ raw\ \>\ 
> /dev/null\;\ zls )

This is the direct async call. Looks proper to me (but lengthy
...). After the call, Tramp isn't involved anymore in that process.

> 01:45:16.109232 tramp-send-command (6) # (if test -h "/home/jammy/project/"; 
> then echo t; else echo nil; fi) && \readlink --canonicalize-missing 
> /home/jammy/project/ 2>/dev/null; echo tramp_exit_status $?
> 01:45:16.113969 tramp-wait-for-regexp (6) #
> nil
> /home/jammy/project
> tramp_exit_status 0
> ///310e327f7778448f90c65a48eaaa112f#$
> 01:45:16.269247 tramp-send-command (6) # (if test -h 
> "/home/jammy/project/src/evm.zig"; then echo t; else echo nil; fi) && 
> \readlink --canonicalize-missing /home/jammy/project/src/evm.zig 2>/dev/null; 
> echo tramp_exit_status $?
> 01:45:16.274466 tramp-wait-for-regexp (6) #
> nil
> /home/jammy/project/src/evm.zig
> tramp_exit_status 0
> ///310e327f7778448f90c65a48eaaa112f#$

These are some other internal Tramp commands, they look normal.

One idea: Open a local shell in your Emacs, and call there

--8<---------------cut here---------------start------------->8---
# podman exec -it -e TERM=dumb -u jammy --workdir /home/jammy/project jam-zevem 
/bin/sh --noediting --norc --noprofile -c cd /home/jammy/project/ && ( env 
INSIDE_EMACS\=31.0.50\,tramp\:2.8.0-pre HISTFILE\=\~/.tramp_history 
PATH\=/home/jammy/bin\:/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
 ENV\=\'\' TMOUT\=0 LC_CTYPE\=\'\' CDPATH\= HISTORY\= MAIL\= MAILCHECK\= 
MAILPATH\= PAGER\=cat autocorrect\= correct\= /bin/sh -c stty\ raw\ \>\ 
/dev/null\;\ zls )
--8<---------------cut here---------------end--------------->8---

See whether it comunicates.

> I hope you're well,

It's going better, fortunately.

> /Jordan

Best regards, Michael.

Reply via email to