(Beachten Sie, dass diese Frage im Gegenteil nicht mit dem Starten im Dämonmodus und Unterdrücken interaktiver Dialoge identisch ist , da diese Frage vom Übermittler "beantwortet" wurde, um zu verhindern, dass eine bestimmte Eingabeaufforderung angezeigt wurde.)
Ich würde gerne wissen, ob es eine allgemeine Möglichkeit gibt, nicht für immer zu emacs --daemon
hängen und auf eine Antwort auf eine Eingabeaufforderung zu warten, die in einem noch nicht vorhandenen Minipuffer angezeigt wird.
Es ist unmöglich, eine Verbindung mit einem Emacs-Client herzustellen, um diese Eingabeaufforderungen zu beantworten, da der Server erst gestartet wird, wenn Emacs die Startsequenz beendet hat. (Das bedeutet, wenn Sie ALTERNATE_EDITOR auf den leeren String gesetzt haben, wodurch ein emacsclient
Server , der keinen Server findet, einen neuen Daemon starten kann, können mehrere Emacs-Daemons hängen bleiben und warten.) Ich muss killall emacs
das Problem beheben vor dem Fortfahren.
Ich kann mit jedem Ding Schlag auf Schlag spielen, was beim Start eine Aufforderung auslöst, wenn ich es identifiziere (indem ich Emacs im Nicht-Daemon-Modus starte und sehe, wonach es fragt), aber es ist keine Lösung, weil es den nächsten Daemon nicht stoppen kann aus einem neuen Grund beim Start hängen.
Um ein Beispiel zu nennen: Ein häufiger Grund dafür war nach einem Systemneustart oder einem Absturz von Emacs, als Emacs nach dem ersten Neustart wissen wollte, ob es in Ordnung ist, Sperrdateien von dem nicht mehr funktionierenden Emacs zu stehlen. Ich könnte das beheben, indem ich einen Rat gebe, dass diese Eingabeaufforderung immer mit "Ja" ohne Interaktion beantwortet wird. Aber dann war eine der Dateien, die beim Speichern der vorherigen Sitzung geöffnet waren, eine TRAMP-Datei, die ein Sudo- oder SSH-Passwort erfordert, sodass der Daemon nicht mehr auf eine Passwortabfrage wartet. Ich behebe das, indem ich die Sitzungsdatei manuell bearbeite (mit vi
oder emacs -q
!), Um die fehlerhaften Dateien zu entfernen - aber das verhindert nicht, dass es das nächste Mal passiert.
Daher kann ich das automatische Laden meiner Sitzung beim Start stoppen und in einen Befehl ändern, den ich von meinem ersten Emacsclient aus manuell ausführen muss. Wenn meine Sitzung jedoch nicht im Hintergrund geladen wird und zum Zeitpunkt ihrer Verwendung noch nicht fertig ist, geht der gesamte Zweck des Daemons verloren!
Also, was ich möchte, ist:
- (Best) Eine Möglichkeit, die Eingabeaufforderungen des Minibuffers zu verschieben, bis ich einen Emacsclient öffne, während der Rest der Initialisierung noch abgeschlossen ist.
- (OK) Auf eine Art und Weise können Sie alle Minibuffer-Eingabeaufforderungen, die ich wie oben beschrieben noch nicht anders empfohlen habe, zurückgeben, es
no
sei denn, ein Emacsclient wird ausgeführt. Ich kann mit fehlerhaften TRAMP-Puffern leben, solange es größtenteils funktioniert.
Gibt es eine Möglichkeit, eines dieser Ziele zu erreichen?
(read-desktop)
, dann, vor der Ausführung emacs --daemon
, eine gefälschte Sperrdatei erstellen , indem Sie eine ganze Zahl in Putting .emacs.desktop.lock (wo setzen diese Datei leider hängt von Ihrer Konfiguration , aber wahrscheinlich entweder Ihr Homedir oder ~ / .emacs.d / .