Das server-running-p
Prädikat bewertet, t
ob der Emacs-Server ausgeführt wird, unabhängig davon, welcher Emacs-Sitzung derzeit der Serverprozess "gehört".
Wenn daher zwei oder mehr unabhängige Emacs-Sitzungen gleichzeitig ausgeführt werden, server-running-p
wird nicht wirklich getestet, ob auf der aktuellen Emacs-Sitzung der Server ausgeführt wird.
Ich suche nach einem spezifischeren Test, der t
genau dann ausgewertet wird, wenn in der aktuellen Sitzung (dh in der Sitzung, in der der Test durchgeführt wird) der Emacs-Server ausgeführt wird.
server-start
und nachserver-force-delete
),server-mode
war immernil
.(server-mode 1)
anstatt anzurufen(server-start)
. Ersteres ruft Letzteres auf undserver-force-delete
überprüft und deaktiviert diesen Modus, sodass es eher so aussieht, als wäresever-mode
es die beabsichtigte Schnittstelle, und wir sollten nicht direkt anrufenserver-start
.server-mode
immer noch berücksichtigt nicht, dass derselbe Server über mehrere Emacs-Instanzen gestartet und gelöscht wird, da das Löschen des Servers von einer Instanz keine Auswirkung auf den Wert vonserver-mode
in einer anderen hat.Antworten:
Sie könnten überprüfen:
Dies sollte funktionieren, vorausgesetzt, Sie haben es vermieden, in den anderen Instanzen einen Server zu starten.
Wenn Sie einen Socket-basierten Server annehmen und eine zweite Emacs-Instanz starten und den Serverprozess von dieser zweiten Instanz aus zwangsweise löschen und dann neu starten, gibt der obige Code in der ursprünglichen Instanz weiterhin Nicht-Null zurück (als denselben Socket) Verzeichnis wird verwendet), so dass Sie in der ursprünglichen Situation bleiben.
(Offensichtlich ist dies nicht ideal, daher gibt es möglicherweise eine bessere Lösung.)
server-running-p
Gibt an, ob ein bestimmter benannter Server (standardmäßigserver-name
) ausgeführt wird. Wenn Sieserver-name
also in allen Instanzen gleich sind, können Sie vermeiden, einen bereits laufenden Server wie folgt zu starten:quelle