如何仅在需要时运行 emacs 守护进程?

如何仅在需要时运行 emacs 守护进程?

据我所知,加速 emacs 启动的一种方法是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 无法连接到服务器,则返回代码非零。

答案3

您可以将其放入 shell 函数或脚本中:

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

这假设您使用的是ps标准 Linuxprocps软件包中的。如果您使用另一个ps,确切的选项会有所不同。

答案4

您可以使用 和 来执行此ps操作or

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

受到启发cashugomg回答

相关内容