据我所知,加速 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
受到启发cas
并hugomg
回答