L'une de mes principales raisons d'utiliser Emacs est d'obtenir un environnement puissant après avoir ssh
intégré une machine distante. La première chose que je fais après avoir démarré Emacs est d'exécuter M-x shell
pour obtenir une ligne de commande. Comme Emacs met un peu de temps à démarrer, il serait très pratique d'avoir une option pour demander à Emacs de démarrer un shell lorsque je l'exécute, après avoir analysé mon fichier d'initialisation (j'ai des hooks shell configurés pour faire une chose et une autre ). Idéalement, j'aimerais pouvoir l'exécuter avec une option supplémentaire afin de ne pas avoir à ajouter quoi que ce soit de spécifique à mon fichier d'initialisation sur les machines distantes (je pourrais configurer un bash
alias si je le voulais). Quelque chose comme ça:
emacs afile1 afile2 -startShell
En fait, étant donné que l'établissement de la connexion sécurisée prend environ 30 secondes, ce que j'aimerais vraiment faire, c'est construire le "démarrer un shell" dans la ssh
commande elle-même, en utilisant ssh
avec -t
pour démarrer un programme basé sur l'écran .
ssh -t me@remote emacs afile1 afile2 -startShell
J'ai jeté un œil à la documentation des arguments de ligne de commande pour Emacs, mais je commence toujours par Emacs et Lisp et la personnalisation et il n'était pas immédiatement évident de savoir comment traiter les arguments de ligne de commande. Comment pourrais-je procéder?
( Question connexeeshell
mentionnée par l'utilisateur @Name.)
ssh -t me@remote 'emacs -f shell'
fonctionne comme un rêve.Réponses:
Vous pouvez utiliser le commutateur -f pour appeler une fonction emacs à partir de la ligne de commande.
Le commentaire montre comment faire cela sur ssh en utilisant -t et c'est une façon. Cependant, il présente certains inconvénients. Le principal est que votre emacs en cours d'exécution à distance, ce qui signifie que vous devrez avoir tous vos trucs de configuration emacs sur le système distant ainsi que maintenir certains localement pour votre version locale. Vous perdez également une certaine flexibilité si vous voulez faire des choses localement et à distance et peut-être vous déplacer entre les deux.
Une alternative serait d'exécuter vos emacs localement et de démarrer un shell à partir de la ligne de commande, puis ssh à partir de ce shell. Vous pouvez utiliser tramp over ssh pour modifier des fichiers, etc., puis utiliser le shell pour exécuter une session interactive ssh.
Une fois que vous êtes à l'aise avec cela, vous pouvez consulter certains des packages liés à ssh pour emacs. Il devrait alors être possible d'appeler une fonction à partir de l'un de ces packages à partir de la ligne de commande pour automatiser la création d'une session ssh. Vous devrez peut-être écrire une fonction d'encapsuleur simple pour rendre cela plus facile. Ensuite, vous n'aurez qu'une seule configuration de configuration emacs à gérer et vous obtenez une flexibilité supplémentaire.
la source
ssh -t ... 'emacs -f shell'
directe à partir d'un terminal est que je dois garder à jour une configuration emacs distincte. J'ai joué avec tramp, et maintenant j'ai réduit le temps de démarrage à un niveau acceptable avec le partage de connexion ssh, il est utilisable et extrêmement utile pour, par exemple, l'scp
achèvement des noms de fichiers distants. Cependant, ce n'est toujours pas une solution transparente pour fonctionner dans une seule session, et ses inconvénients l'emportent actuellement sur ses avantages.ssh
l'invite s'affiche mal avec certains^
caractères préfixés. Aujourd'hui, j'ai réessayé et l'édition des fichiers est transparente, mais l'invite est toujours foirée. De plus, je soupçonne que tout ne sera pas transparent. Par exemple, l'exécutionag
a déclenché un processus sur la machine distante, mais j'ai eu moins de chance de le fairergrep
. Il semble certainement que cela mérite d'être approfondi ( github.com/ieure/ssh-el sur melpa semble intéressant) quand j'ai le temps - et de poster des questions sur ce site; merci de l'avoir soulevé.