必要なときにのみemacsデーモンを実行する方法は?

必要なときにのみemacsデーモンを実行する方法は?

私が知っている限り、emacsの起動を高速化する1つの方法は、emacs --daemonログイン時に実行してからemacslientファイルを開くことですemacs。これにより、新しいemacsインスタンスを作成するのではなく、実行中のemacsサーバーにアクセスできます。

ただし、必要な場合を除き、ログインプロセスを高速化するためにプログラムを自動起動に入れないことをお勧めします。 emacsサーバーが稼働しているかどうかを検出する安定した方法はありますか?これにより、Emacsを使用して初めてファイルを開くときにEmacsサーバーを生成する簡単なスクリプトを作成できます。

#!/bin/sh
if emacs_daemon_is_not_running # <-- How do I do this?
then
    emacs --daemon
fi
emacsclient -c "$@"

答え1

emacsがすでに実行されているかどうかをテストする必要さえありません。emacsclientまだ実行していない場合は、emacsデーモンを起動できます。からemacsclient(1)

   -a, --alternate-editor=EDITOR
          if the Emacs server is not running,  run  the  specified  editor
          instead.   This can also be specified via the `ALTERNATE_EDITOR'
          environment variable.  If the  value  of  EDITOR  is  the  empty
          string,  run `emacs --daemon' to start Emacs in daemon mode, and
          try to connect to it.

私はge、次のように定義されたエイリアスを使用してファイルを編集します。

alias ge="emacsclient -c -n --alternate-editor=\"\""

答え2

emacsclientそれ自体を使用して接続があるかどうかをテストできます。

#!/bin/sh
if ! emacsclient -e 0 >&/dev/null
then emacs --daemon
fi
emacsclient -c "$@"

-e 0計算式「0」を表し、0のみを印刷します。 emacsclientがサーバーに接続できない場合、戻りコードは0ではありません。

答え3

これをシェル関数またはスクリプトに入れることができます。

if ! ps h -o pid,args -C emacs | grep -q -- --daemon ; then
    emacs --daemon
fi
emacsclient -c "$@"

psこれは、標準のLinuxパッケージprocpsのパッケージを使用していると仮定します。どちらかを使用すると、ps正確なオプションが異なります。

答え4

以下を使用してpsこれを実行できますor

ps -e -o args | grep -qE 'emacs --(bg-|)daemon' || emacs --daemon

インスピレーションを受けて答えcasてみてください。hugomg

関連情報