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.