MS Windowsでのemacsclientのセットアップ


11

emacsサーバーデーモンをセットアップし、MS Windowsでemacsclientを使用して、開かれた各ファイルのemacsの追加インスタンスの開始に伴う遅延やオーバーヘッドなしにファイルをすばやく開くようにしています。私は、MS Windowsのemacswikiで提供される特定の指示に従っています。

  1. emacsをデーモンとして実行し、 runemacs.exe --daemon
  2. 続いemacsclientw.exeて、適切なオプションを指定して呼び出します。

デーモンの起動は成功します(プロセスリストにemacs.exeが表示されます)が、emacsclientを呼び出すとエラーが発生します。wikiは、ショートカットを作成しemacsclientw.exeてターゲットを

X:\path\to\emacs\bin\emacsclientw.exe -na "X:\path\to\emacs\bin\emacsclientw.exe" -c -n

これは正しいです?クライアントが2回呼び出されているようです。示されているターゲットを使用してもプログラムは実行されず、「ファイル名または引数が必要です」というエラーが発生します。上記のターゲットの最初の部分のみを使用する

X:\path\to\emacs\bin\emacsclientw.exe -na

一般的なエラーを生成します。2番目の部分のみを使用する

X:\path\to\emacs\bin\emacsclientw.exe -c -n

「ソケットまたは代替エディタがありません」というエラーが発生します。(公式のemacsclientオプションはここで説明されています。

助言がありますか?Emacsは標準モードで正常に実行されます。つまり、デーモンモードでは実行されません。バージョン25.1。初期化ファイルでサーバーを起動するのではなく、デーモンを実行したいと思います。

回答:


5

emacswikiページのアドバイスについて私はよくわかりません。あなたがしたいことは次のことです:

  • 実行中のemacsサーバーに接続されているemacsクライアントを起動します。
  • emacsサーバーが実行されていない場合は、起動してから、emacsクライアントに接続します。
  • クライアントが終了するのを待たないでください(コマンドラインから開始する場合)。

私が使用するコマンドは

C:\emacs\bin\emacsclientw.exe -n -c -a ""

-nコマンドラインから起動しているときの手段は、フィニッシュまでクライアントを待ちません。-aは、あなたが代替エディタを指定することができますemacsのサーバーが実行されていない場合、あなたはそれを空の文字列を与えた場合、それはemacsのサーバーを起動し、それに接続しようとします。最後に、これをWindowsショートカットに入れる場合は、新しいフレームを開く-cも追加する必要がありますemacsclientオプションを参照)。

これが私のショートカットです、それは私のために機能します(Windows 7では、emacs 25.3)。emacswikiページが、意味のない代替エディターとしてemacsclientwをもう一度呼び出した理由がわかりません。

ショートカットとして実行しているときに-cオプションを省略しようとすると、エラーになります。

emacsclientwショートカット


示されている方法でemacsclientw.exeショートカットを構成すると、Error: Cannot connect even after starting the Emacs daemonこのショートカットがデーモンプロセスを起動することを確認しますが、ファイルは独自のemacsインスタンスで開いたままです。管理者権限の有無にかかわらずテスト済み。Emacs 25.1、Windows 7
Snelephant 2018

@Snelephant、うーん、何が悪いのかわからない。emacs 25.1にダウングレードしても、ショートカットは引き続き機能しました。コンテキストメニューから、またはショートカットのコマンドの後にファイル名を入力して、ファイルをどのように開いていますか?
アンジェロ

エラーは、ファイルを指定せずにemacsclientw.exe自体へのショートカットをクリックした場合と、[ターゲット]フィールドにemacsclientw.exeとファイル名を指定したテキストファイルへのショートカットをクリックした場合の両方で発生します。実際、Windows上のクライアントでファイルを開くための意図された方法が明確ではありませんか?Windowsエクスプローラでファイルをクリックするだけです。OSXでファイルをクリックすると、既存のインスタンスでファイルが開かれるように見えますが、Windowsでファイルをクリックすると、別のインスタンスが作成されます。注Windowsでは、emacsに付属のrunemacs.exeを使用してテキストファイルを開くように設定しています。
Snelephant 2018

runemacs.exeでテキストファイルを開くようにWindowsを設定している場合、それらは個別のEmacsプロセスで開きます。代わりにemacsclientwを使用するようにその関連付けを変更する必要があります。
glucas

@glucas Angeloの説明に従って、テキストファイルの関連付けをemacsclientw.exeへのショートカットに変更しました。テキストファイルをクリックしても同じ結果になりError: Cannot connect even after starting the Emacs daemonます。
Snelephant

1

私が使用するコマンドは:

emacsclientw.exe --create-frame --no-wait --alternate-editor runemacs.exe --server-file %APPDATA%\.emacs.d\server\server

(Emacsのbinフォルダーがにない場合はPATHemacsclientw.exeおよびの絶対パスを使用してくださいrunemacs.exe。)

または短いオプション名と空の文字列トリックを使用して、

emacsclientw.exe -c -n -a "" -f %APPDATA%\.emacs.d\server\server

-aデーモンが実行されていない場合は、空の文字列トリックがデーモンを起動しますが、これはEmacs 26(私はまだ25にいる)までは機能しないことに注意してください。26の前に、代替エディターを明示的に指定する必要があります。を使用runemacs.exeしましたが、Emacsはサーバーを起動して実行したままにするように構成されています。

Windowsには、emacsclientサーバーへの接続に通常使用されるローカルUnixドメインソケットがないため、ネットワークTCPソケットの使用にフォールバックする必要があります。明らかなセキュリティ上の理由から、ネットワーク上の誰もがEmacsサーバーを介してファイルシステム全体にアクセスすることを望まないでしょう。したがって、emacsclientサーバーが接続を許可する前に、サーバーファイルに書き込まれた正しい(エフェメラル)ポートとセキュリティトークンを知っている必要があります。

サーバーが既に実行されている場合は、必要あり-aません(ただし、問題はありません)。ALTERNATE_EDITORを使用する代わりに、環境変数を設定することもできます-a

EMACS_SERVER_FILE環境変数を設定した場合、で再度指定する必要はありません-f

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.