またはを使用して実行する必要がemacsclient
あるかどうかを判断するスクリプトを作成します。スクリプトは次のとおりです。-nc
-t
このバージョン):
#!/bin/sh
if [ -z "$DISPLAY" ]; then
IS_GRAPHICAL=true
else
IS_GRAPHICAL=$(emacs --batch -Q --eval='(if (fboundp '"'"'tool-bar-mode) (message "true") (message "false"))' 2>&1)
fi
if $IS_GRAPHICAL; then
emacsclient -a "" -nc "$@"
else
emacsclient -a "" -t "$@"
fi
ただし、このemacs --batch -Q ...
行はベアインスタンスを使用するのと同じくらい時間がかかりますemacs
。この行をコメントアウトすると、ttyで実行するとクリーンな画面のみが表示されます。より迅速に検出できますか?
systemdユーザーデバイスを使用してemacsデーモンを起動しました。私が欲しいemacsclient
:
- 滞在するターミナルから(たとえば、GUIウィンドウを開いていない)ファイルで呼び出された場合(たとえばによって呼び出される)、
git-commit
グラフィック環境が存在しない場合(たとえばttyから呼び出された場合)、終了するまで実行を続けます(C-x C-c
) - ファイルなしで呼び出すと、GUIウィンドウが開き(デフォルトの
emacs
呼び出しのように動作します。これを実行すると、emacsclient
入力ファイルが必要であることを示すメッセージが表示されます)、すぐに返されます。
答え1
Arch Wikiのスクリプト
emacs
このチェックの呼び出しは、(fboundp 'tool-bar-mode)
EmacsバージョンにGUIサポートが含まれているかどうかをテストします。わずかなRAMとディスク容量を節約するために、EmacsなしでEmacsを構築できますが、これはまれです。 GUIサポートが不足しているEmacsバージョンとの互換性に興味がない場合は、これを忘れてください。
それからあなたは
if [ -n "$DISPLAY" ]; then
emacsclient -a "" -n -c "$@"
else
emacsclient -a "" "$@"
fi
このレベルの複雑さは、emacsclient
新しいGUIウィンドウが開いたときにすぐに呼び出しが返されることを望む場合にのみ必要です。 (ターミナルで実行している場合は、その端末の使用が完了するまで実行を続ける必要があります。)この動作を希望するかどうかは、ユーザーによって異なります。そうでなければ、単に走ることができます
emacsclient -a "" "$@"
emacsclient
たとえば、システム単位でセッションを使用してEmacsを起動する場合は、開始するように指示する必要はありません。だから私たちに残ったのは
emacsclient "$@"
もう単純化できません。
追加要件
- ファイルとして呼び出す(...)またはグラフィック環境が存在しない場合(...)端末に滞在します(...)
- GUIウィンドウ(...)を開き、ファイルなしで呼び出し時にすぐに返します。
これを行うには、パラメータを使用してスクリプトが呼び出されたかどうかをテストする必要があります。任意emacsclient
のオプション(たとえば--eval
)を渡すと、そのオプションがパラメータとして扱われると想定されます。
if [ $# -ne 0 ]; then
emacsclient -nw "$@"
elif [ -n "$DISPLAY" ]; then
emacsclient -c -n
else
emacsclient -c
fi
1GUIサポートがないということは、必要なライブラリをインストールする必要がないことを意味します。プログラムに存在しないライブラリが含まれている場合、その特定のセッションemacs
で GUI 機能を使用しなくてもプログラムを開始できません。