Es ist so verwirrend, dass emacsclient sagte, dass es Socket nicht direkt nach der Ausführung von emacs --daemon
in bash finden kann:
Ich habe diese Einstellungen in meinen .emacs:
%Vor% und es funktioniert, die Server-Datei ~/.emacs.d/server/server
war nur da, aber Emacsclient sagen, es kann keinen Socket finden, so nervig, dass ich ihm die Socket-Datei mit der Option -s
sagen muss.
Ich finde dieses heikle Problem, während ich möchte, dass emacs als Daemon ausgeführt wird, nachdem systerm jedesmal neu gestartet (gestartet) wurde, indem man die speziellen Zeichenfolgen ◎reboot
von crontab benutzt.
In diesem Fall hat Cron erfolgreich den Emacs-Server gestartet und die Server-Datei ~/.emacs.d/server/server
war auch da, aber später, als ich ein Terminal startete und versuchte, emacsclient -t
, schlug es fehl und beschwert kann keine Socket-Datei finden!
Obwohl ich dieses Problem umgehen kann, indem ich -s ~/.emacs.d/server/server
jedesmal benutze, wenn ich emacsclient ausfühle, oder alias emacsclient als emacsclient -s ~/.emacs.d/server/server
, aber ist das ein besserer Weg, mein Herz zu trösten?
Backgroud:
System: Mac OS X 10.9.2
emacs: GNU Emacs 24.3.1 installiert von Homebrew
Seit Sie getan haben:
%Vor%Der Server ist bereits gestartet. Du brauchst also nicht das:
%Vor%in deinen .emacs. Wenn Sie diesem Ansatz folgen, wird der Server in / tmp / emacs502 (oder vielleicht eine andere Nummer) platziert. Unter Linux scheint Emacsclient keine Probleme zu haben, es dort zu finden (in diesem Fall sehe ich / tmp / emacs1920), und so funktioniert "emacsclient -nw". Ich versuche es auf OSX mit HomeBrew, wie Sie sind, und ich finde, ich muss verbinden mit:
%Vor%(Wenn Sie --deamon = name verwendet haben, würden Sie "name" anstelle von "server" in dieser letzten Zeile verwenden.)
Das Finden der Server-Socket-Datei ist das heikle Bit, Sie können lsof
verwenden, um es zu finden, und dann ein bisschen grep
-ing, um den Socket-Pfad / Dateinamen zu extrahieren.
Oder unter OSX, wenn Sie /Application/Emacs
ausführen möchten, ändern Sie den Befehlsnamen, den lsof
mit -c Emacs
sucht. dh.
Sie könnten cut
anstelle der unordentlichen Filterung grep
verwenden (Suche nach Nicht-Leerzeichen bis zum Zeilenende [^[:blank:]]*$
)
Besser noch, zerquetsche den Zwischenraum und benutze cut
's Feldhacken.
Jetzt, da Sie den Socket haben (oder leer sind), können Sie einen bedingten Start für emacsclient
machen, dh.
emacsclient findet den emacs Server nur, wenn ich emacs
von der Kommandozeile aus starte. Wenn ich emacs vom Ubuntu Launcher starte, kann emacsclient
keine Verbindung zum Server herstellen.
Wenn Sie den Emacs-Daemon anstelle des Servers verwenden möchten, definieren Sie die beiden Umgebungsvariablen
export ALTERNATE_EDITOR=""
export EDITOR=emacsclient
Sie können diese Umgebungsvariablen entweder in ~/.bashrc
oder ~/.profile
hinzufügen.
Wenn die Umgebungsvariable ALTERNATE_EDITOR leer ist, führt Emacs seinen Daemon aus und stellt eine Verbindung her.
Tags und Links emacs