Wie starte ich eine Shell automatisch nach dem Start von Emacs?

8

Einer meiner Hauptgründe für die Verwendung von Emacs ist die Schaffung einer leistungsstarken Umgebung nach dem sshEinbau in einen Remote-Computer. Das erste, was ich nach dem Start von Emacs mache, ist M-x shell, eine Befehlszeile abzurufen. Da es eine Weile dauert, bis Emacs gestartet ist, ist es sehr praktisch, Emacs nach dem Parsen meiner Initialisierungsdatei zu bitten, eine Shell zu starten, wenn ich sie ausführe (ich habe einige Shell-Hooks eingerichtet, um das eine und das andere zu tun ). Idealerweise möchte ich es mit einer zusätzlichen Option ausführen können, damit ich meiner Initialisierungsdatei auf den Remotecomputern nichts Spezielles hinzufügen muss (ich könnte einen bashAlias einrichten, wenn ich möchte). Etwas wie das:

emacs afile1 afile2 -startShell

Angesichts der Tatsache, dass das Herstellen der sicheren Verbindung etwa 30 Sekunden dauert, möchte ich die "start a shell" in den sshBefehl selbst einbauen und sshmit " -tein bildschirmbasiertes Programm starten" .

ssh -t me@remote emacs afile1 afile2 -startShell

Ich habe mir die Dokumentation zu Befehlszeilenargumenten für Emacs angesehen, aber ich beginne immer noch mit Emacs und Lisp sowie der Anpassung, und es war nicht sofort klar, wie mit Befehlszeilenargumenten umgegangen werden soll. Wie würde ich das machen?

( Verwandte Frage zueshell vom Benutzer @Name erwähnt.)

TooTone
quelle
es kann :). ssh -t me@remote 'emacs -f shell'funktioniert wie ein Traum.
TooTone
@Name danke Ich habe es versucht, aber ich sagte, Sie könnten Ihren Kommentar als Antwort hinzufügen und ich würde ihn akzeptieren, weil er mein Problem behebt. Oder vielleicht sollte meine Frage als Duplikat markiert werden. Es wäre gut, es so oder so nicht offen zu lassen.
TooTone

Antworten:

4

Mit der Option -f können Sie eine Emacs-Funktion über die Befehlszeile aufrufen.

Der Kommentar zeigt, wie dies über ssh mit -t gemacht wird, und das ist eine Möglichkeit. Es hat jedoch einige Nachteile. Das wichtigste ist, dass Ihre Emacs remote ausgeführt werden. Dies bedeutet, dass Sie alle Ihre Emacs-Konfigurationsdaten auf dem Remote-System haben und einige lokal für Ihre lokale Version verwalten müssen. Sie verlieren auch etwas an Flexibilität, wenn Sie Dinge lokal und remote erledigen und sich vielleicht dazwischen bewegen möchten.

Eine Alternative wäre, Ihre Emacs lokal auszuführen und eine Shell über die Befehlszeile und dann ssh über diese Shell zu starten. Sie können tramp over ssh verwenden, um Dateien usw. zu bearbeiten, und dann die Shell verwenden, um eine interaktive ssh-Sitzung auszuführen.

emacs -f shell

Sobald Sie damit vertraut sind, können Sie sich einige der ssh-bezogenen Pakete für Emacs ansehen. Es sollte dann möglich sein, eine Funktion aus einem dieser Pakete über die Befehlszeile aufzurufen, um die Erstellung einer SSH-Sitzung zu automatisieren. Möglicherweise müssen Sie eine einfache Wrapper-Funktion schreiben, um dies zu vereinfachen. Dann müssen Sie nur noch 1 Emacs-Konfigurationssetup verwalten und erhalten zusätzliche Flexibilität.

Tim X.
quelle
1
Sie haben Recht damit, dass der Hauptnachteil der Verwendung ssh -t ... 'emacs -f shell'direkt von einem Terminal aus darin besteht, dass ich eine separate Remote-Emacs-Konfiguration auf dem neuesten Stand halten muss. Ich habe mit tramp herumgespielt und jetzt habe ich die Startzeit auf ein akzeptables Maß reduziert, da die gemeinsame Nutzung von SSH-Verbindungen verwendbar und äußerst hilfreich ist, um beispielsweise scpRemote-Dateinamen zu vervollständigen. Es ist jedoch immer noch keine nahtlose Lösung für die Ausführung innerhalb einer einzelnen Sitzung, und die Nachteile überwiegen derzeit die Vorteile.
TooTone
Andere ssh-Optionen, die hilfreich sein können, umfassen das Erreichen der richtigen SSH-Komprimierungsstufe. Was sind die Unannehmlichkeiten für eine einzelne Sitzung, die Sie haben?
Tim X
Ich hatte gestern ein Problem, bei dem eine von mir geöffnete Datei schreibgeschützt war, und auch wenn ich dies tue, wird sshdie Eingabeaufforderung mit einigen ^vorangestellten Zeichen schlecht angezeigt . Heute habe ich es erneut versucht und das Bearbeiten von Dateien ist nahtlos, aber die Eingabeaufforderung ist immer noch durcheinander. Mein Verdacht ist auch, dass nicht alles nahtlos sein wird. agZum Beispiel hat das Ausführen einen Prozess auf dem Remote-Computer ausgelöst, aber ich hatte weniger Glück beim Ausführen eines rgrep. Es scheint sicher, dass es sich lohnt, mehr darüber nachzudenken ( github.com/ieure/ssh-el auf melpa sieht interessant aus), wenn ich Zeit habe - und alle Fragen auf dieser Site zurückzusenden. Danke, dass du es angesprochen hast.
TooTone
Abhängig von Ihrem Anwendungsfall kann es eine Herausforderung sein, Tramp genau richtig zu machen, aber die Mühe lohnt sich. Die durcheinandergebrachte Eingabeaufforderung klingt so, als hätten Sie möglicherweise ansifarbige Escape-Zeichen. Möglicherweise muss das Ansi-Color-Paket geladen werden. Versuchen Sie auch, nur Tramp ohne Konfiguration zu verwenden - die Standardeinstellungen sind normalerweise genau richtig. Tamp ist leistungsstark, aber manchmal komplex zu konfigurieren.
Tim X