Dołącz do uruchomionej zdalnej powłoki za pomocą eshell / TRAMP / dtach

11

Często używam GNU Screen do utrzymywania sesji zdalnych przy życiu. Ponieważ mieszkam w Emacsie, naprawdę chciałbym móc wznowić uruchomioną sesję powłoki zdalnej z poziomu Emacsa.

GNU Screen implementuje różne fantazyjne rzeczy, takie jak multipleksowanie terminali i rysowanie postaci, których tak naprawdę nie potrzebuję. Naprawdę interesuje mnie tylko możliwość odłączania i wznawiania sesji powłoki, więc coś tak prostego, jak dtachmogłoby być wystarczające.

Korzystam z tej funkcji, aby otworzyć sesję SSH i ponownie połączyć się z uruchomioną dtachsesją w shell-mode(wzięte stąd ):

(defun ssh-dtach (host)
  "Open SSH connection to remote host and attach to dtach session."
  (interactive)
  (let ((explicit-shell-file-name "dtach")
        (explicit-dtach-args '("-A" "/tmp/emacs.dtach" "-z"
                               "/bin/bash" "--noediting" "-login"))
        (default-directory (format  "/ssh:%s:" host)))
    (shell (format "*ssh %s*" host))))

Pomimo drobnych dziwactw, działa to prawie w porządku shell-mode, ale w Eshell po prostu uruchamia podproces, więc terminal staje się bardzo ograniczony (np. Brak autouzupełniania ścieżki).

Jak skonfigurować Eshell do łączenia się z uruchomioną dtachsesją po połączeniu ze zdalnym serwerem?

EDYCJA: Kiedy ponownie pomyślałem o tym problemie, zdałem sobie sprawę, że nie jest całkowicie jasne, czego tak naprawdę chcę. Oto lista:

  • Chcę pozostać w eshell, a nie w jakimś podprocesie
  • po ponownym podłączeniu chcę odtworzyć dane wyjściowe sesji zdalnej i udostępnić historię poleceń zdalnych
  • Chcę mieć możliwość interakcji z uruchomionym procesem zdalnym (np. Uruchomieniem yum installczekającym na moje dane wejściowe)

Wygląda na to, że muszę napisać trochę kodu elisp, aby wszystko działało z dtach.

rekado
źródło
tryb powłoki współdziała z procesem powłoki, eshellJEST powłoką - więc koncepcyjnie wydaje mi się, że nie możesz robić tego, co chcesz, chyba że uzyskasz dostęp do działającego emacsa za pomocą bufora eshell w sesji dtach. A może się mylę?
Tom Regner
W eshellliniach między tym, co lokalne, a tym, co zdalne, a tym, co jest poleceniem zewnętrznym i funkcją elisp, zaciera się. Chciałbym, aby było jeszcze bardziej niewyraźne, aby zdalnie działające procesy mogły być obsługiwane w sposób transparentny, jakby były lokalne. Myślę, że to prawie tak samo, jak „wznawianie” trwającej sesji.
rekado
@sds: uruchamianie screenwewnątrz shell-modenie działa dobrze, ponieważ screenwymaga więcej niż głupiego terminala.
rekado

Odpowiedzi: