3

我想编写一个脚本,将 emacs 服务器“链接”到某个目录。为此,我需要检查所有现有服务器,以确保具有特定名称的服务器是否正在运行。然后脚本可以在使用 emacsclient 从该目录打开文件之前决定是否启动新服务器。

我一直在寻找如何列出现有的 emacs 运行服务器,但没有成功。

有什么emacs --list-servers我可以使用的吗?

干杯。

4

1 回答 1

2

Emacs 将所有正在运行的服务器的套接字文件存储在 中${TMPDIR}/emacs$(id -u),如果未设置,则$TMPDIR默认为/tmp。查找所有正在运行的服务器就像列出该目录中的所有套接字一样简单。

在 Bash 中,这看起来大致像

local serverdir="${TMPDIR:-/tmp}/emacs${UID}"
local -a servers
for file in ${serverdir}/*; do
  if [[ -S ${file} ]]; then
    servers+=("${file##*/}")  
  fi
done

echo "${servers[@]}"

servers数组现在包含所有正在运行的 Emacs 服务器的名称,用于emacslcient -s.

编辑: 由于您显然使用的是 Python,因此在 Python 中也是如此:

import os
from stat import S_ISSOCK

serverdir = os.path.join(os.environ.get('TMPDIR', '/tmp'),
                         'emacs{0}'.format(os.geteuid()))
servers = [s for s in os.listdir(serverdir)
           if S_ISSOCK(os.stat(os.path.join(serverdir, s)).st_mode)]
于 2014-03-20T12:02:33.197 回答