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.

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.


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.


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

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.


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.