Der Emacs-Client kann den Server im Terminal nicht finden

11

Ich versuche also, Emacs als Server einzurichten, aber ich habe Probleme, es vom Terminal aus zum Laufen zu bringen. Wenn ich emacs --daemon auf einem Terminal ausführe, kann ich eine Verbindung herstellen, wenn ich den emacsclient über dasselbe Terminal ausführe. Wenn ich jedoch ein neues Terminal öffne, findet der emacsclient den Server nicht. Die Dinge scheinen gut zu funktionieren, wenn ich emacsclient vom Launcher aus starte.

ich renne

emacsclient -a '' -t

Der Kunde sagt:

emacsclient: can't find socket; have you started the server?
To start the server in Emacs, type "M-x server-start".

Irgendwelche Ideen, was passieren könnte?

Ich benutze Ubuntu 17.04 mit Gnome / i3, wenn das wichtig ist.

Matías Guzmán Naranjo
quelle

Antworten:

3

Ich hatte das gleiche Problem, bis ich:

alias e="emacsclient -t --socket-name=/tmp/emacs1000/server"

Und jetzt benutze ich nur diesen "e"Alias, um emacsclient zu starten.

Ich habe das Problem seitdem nicht mehr gesehen.

izkon
quelle
Dies hat funktioniert. Wie kann ich den Server anweisen, den / tmp / emacs1000 / Server zu starten? (Der erste Kunde startet es für mich)
Matías Guzmán Naranjo
Bevor ich einen Emacsclient ausführe, starte ich immer zuerst den Emacs-Server als emacs --daemonund er hört immer /tmp/emacs1000/serverautomatisch auf diesen Socket. Ich bin mir sicher, dass es einen weniger hackigen Weg gibt, bei dem der /tmp/emacs1000/serverSpeicherort im eAlias nicht fest codiert wird und der immer funktioniert, unabhängig davon, wo der Socket vom Server erstellt wird (und wahrscheinlich soll emacsclient dann auch so funktionieren ohne die --socket-nameOption aufgerufen ), aber es hat immer bei mir funktioniert.
Izkon
4

Aus unergründlichen Gründen ist mir dies gerade bei einem FC28-Upgrade meines Laptops passiert. Sogar das Straffen hat nicht geholfen. Nachdem ich mehrere Links (einschließlich) durchgesehen hatte, kam ich zu folgenden Zeilen:

# bash syntax
# On laptop, emacscclient cannot find emacs socket any longer (after FC28)
export EMACS_SERVER_SOCKET=${TMPDIR:-/tmp}/emacs$(id -u)/server
alias emacsclient="/usr/bin/emacsclient -s $EMACS_SERVER_SOCKET"

Dies codiert nicht den '1000'-Teil (der zufällig die ID des ersten Benutzers ist, der auf diesem bestimmten Computer erstellt wurde, duh) und berücksichtigt TMPDIR. Das Exportieren von EMACS_SERVER_SOCKET ist niedlich, aber nutzlos, da emacsclient nicht zulässt, dass dies von einer env-Variable aus konfiguriert wird (unangemessen, IMHO).

Wenn die volle Kontrolle bevorzugt wird, kann man sagen:

(setq server-socket-dir "~/.emacs.d/server-dir") 

Irgendwo vor dem Serverstart in ihren .emacs und verwenden Sie "~ / .emacs.d / server-dir / server" als Server-Socket-Namen für den oben genannten Alias. Das Server-Verzeichnis wird automatisch mit den richtigen Berechtigungen 0700 erstellt, sofern es noch nicht vorhanden ist.

Alien Lebensform
quelle
3

Stellen Sie sicher, dass Sie dieselbe Version von emacsund verwenden emacsclient.

Wenn mein System-Emacsclient anstelle meiner benutzerdefinierten Build-Emacs verwendet wird, wird ein ähnlicher Fehler angezeigt:

$ /usr/bin/emacsclient --version
emacsclient 22.1

$ /usr/bin/emacsclient .
/usr/bin/emacsclient: can't find socket; have you started the server?
To start the server in Emacs, type "M-x server-start".

Mit der richtigen Version:

$ /usr/local/bin/emacsclient --version
emacsclient 26.0.50

$ /usr/local/bin/emacsclient .
Waiting for Emacs...
Toon Claes
quelle
Dies löst mein Problem
xtt
1

Nicht unbedingt die Antwort, nach der Sie suchen, aber ich habe in genau demselben Setup immer nur emacsclient -c oder emacsclient -t verwendet. Das heißt, ich starte den Server nicht manuell, der erste Aufruf von beiden startet den Server und jeder nachfolgende Aufruf stellt eine Verbindung zum Server her.

Gauß
quelle
Dies funktioniert bei mir, aber auch hier in jedem bestimmten Terminal. Wenn ich also ein neues Terminal starte, wird ein neuer Server gestartet.
Matías Guzmán Naranjo
Haben Sie serverspezifische Inhalte in Ihren .emacs? Wenn ja, würde ich es auskommentieren und es erneut versuchen. Ansonsten habe ich keine Ideen mehr.
Gaußscher
Außerdem: Welche Version von Emacs verwenden Sie? Mein Setup funktioniert sowohl mit Emacs25 (25.1) aus dem Ubuntu-Depo als auch mit selbst kompiliertem Emacs25.2.
Gaußscher
Ich glaube nicht, dass ich etwas in der Init-Datei habe. Ich laufe 25.3, aber das gleiche geschah mit 25.2. Das Starten des Servers mit emacs -q --daemon bewirkt dasselbe.
Matías Guzmán Naranjo
Aus Ideen, sorry. Funktioniert in meinem Setup auch mit emacs -q --daemon.
Gaußscher
0

Erstellen Sie ein Skript mit der Aufschrift "myemacs" wie folgt:

#!/bin/bash
emacsclient -a '' -c "$@"

Wenn Sie es ausführen, wird ein Dämon erstellt, falls nicht vorhanden, und eine Verbindung zum Dämon hergestellt, wenn ein Dämon vorhanden ist.

Glück1928
quelle
Das funktioniert nicht. Ich habe das gleiche Problem: Wenn ich es von zwei verschiedenen Terminals aus starte, wird jedes Mal ein neuer Daemon erstellt.
Matías Guzmán Naranjo
@ MatíasGuzmánNaranjo Oh, aber ich habe gesehen, dass Sie "-t" verwenden, ich verwende "-c". Hast du auch "-c" ausprobiert?
Lucky1928
das ändert nichts, es ist das gleiche Verhalten mit -c oder -t. Der Client kann den Server einfach nicht finden.
Matías Guzmán Naranjo