我通常会打开 3 或 4 个 emacs,因为我在不同工作区的 3 或 4 个不同项目中工作。现在,当我尝试使用 emacsclient 打开一个新文件时,我无法控制它转到哪个 emacs。通常它会转到其他工作区中的 emacs。有没有办法指定将它打开到哪个 emacs 中?
一种方法是重新启动我希望该文件所在的服务器,但这不是我正在寻找的解决方案。
我通常会打开 3 或 4 个 emacs,因为我在不同工作区的 3 或 4 个不同项目中工作。现在,当我尝试使用 emacsclient 打开一个新文件时,我无法控制它转到哪个 emacs。通常它会转到其他工作区中的 emacs。有没有办法指定将它打开到哪个 emacs 中?
一种方法是重新启动我希望该文件所在的服务器,但这不是我正在寻找的解决方案。
Burton 的解决方案是在正确的轨道上,但过于复杂,因为您不应该需要使用临时目录的名称来解决问题。你可以这样做:
(defun start-named-server (name)
(let ((server-name name))
(server-start)))
然后使用
emacsclient -s <name> "$@"
您可以为服务器套接字文件指定一个特定名称,然后调用 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 ...