Ich starte meinen Emacs viel neu. Ich möchte nur eine Funktion erstellen, die die aktuellen Emacs abschaltet und stattdessen eine neue erzeugt. Idealerweise würde dies auch in einem TTY funktionieren.
terminal-emacs
PythonNut
quelle
quelle
.emacs.d
, was bedeutet, dass ich Emacs neu starte, um den Müll zu entfernen, den ich in meine Umgebung gesprengt habe. Es gibt einige andere Anwendungsfälle, in denen ich das mache, aber das ist der größte.bash
, nach dem Beenden neu zu starten? Odervi
? Oder irgendein anderer Prozess in der Regel? Nein, da dies außerhalb ihres Anliegenbereichs liegt und von außen ordnungsgemäß gehandhabt wird. Was Sie auf jeden Fall wirklich wollen, ist eine Möglichkeit, Emacs neu zu initialisieren , indem Sie die VM löschen und Ihren Init-Code erneut ausführen ( ohne den Prozess zu beenden ). Das wäre nützlich und angemessen für Emacs. Ich weiß allerdings nicht, ob es das gibt :)bash
mit neu startenexec bash
. Ich habe keine Ahnung von vim.emacs -q
das Problem natürlich ausführen und beheben, aber ich bevorzuge es, immer eine "gute" Instanz auszuführen , wenn ich meine Konfiguration hacke, nur um sicherzugehen.Antworten:
Hinweis: Ich habe Folgendes in ein Paket eingepackt, das hier
restart-emacs
erhältlich ist .Hier ist eine alternative Methode, um mit purem Elisp das zu erreichen, was Sie wollen (nicht wirklich, da Sie sich auf eine Shell verlassen). Der Trick besteht darin, einen anderen Emacs-Prozess auszulösen, kurz bevor der aktuelle Emacs getötet wird.
Der Code zum Starten einer GUI-Version von Emacs ist unkompliziert. Der Code zum Starten von Emacs in einem Terminal ist etwas knifflig. Es wird die Tatsache ausgenutzt, dass Sie eine Zeichenfolge übergeben können,
suspend-emacs
die als Terminal-Eingabe an den übergeordneten Prozess (die Shell) übergeben wird. Aus der DokumentationWir unterbrechen Emacs also im Grunde, kurz bevor es beendet wird. Fordern Sie die übergeordnete Shell auf, die momentan unterdrückten Emacs (die bald beendet werden) wieder aufzunehmen und dann einen weiteren Emacs-Prozess zu starten. Beachten Sie, dass dies nicht auf Plattformen funktioniert, auf denen Terminal-Emacs tatsächlich anhalten können oder nicht, sondern eine Subshell starten, z. B. unter Windows.
quelle
sh -c "emacs &"
von der Shell aus laufe , hört es mit "emacs: standard input is not a tty
" auf. (Wenn ich dieseM-x restart-emacs
Fehlermeldung nicht sehe,Soweit ich weiß, können Sie Emacs nicht anweisen, nach dem Beenden neu zu starten, aber Sie können den Beendigungscode so einstellen, dass der Prozess, der Emacs überhaupt gestartet hat, erkennen kann, dass Sie neu starten möchten.
Beispielsweise startet dieses Shell-Skript Emacs neu, wenn es mit dem Code 123 beendet wurde.
Als nächstes definieren wir,
kill-emacs-and-restart
dass Emacs mit dem Exit-Code endet, der der magischen Zahl entspricht, die vom Skript erkannt wird:Wenn Sie Emacs jetzt über dieses Skript ausführen, können Sie es neu starten
M-x kill-emacs-and-restart
(oder an eine Tastenfolge binden).quelle
you cannot tell Emacs to re-start after terminating
. Ist das eine technische Einschränkung?exec...
Familie (auf POSIX-Systemen jedenfalls). Mit den Prozesssteuerungsfunktionen von Emacs Lisp werden keine Anrufe auf niedriger Ebene angezeigt. Ich bin jedoch kein Experte, also hoffentlich meldet sich jemand, der sich besser auskennt.Offensichtlich gestohlen von https://unix.stackexchange.com/questions/114238/is-it-possibe-to-change-parent-shells-working-directory-programmatically
Angenommen, ich habe die richtige Syntax zum Einbetten von "" in eine Zeichenfolge, dann sollte dies der Fall sein.
quelle