3

我通常会打开 3 或 4 个 emacs,因为我在不同工作区的 3 或 4 个不同项目中工作。现在,当我尝试使用 emacsclient 打开一个新文件时,我无法控制它转到哪个 emacs。通常它会转到其他工作区中的 emacs。有没有办法指定将它打开到哪个 emacs 中?

一种方法是重新启动我希望该文件所在的服务器,但这不是我正在寻找的解决方案。

4

2 回答 2

5

Burton 的解决方案是在正确的轨道上,但过于复杂,因为您不应该需要使用临时目录的名称来解决问题。你可以这样做:

(defun start-named-server (name)
  (let ((server-name name))
    (server-start)))

然后使用

emacsclient -s <name> "$@"
于 2013-04-10T00:59:57.210 回答
3

您可以为服务器套接字文件指定一个特定名称,然后调用 emacsclient 以使用该套接字:

(defun get-tmpdir ()
    (or (getenv "TMPDIR") "/tmp"))

(defun start-named-server (name)
    (let ((server-name (format "%s/emacs-%s" (get-tmpdir) name))
        (server-start))

现在定义一个 shell 脚本“ec”,它允许您指定服务器名称:

emacsclient -s ${TMPDIR-/tmp}/emacs-${1?"usage: ec [emacs server name] ..."} "$@"

因此,现在您可以在您的 emacs 中运行 M-: (start-named-server "1") 后转到“ec 1 myfile”,然后对所有其他 emacs 重复 2、3、4 ...

于 2013-04-09T18:26:25.660 回答