Emacsクライアントはターミナルでサーバーを見つけることができません


11

だから、私はemacsをサーバーとして設定しようとしていますが、ターミナルから動作させるのに問題があります。ある端末でemacs --daemonを実行した場合、同じ端末からemacsclientを実行すれば接続できますが、新しい端末を開いた場合、emacsclientはサーバーを見つけられません。ランチャーからemacsclientを実行すると、問題なく動作するようです。

私は走っています

emacsclient -a '' -t

クライアントは言う:

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

何が起こっているのかについてのアイデアはありますか?

それが重要であれば、私はgnome / i3でubuntu 17.04を使用しています。

回答:


3

私はそうするまで同じ問題を抱えていました:

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

そして今、私はこの"e"エイリアスを使用してemacsclientを起動します。

それ以来、私は問題を見ていません。


これは機能しましたが、サーバーに/ tmp / emacs1000 / serverを起動するように指示するにはどうすればよいですか?(最初のクライアントは、私のためにそれを開始している)
マティアス・グスマンナランホ

emacsclientを実行する前に、私は常にまずemacsサーバーを起動し、emacs --daemon常にその/tmp/emacs1000/serverソケットで自動的にリッスンを開始します。エイリアスの/tmp/emacs1000/server場所をハードコーディングすることを含まない、これを行うためのそれほどハッキーではない方法eがあり、ソケットがサーバーによって作成された場所に関係なく常に機能します--socket-nameオプションなしで呼び出された)、しかしそれを行うこの単純なハッキーな方法は常に私のために働きました。
izkon 2017

4

計り知れない理由で、これは私のラップトップのFC28アップグレードで私に起こっただけです。紐で縛っても助けにはならなかった。いくつかのリンク(これを含む)を熟読した後、私はこれらの行を貼り付けることによって思い付きました:

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

これは、 '1000'部分(この特定のマシン上で作成された最初のユーザーのIDになるために発生します)をハードコーディングせず、TMPDIRを考慮します。EMACS_SERVER_SOCKETのエクスポートはかわいいですが、役に立たないのです。emacsclientは、環境変数(不当にIMHO)から構成することを許可していないためです。

フルコントロールが望ましい場合は、次のように指定できます。

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

.emacsでserver-startの前のどこかにあり、上記のエイリアスのサーバーソケット名として「〜/ .emacs.d / server-dir / server」を使用します。server-dirが存在しない場合は、適切な権限0700で自動的に作成されます。


3

あなたが同じバージョンを使用していることを確認しemacsemacsclient

カスタムビルドemacsの代わりにシステムemacsclientを使用すると、同様のエラーが発生します。

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

正しいバージョン:

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

$ /usr/local/bin/emacsclient .
Waiting for Emacs...

これは私の問題を解決します
xtt

1

必ずしもあなたが探している答えであるとは限りませんが、私は常に同じ設定で常にemacsclient -cまたはemacsclient -tだけを使用しています。つまり、サーバーを手動で起動しません。どちらかを最初に起動するとサーバーが起動し、その後に起動するとサーバーに接続します。


これは私にとってはうまくいきますが、繰り返しになりますが、各特定のターミナル内でです。したがって、新しい端末を起動すると、新しいサーバーが起動します。
マティアス・グスマンナランホ

.emacsにサーバー固有のものはありますか?もしそうなら、私はそれをコメントアウトして、再試行します。そうでなければ、私はアイデアがありません。
ガウシアン

また、実行しているEmacsのバージョンは?私のセットアップは、UbuntuデポのEmacs25(25.1)と自己コンパイルされたEmacs25.2の両方で動作します。
ガウス

初期化ファイルに何も入っていないようです。25.3を実行していますが、25.2でも同じことが起こりました。また、emacs -q --daemonを使用してサーバーを起動しても、同じことが行われます。
マティアス・グスマンナランホ

アイデアが不足しています。emacs -q --daemonを使用しても、私の設定で動作します。
ガウス

0

以下のように「myemacs」と言うスクリプトを作成します。

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

実行すると、存在しない場合はデーモンが作成され、存在する場合はデーモンに接続されます。


これは動作しません。同じ問題が発生します。2つの異なる端末から起動すると、毎回新しいデーモンが作成されます。
マティアス・グスマンナランホ

@MatíasGuzmánNaranjoああ、でも "-t"を使用しているのを見ましたが、 "-c"を使用しています。「-c」も試してみましたか?
lucky1928

これは何も変更しません。-cまたは-tを使用した場合と同じ動作です。クライアントはサーバーを見つけることができません。
マティアス・グスマンナランホ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.