スクリプトを使用してemacsclientを実行する

スクリプトを使用してemacsclientを実行する

またはを使用して実行する必要が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 機能を使用しなくてもプログラムを開始できません。

関連情報