El cliente de Emacs no puede encontrar el servidor en la terminal

11

Entonces, estoy tratando de configurar emacs como servidor, pero tengo problemas para que funcione desde el terminal. Si ejecuto emacs --daemon en alguna terminal, puedo conectarme a ella si ejecuto emacsclient desde esa misma terminal, pero si abro una nueva terminal, emacsclient no encontrará el servidor. Las cosas parecen funcionar bien si ejecuto emacsclient desde el iniciador.

Estoy corriendo

emacsclient -a '' -t

El cliente dice:

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

¿Alguna idea de lo que podría estar pasando?

Estoy usando ubuntu 17.04 con gnome / i3 si eso es importante.

Matías Guzmán Naranjo
fuente

Respuestas:

3

Solía ​​tener el mismo problema hasta que lo hice:

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

Y ahora solo uso este "e"alias para iniciar emacsclient.

No he visto el problema desde entonces.

izkon
fuente
Esto funcionó, ¿cómo le digo al servidor que inicie / tmp / emacs1000 / server? (el primer cliente lo está comenzando por mí)
Matías Guzmán Naranjo
Antes de ejecutar un cliente emacs, siempre inicio el servidor emacs como emacs --daemony siempre comienza a escuchar en ese /tmp/emacs1000/serversocket automáticamente. Estoy seguro de que hay una manera menos hacky de hacer esto que no implica codificar la /tmp/emacs1000/serverubicación en el ealias, y siempre funcionaría sin importar dónde el servidor crea el socket (y probablemente así es como emacsclient debe funcionar cuando invocado sin la --socket-nameopción), pero hacerlo de esta manera simple y hack siempre funcionó para mí.
izkon
4

Por razones insondables, esto me sucedió en una actualización FC28 de mi computadora portátil. Incluso el estiramiento no ayudó. Después de leer varios enlaces (esto incluido), surgió pegando estas líneas:

# 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"

Lo que no codifica la parte '1000' (que simplemente es la identificación del primer usuario creado en esta máquina en particular, duh), y representa TMPDIR. Exportar EMACS_SERVER_SOCKET es lindo, pero inútil, ya que emacsclient no permite que eso se configure desde una var env (irrazonablemente, en mi humilde opinión).

Si se prefiere el control total, uno puede poner:

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

en algún lugar antes del inicio del servidor en sus .emacs, y use "~ / .emacs.d / server-dir / server" como el nombre del socket del servidor para el alias mencionado anteriormente. server-dir se creará automáticamente, con los permisos adecuados 0700, si aún no existe

Forma de vida alienígena
fuente
3

Asegúrese de estar utilizando la misma versión de emacsy emacsclient.

Cuando se utiliza mi sistema emacsclient en lugar de mi compilación personalizada emacs, obtengo un error similar:

$ /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".

Con la versión correcta:

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

$ /usr/local/bin/emacsclient .
Waiting for Emacs...
Toon Claes
fuente
Esto resuelve mi problema
xtt
1

No es necesariamente la respuesta que está buscando, pero en la misma configuración siempre he usado solo emacsclient -c o emacsclient -t. Lo que significa que no inicio el servidor manualmente, la primera invocación de cualquiera de ellos iniciará el servidor y cualquier invocación posterior se conectará al servidor.

gaussiano
fuente
Esto funciona para mí, pero nuevamente, dentro de cada terminal específico. Entonces, si inicio una nueva terminal, se iniciará un nuevo servidor.
Matías Guzmán Naranjo
¿Tiene alguna materia específica del servidor en sus .emacs? Si es así, lo comentaría y volvería a intentarlo. De lo contrario, me quedo sin ideas.
gaussiano
Además: ¿qué versión de Emacs está ejecutando? Mi configuración funciona tanto con Emacs25 (25.1) del Ubuntu depo como con Emacs25.2 autocompilado.
gaussiano
No creo que tenga nada en el archivo init. Estoy ejecutando 25.3, pero lo mismo sucedió con 25.2. Además, iniciar el servidor con emacs -q --daemon hace lo mismo.
Matías Guzmán Naranjo
Sin ideas, lo siento. Funciona en mi configuración, incluso con emacs -q --daemon.
gaussiano
0

Cree un script que diga "myemacs" como se muestra a continuación:

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

Ejecutarlo creará daemon si no existe, y se conectará a daemon si existe.

lucky1928
fuente
Esto no funciona. Me sale el mismo problema, si lo ejecuto desde dos terminales diferentes, crea un nuevo demonio cada vez.
Matías Guzmán Naranjo
@ MatíasGuzmánNaranjo Oh, pero vi que estás usando "-t", estoy usando "-c". ¿Intentaste "-c" también?
lucky1928
eso no cambia nada, es el mismo comportamiento con -c o -t. El cliente simplemente no puede encontrar el servidor.
Matías Guzmán Naranjo