Warum Emacsclient nach der Ausführung von 'emacs --daemon' keinen Socket finden kann

8

Es ist so verwirrend, dass emacsclient sagte, dass es Socket nicht direkt nach der Ausführung von emacs --daemon in bash finden kann:

%Vor%

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

    
sage han 18.04.2014, 06:37
quelle

4 Antworten

9

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.)

    
Diagon 20.10.2014 17:57
quelle
9

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.

%Vor%

Oder unter OSX, wenn Sie /Application/Emacs ausführen möchten, ändern Sie den Befehlsnamen, den lsof mit -c Emacs sucht. dh.

%Vor%

Sie könnten cut anstelle der unordentlichen Filterung grep verwenden (Suche nach Nicht-Leerzeichen bis zum Zeilenende [^[:blank:]]*$ )

%Vor%

Besser noch, zerquetsche den Zwischenraum und benutze cut 's Feldhacken.

%Vor%

Jetzt, da Sie den Socket haben (oder leer sind), können Sie einen bedingten Start für emacsclient machen, dh.

%Vor%     
ocodo 17.02.2015 02:44
quelle
1

Ich denke, emacsclient kann nur im Standardpfad nach der speziellen Datei server suchen, z. in Code%. Wenn Sie diesen Parameter /tmp/emacs1000 ändern, sollten Sie darüber mit Schlüssel server-socket-dir auf emacsclient hinweisen.

    
artscan 19.04.2014 11:34
quelle
1

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.

    
jr0cket 24.03.2015 23:29
quelle

Tags und Links