O cliente Emacs não consegue encontrar o servidor no terminal

11

Então, estou tentando configurar o emacs como servidor, mas estou tendo problemas para fazê-lo funcionar no terminal. Se eu executar o emacs --daemon em algum terminal, poderá conectar-me a ele se executar o emacsclient nesse mesmo terminal, mas se eu abrir um novo terminal, o emacsclient não encontrará o servidor. As coisas parecem funcionar bem se eu executar o emacsclient a partir do iniciador.

eu estou correndo

emacsclient -a '' -t

O cliente diz:

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

Alguma idéia do que poderia estar acontecendo?

Estou usando o ubuntu 17.04 com o gnome / i3, se isso importa.

Matías Guzmán Naranjo
fonte

Respostas:

3

Eu costumava ter o mesmo problema até ter:

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

E agora eu apenas uso esse "e"alias para iniciar o emacsclient.

Eu não vi o problema desde então.

izkon
fonte
Isso funcionou, como digo ao servidor para iniciar o / tmp / emacs1000 / server? (o primeiro cliente está começando para mim)
Matías Guzmán Naranjo
Antes de executar um emacsclient, eu sempre inicio o servidor emacs emacs --daemone ele sempre começa a ouvir nesse /tmp/emacs1000/serversoquete automaticamente. Tenho certeza de que existe uma maneira menos invasiva de fazer isso, que não envolve a codificação do /tmp/emacs1000/serverlocal no ealias e sempre funcionaria, não importa onde o soquete é criado pelo servidor (e é provavelmente como o emacsclient deve funcionar quando invocado sem a --socket-nameopção), mas fazê-lo desta maneira simples e hackeada sempre funcionou para mim.
izkon
4

Por razões insondáveis, isso aconteceu comigo em uma atualização do FC28 do meu laptop. Mesmo rastrear não ajudou. Depois de ler vários links (incluindo isso), vim colocando estas linhas:

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

O que não codifica a parte '1000' (que parece ser o ID do primeiro usuário criado nessa máquina específica, duh) e é responsável por TMPDIR. A exportação de EMACS_SERVER_SOCKET é simples, mas inútil, pois o emacsclient não permite que isso seja configurado a partir de uma var env (irracionalmente, IMHO).

Se o controle total for preferido, pode-se colocar:

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

em algum lugar antes da inicialização do servidor nos .emacs e use "~ / .emacs.d / server-dir / server" como o nome do soquete do servidor para o alias mencionado acima. O server-dir será criado automaticamente, com as permissões certas 0700, se ainda não existir.

Forma de vida alienígena
fonte
3

Verifique se você está usando a mesma versão de emacse emacsclient.

Quando meu sistema emacsclient é usado em vez do meu emacs de compilação personalizado, estou recebendo um erro semelhante:

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

Com a versão correta:

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

$ /usr/local/bin/emacsclient .
Waiting for Emacs...
Toon Claes
fonte
Isso resolve o meu problema #
1100 xtt
1

Não é necessariamente a resposta que você está procurando, mas eu sempre usei exatamente a mesma configuração emacsclient -c ou emacsclient -t. Significando que não inicio o servidor manualmente, a primeira chamada de qualquer um deles iniciará o servidor e qualquer chamada subsequente se conectará ao servidor.

gaussiano
fonte
Isso funciona para mim, mas novamente, dentro de cada terminal específico. Portanto, se eu iniciar um novo terminal, ele iniciará um novo servidor.
Matías Guzmán Naranjo
Você tem algum material específico do servidor no seu .emacs? Nesse caso, gostaria de comentar e tentar novamente. Caso contrário, estou sem idéias.
gaussian
Além disso: qual versão do Emacs você está executando? Minha configuração funciona com o Emacs25 (25.1) do Ubuntu depo e o Emacs25.2 auto-compilado.
gaussian
Acho que não tenho nada no arquivo init. Estou executando o 25.3, mas o mesmo aconteceu com o 25.2. Além disso, iniciar o servidor com o emacs -q --daemon faz a mesma coisa.
Matías Guzmán Naranjo
Sem ideias, desculpe. Funciona na minha configuração, mesmo com o emacs -q --daemon.
gaussian
0

Crie um script como "myemacs" como abaixo:

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

A execução criará o daemon, se não existir, e se conectará ao daemon, se o daemon existir.

lucky1928
fonte
Isso não funciona. Tenho o mesmo problema: se eu iniciá-lo a partir de dois terminais diferentes, ele cria um novo daemon a cada vez.
Matías Guzmán Naranjo
@ MatíasGuzmánNaranjo Ah, mas eu vi que você estava usando "-t", estou usando "-c". Você tentou "-c" também?
precisa saber
que não muda nada, é o mesmo comportamento com -c ou -t. O cliente simplesmente não consegue encontrar o servidor.
Matías Guzmán Naranjo