異なるワークスペースで 3 つまたは 4 つの異なるプロジェクトで作業しているため、通常は 3 つまたは 4 つの emacs を開いています。emacsclient を使用して新しいファイルを開こうとすると、どの emacs に移動するかを制御できません。通常、他のワークスペースの emacs に移動します。どのemacsで開くかを指定する方法はありますか?
1 つの方法は、そのファイルを移動したいサーバーを再起動することですが、それは私が探していた解決策ではありません。
異なるワークスペースで 3 つまたは 4 つの異なるプロジェクトで作業しているため、通常は 3 つまたは 4 つの emacs を開いています。emacsclient を使用して新しいファイルを開こうとすると、どの emacs に移動するかを制御できません。通常、他のワークスペースの emacs に移動します。どのemacsで開くかを指定する方法はありますか?
1 つの方法は、そのファイルを移動したいサーバーを再起動することですが、それは私が探していた解決策ではありません。
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))
ここで、サーバー名を指定できるシェル スクリプト「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 ... を繰り返すことができます。