Ich benutze oft GNU Screen, um Remote-Sitzungen am Leben zu erhalten. Da ich in Emacs lebe, möchte ich wirklich in der Lage sein, eine laufende Remote-Shell-Sitzung in Emacs fortzusetzen.
GNU Screen implementiert alle möglichen ausgefallenen Dinge wie Terminal-Multiplexing und Zeichenzeichnen, die ich wirklich nicht brauche. Ich bin wirklich nur daran interessiert, abnehmbare und wiederaufnehmbare Shell-Sitzungen zu haben, also etwas so Einfaches wie dtach
ausreichend.
Ich verwende diese Funktion, um eine SSH-Sitzung zu öffnen und eine Verbindung zu einer laufenden dtach
Sitzung wiederherzustellen shell-mode
(von hier aus ):
(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))))
Trotz kleinerer Macken funktioniert dies fast shell-mode
einwandfrei, aber in Eshell wird nur ein Unterprozess gestartet, sodass das Terminal sehr eingeschränkt wird (z. B. keine automatische Vervollständigung des Pfads).
Wie kann ich Eshell so konfigurieren, dass eine Verbindung zu einem laufenden Gerät hergestellt wird? dtach
Verbindung zu einem Remote-Server eine Sitzung hergestellt wird?
EDIT: Als ich wieder über dieses Problem nachdachte, wurde mir klar, dass es nicht ganz klar ist, was ich eigentlich will. Hier ist eine Liste:
- Ich möchte in Eshell bleiben, nicht in einem Teilprozess
- Beim erneuten Anschließen möchte ich, dass die Ausgabe der Remote-Sitzung wiedergegeben wird und der Remote-Befehlsverlauf verfügbar ist
- Ich möchte in der Lage sein, mit einem laufenden Remote-Prozess zu interagieren (z. B. einem laufenden
yum install
Warten auf meine Eingabe).
Es scheint, dass ich ein bisschen Elisp-Code schreiben muss, damit dies alles mit dtach funktioniert.
eshell
IST die Shell - konzeptionell scheint es mir, dass Sie nicht tun können, was Sie wollen, es sei denn, Sie greifen in der dtach-Sitzung auf einen laufenden Emacs mit einem Eshell-Puffer zu. Oder irre ich mich hier?eshell
den Grenzen zwischen lokal und fern ist und was ein externer Befehl und eine elisp-Funktion ist, verschwimmen. Ich möchte es noch unschärfer machen, damit Remote-Prozesse transparent mit ihnen interagieren können, als wären sie lokal. Das wäre fast das Gleiche wie die Wiederaufnahme einer laufenden Sitzung, denke ich.screen
innerhalb vonshell-mode
wird nicht gut funktionieren, dascreen
mehr als ein dummes Terminal benötigt wird.Antworten:
Vielleicht nicht zufriedenstellend, aber dieses Problem steht auf der Wunschliste von Tramp. Vielleicht wird es eines Tages implementiert.
Siehe die Diskussion über die Emacs Devel ML http://thread.gmane.org/gmane.emacs.devel/174131
quelle