Wie kann ich emacsclient -a '' -n
nur dann einen neuen Rahmen erstellen, wenn noch keiner vorhanden ist?
Das Problem mit dem -c
Flag ist, dass es jedes Mal einen neuen Frame erstellt. Das Problem ohne es ist, dass wenn kein Frame geöffnet ist, er in der Befehlszeile geöffnet wird.
Wenn ich überprüfen kann, ob ein offener Emacs-Frame in der Shell vorhanden ist, kann ich mit oder ohne davon aufrufen -c
, um das gewünschte Verhalten zu erhalten. Ich habe es versucht:
$ emacsclient -a '' --eval '(frames-on-display-list)'
(#<frame F1 0xba2740>)
Ich bekomme immer das gleiche Ergebnis.
Ich könnte temporäre Dateien oder pgrep verwenden, aber diese Ansätze sind sehr fehleranfällig.
Dies ähnelt dieser Frage , ist jedoch kein Duplikat, da das dortige OP damit zufrieden war, vor dem Aufruf einen Frame geöffnet zu haben emacsclient
.
frames
emacsclient
x11
spelufo
quelle
quelle
elisp
,bash
undsh
Antworten.Antworten:
Am Ende habe ich dieses Skript basierend darauf erstellt
Wenn keine Anzeige vorhanden ist, wird sie mit geöffnet
-nw
. Wenn festgelegt,$DISPLAY
wird in dieser Anzeige nach Frames gesucht, um festzustellen, ob ein neuer erstellt werden muss.Bearbeiten: Ich habe es so geändert, dass Sie manuell angeben können,
-nw
ob Sie in einem Terminal öffnen möchten, auch wenn eine Anzeige vorhanden ist.quelle
$@
sollte zitiert werden .Sie können verwenden:
um zu überprüfen, ob der Emacs-Server
"server_name"
bereits ausgeführt wird. Wenn der Befehl den Exit-Code 0 zurückgibt, wird er ausgeführt. Wenn ja, verwenden Sie einfach denemacsclient
Befehl:Wenn es nicht ausgeführt wird, können Sie einen neuen Emacs-Server öffnen, zum Beispiel mit:
quelle
emacsclient -a ''
startetemacs --daemon
bei Bedarf, was auch dann bestehen bleibt, wenn Sie die Shell schließen.&
am Ende des Befehls; Es bedeutet, den Server als HintergrundprozessC-d
).server-start
der Server als Daemon-Prozess gestartet wird. Was erhalten Sie, wenn Sie Emacs auf diese Weise starten und dann alle Emacs und Terminals schließen, dann ein neues Terminal öffnen und ausführenpgrep emacs
?C-d
. Ich habe dies jetzt untergnome-terminal
Ubuntu 14.10 versucht . Ich denke, Sie beziehen sich auf eine laufende Instanz, nachdem Sie alle Emacs-Frames geschlossen haben. Dann würde das einen Daemon-Prozess erfordern, ja ..