emacsclient
のオプション ¶以下のようなオプション引数をemacsclient
プログラムに渡すことができます:
emacsclient -c +12 file1 +4:3 file2
引数‘+line’および‘+line:column’は、その後に続くファイルの行番号、または行番号と列番号を指定します。これらはEmacs自身に対するコマンドライン引数と同じように機能します。 動作引数を参照してください。
その他のemacsclient
により認識されるオプション引数を以下にリストします:
emacsclient
が、Emacsとの接続に失敗したとき実行するシェルコマンドを指定します。これはスクリプト内でemacsclient
を実行するとき便利です。このコマンドには、\"like
this\"のようにクォートされた引数が含まれるかもしれません。現在のところ、クォートのエスケープはサポートされていません。
特別な例外として、commandが空文字列の場合、接続に失敗したらemacsclient
は(‘emacs
--daemon’のように)Emacsをデーモンモードで開始して、再度接続を試みます。
環境変数ALTERNATE_EDITOR
は、‘-a’オプションと同じ効果をもちます。両方が指定された場合は、後者のオプションが優先されます。
既存のEmacsフレームを使うかわりに、新しいグラフィカルなクライアントフレーム(client frame)を作成します。クライアントフレームでの、C-x C-cの特別な振る舞いについては、以下を参照してください。(Xサーバーに接続できない等で)新たにグラフィカルなフレームを作成しない場合、あたかも‘-t’オプションが指定されたかのように、テキスト端末でクライアントフレームの作成を試みます。
MS-Windowsでは、単一のEmacsセッションがグラフィカルなフレームとテキスト端末のフレームの両方を表示することはできず、複数のテキスト端末のフレームを表示することもできません。したがってEmacsサーバーがテキスト端末で実行されている場合、‘-c’オプションは‘-t’オプションのように、サーバーのカレントテキスト端末で新たなフレームを作成します。MS-WindowsでEmacsを開始する方法を参照してください。
‘-c’オプションを指定するときに、ファイル名の引数を省略した場合、新しいフレームはデフォルトで*scratch*バッファーを表示します。変数initial-buffer-choice
でこの振る舞いをカスタマイズできます(Emacsの起動を参照してください)。
グラフィカルなクライアントフレームが存在しなければ新たに作成、存在する場合には既存のEmacsフレームを使用します。
新たに作成される、グラフィカルなフレームのパラメーターをセットします(フレームパラメーターを参照してください)。
与えられたファイルを、(複数のXディスプレイがあることを想定して)Xディスプレイdisplayで開くようEmacsに指示します。
ファイルをvisitするかわりに、Emacs
Lispコードを評価するようEmacsに指示します。このオプションが与えられた場合、emacsclient
は引数をvisitするファイルではなく、式のリストと解釈します。
--evalを通じてコマンドラインオプションで複雑なLisp式を渡す際には、シェルにとって特別な文字のエスケープに注意を要する場合があります。これを避けるにはあなたの式の中のLisp関数への引数としてemacsclient
にたいする別個の引数として追加して、その式の中でserver-eval-args-leftを使ってそれらの引数にアクセスすることができます。それらの引数それぞれを別個のLisp式としてEmacsが評価しようとするのを防ぐには、コードの成功とは無関係にserver-eval-args-leftが処理した引数は、たとえばpop
等を使用してあなたの式から削除するように注意してください。
(訳注: これは‘bug#65902: 29.0.92; emacsclient-mail.desktop fails due
to complicated escaping’というバグレポートへの対処として考案された機能です。複雑なので経緯だけ少し説明します。
システムのメーラーアプリケーションとしてEmacsを登録すると、‘mailto:’のようなリンクをクリックした際にEmacsでメールの作成から送信ができます。ここでメーラーは‘mailto:larsi@gnus.org?subject=This+is+a+test’みたいな情報を渡されてメールを作成しています。emacsclient
の呼び出しでもこの情報を渡さなければなりませんが、渡す際にはコマンドライン引数としたときに変な文字列にならないようシェルの特殊文字をエスケープしなければなりません。./etc/emacsclient-mail.desktopという中の呼び出し文の中でエスケープ処理をしてたんですが、メールというあまりに自由な文字列相手なので複雑なエスケープが必要な場合があり、--evalのクォート版--qevalみたく評価しないでそのまま渡せないか、みたいな流れで導入されたようです。このスレにたいして2024年6月時点で解決策として適用されたpatchのコミットログを見て貰えば雰囲気は掴めるのではないでしょうか(ちなみに‘%u’はdoc/misc/message.texiから推測するとお約束のようです)。
TCPを通じてEmacsサーバーに接続するためのserverファイル(TCP Emacs serverを参照)を指定します。かわりにserverファイルを示すように、環境変数EMACS_SERVER_FILE
をセットできます(コマンドラインオプションは、環境変数をオーバーライドする)。
Emacsサーバーは通常は接続にたいしてローカルソケットをlistenしますが、TCPを通じた接続もサポートします。TCPによりEmacsサーバーに接続するためには、emacsclient
がEmacsサーバーへの接続に関する詳細を含むserverファイル(server
file)を読み込む必要があります。このオプションでserverファイル名を指定します。これは~/.emacs.d/serverからの相対ファイル名か、絶対ファイル名です。TCP Emacs serverを参照してください。
すべてのサーバーバッファーが終了するのを待つかわりに、emacsclient
が即座に終了するようにします。Emacsのサーバーバッファーで編集したいときに、このオプションを指定します。C-x
#をタイプしても、これらはkillされません。
Emacsからの応答を諦めるまでN秒待機します。この待機の間に応答がなければ、emacsclient
は警告を表示してexitします。デフォルトの‘0’は永遠に待機することを意味します。
XEmbedプロトコルを通じて、IDがidの親Xウィンドウでクライアントフレームとして、emacsclient
フレームをオープンします。現在のところ、これは主に開発者に有用なオプションです。
emacsclient
がEmacsを待つメッセージ、またはリモートのサーバーソケットに接続するメッセージを表示しないようにします。
サーバーからリターンされた結果を、emacsclient
が表示しないようにします。これは主に‘-e’と併用し、評価が結果ではなく副作用を目的としているとき有用です。
名前がserver-nameのEmacsサーバーに接続します(このオプションはMS-Windowsではサポートされない)。サーバー名は、Emacsサーバー上の変数server-name
により与えられます。このオプションが省略された場合、emacsclient
はデフォルトソケットに接続します。Emacsサーバーのserver-name
に絶対ファイル名をセットした場合は、emacsclient
がそのサーバーに接続するよう指示するために、server-nameに同じ絶対ファイル名を与えてください。Emacsをデーモンとして開始(初期化オプションを参照)して、そのデーモンにより開始されたサーバーに名前を指定した場合には、このオプションを使用する必要があります。
かわりにserverソケットを示すように、環境変数EMACS_SOCKET_NAME
をセットできます(コマンドラインオプションは環境変数をオーバーライドする)。
既存のEmacsフレームを使うかわりに、カレントテキスト端末に新たなクライアントフレームを作成します。これはテキスト端末のフレームを作成する点を除き、上記で説明した‘-c’と同じように振る舞います(テキスト端末を参照してください)。
MS-Windowsでは、Emacsサーバーがグラフィカルなディスプレイを使っている場合は‘-c’のように振る舞いますが、Emacsサーバーがテキスト端末で実行されている場合は、カレントテキスト端末に新たなフレームを作成します。
EmacsがTRAMP (The Tramp Manual in The Tramp
Manualを参照)を使用してリモートマシンにファイルを配すとき(リモートファイルを参照)、ファイル名に追加されるプレフィクスをセットします。これは主にリモートサーバーからのEmacsサーバーの使用と組み合わせた場合に役に立ちます。listenするソケットあるいはlistenするポートのsshフォワードしてリモートホストのserver-fileを利用可能にすることによって(TCP Emacs serverを参照)、リモートマシン上のプログラムはEDITOR
、および同種の環境変数にたいする値にemacsclient
を使用できますが、リモートマシンからEmacsサーバーと通信するかわりに、そのファイルはTRAMPを使用してローカルのEmacsセッションによりvisitされます。
環境変数EMACSCLIENT_TRAMP
は、‘-T’オプションと同じ効果をもちます。両方が指定された場合は、コマンドラインのオプションが優先されます。
たとえば‘local’と‘remote’という2つのホストがあるとします。
local$ ssh -R "/home/%r/.emacs.socket":"${XDG_RUNTIME_DIR:-${TMPDIR:-/tmp}/emacs%i}${XDG_RUNTIME_DIR:+/emacs}/server" remote remote$ export EMACS_SOCKET_NAME=$HOME/.emacs.socket remote$ export EMACSCLIENT_TRAMP=/ssh:remote: remote$ export EDITOR=emacsclient remote$ $EDITOR /tmp/foo.txt #Should open in local emacs.
Unixドメインソケットを使用しないemacsclient
バージョンのプラットフォーム(MS-Windows)、あるいはUnixドメインソケットをフォワードできないSSH実装(6.7より前のバージョンのOpenSSH)を使用している場合には、かわりにTCPポートをフォワードできます。この例では、ローカルのEmacsがTCPポート12345をlistenしているとします。さらに/homeが共有ファイルシステム上にあるとすると、serverファイル~/.emacs.d/server/serverは両方のホストから読み込めることになります。
local$ ssh -R12345:localhost:12345 remote remote$ export EMACS_SERVER_FILE=server remote$ export EMACSCLIENT_TRAMP=/ssh:remote: remote$ export EDITOR=emacsclient remote$ $EDITOR /tmp/foo.txt #Should open in local emacs.
バージョン情報をプリントしてexitします。
呼び出し方のヘルプをプリントしてexitします。
オプション‘-c’または‘-t’で作成された、グラフィカルなフレームおよびテキスト端末のフレームは、クライアントフレーム(client
frames)とみなされます。クライアントフレームから作成した新たなフレームも、クライアントフレームとみなされます。クライアントフレームでC-x
C-c
(save-buffers-kill-terminal
)とタイプした場合、それが通常行なうようなEmacsセッションのkill(Emacsからのexitを参照してください)は行なわれません。かわりにEmacsはクライアントフレームを削除します。さらに、制御を取り戻すために待っているemacsclient
をクライアントフレームがもつ場合(たとえば‘-n’オプションを与えなかった場合)、Emacsは同じくクライアントの他のすべてのフレームを削除し、(それらすべてにたいしてC-x
#をタイプしたかのように)クライアントのサーバーバッファーが終了したとマークします。クライアントフレームが削除された後、残ったフレームが存在しない場合、Emacsセッションは終了します。
例外として、Emacsがデーモンとして開始された場合、すべてのフレームはクライアントフレームとみなされ、C-x C-cがEmacsをkillすることはありません。デーモンセッションを終了するには、M-x kill-emacsとタイプします。
‘-t’と‘-n’は、矛盾するオプションであることに注意してください。‘-t’はカレントテキスト端末に新たにクライアントフレームを作成して制御することを指示し、‘-n’はテキスト端末で制御を行なわないことを指示するからです。両方のオプションを与えた場合、‘-t’の効果は打ち消されて、Emacsは新たにフレームを作成せず、既存のフレームで指定されたファイルをvisitします。