J'utilise souvent GNU Screen pour garder les sessions distantes en vie. Depuis que je vis dans Emacs, j'aimerais vraiment pouvoir reprendre une session shell distante en cours d'exécution depuis Emacs.
GNU Screen implémente toutes sortes de choses fantaisistes comme le multiplexage de terminaux et le dessin de caractères dont je n'ai vraiment pas besoin. Je ne suis vraiment intéressé que par des sessions shell détachables et pouvant être reprises, donc quelque chose d'aussi simple que cela dtach
pourrait suffire.
J'utilise cette fonction pour ouvrir une session SSH et me reconnecter à une dtach
session en cours d' exécution shell-mode
(prise à partir d' ici ):
(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))))
Malgré des bizarreries mineures, cela fonctionne presque bien shell-mode
, mais dans Eshell, cela ne fait que démarrer un sous-processus, de sorte que le terminal devient très limité (par exemple, aucune autocomplétion de chemin).
Comment puis-je configurer Eshell pour se connecter à une dtach
session en cours lors de la connexion à un serveur distant?
EDIT: En repensant à ce problème, je me suis rendu compte que ce que je voulais réellement n'était pas tout à fait clair. Voici une liste:
- Je veux rester en eshell, pas dans un sous-processus
- lors du rattachement, je souhaite que la sortie de la session distante soit rejouée et que l'historique des commandes distantes soit disponible
- Je veux pouvoir interagir avec un processus distant en cours d'exécution (par exemple, une course en
yum install
attente de mon entrée)
Il semble que j'aurai besoin d'écrire un peu de code elisp pour que tout cela fonctionne avec dtach.
eshell
les lignes entre ce qui est local et ce qui est distant et ce qui est une commande externe et une fonction elisp sont floues. Je voudrais le rendre encore plus flou de sorte que les processus d'exécution à distance puissent être interagis de manière transparente comme s'ils étaient locaux. Ce serait presque la même chose que de «reprendre» une session en cours, je pense.
screen
à l' intérieur de shell-mode
ne fonctionnera pas bien, car il screen
nécessite plus qu'un terminal stupide.
eshell
EST le shell - donc conceptuellement il me semble que vous ne pouvez pas faire ce que vous voulez, sauf si vous accédez à un emacs en cours d'exécution avec un tampon eshell dans la session dtach. Ou je me trompe ici?