Comment démarrer un shell automatiquement après avoir démarré emacs


8

L'une de mes principales raisons d'utiliser Emacs est d'obtenir un environnement puissant après avoir sshintégré une machine distante. La première chose que je fais après avoir démarré Emacs est d'exécuter M-x shellpour 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 bashalias 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 sshcommande elle-même, en utilisant sshavec -tpour 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.)


ça peut :). ssh -t me@remote 'emacs -f shell'fonctionne comme un rêve.
TooTone

@Name merci Je l'ai essayé, mais je disais que vous pouviez ajouter votre commentaire comme réponse et je l'accepterais car il résout mon problème. Ou peut-être que ma question devrait être marquée en double. Il serait bon de ne pas le laisser ouvert, de toute façon.
TooTone

Réponses:


4

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.

emacs -f shell

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.


1
Vous avez raison en ce sens que le principal inconvénient de l'utilisation 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' scpachè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.
TooTone

D'autres options ssh peuvent aider à obtenir le bon niveau de compression ssh. Quels sont les inconvénients d'une session unique que vous rencontrez?
Tim X

J'ai eu un problème hier où un fichier que j'ai ouvert était en lecture seule, et aussi lorsque je fais sshl'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écution aga déclenché un processus sur la machine distante, mais j'ai eu moins de chance de le faire rgrep. 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é.
TooTone

En fonction de votre cas d'utilisation, obtenir le clochard exactement à droite peut être un défi, mais cela en vaut la peine. L'invite foirée sonne comme si vous pouviez avoir des caractères d'échappement ansi-color. Peut-être que le paquet ansi-color doit être chargé. Aussi, essayez simplement d'utiliser Tramp sans aucune configuration - les valeurs par défaut sont généralement parfaites. Tamp est puissant, mais parfois complexe à configurer.
Tim X
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.