これはかなり初歩的な質問ですが、emacs とは別のフレーム (make-new-frame) で新しいファイルを開くことと、emacsclient のインスタンスでファイルを開くことの実際的な違いは何ですか? 端末を介して作業している場合、違いは明らかです...しかし、emacsclientは、(buffer-menu)またはido-modeによってアクセスされるバッファーのリストを、その特定のemacsclientインスタンスで開かれたバッファーにさらに制限できますか?
2 に答える
サーバーがバッファローカル状態を設定して有効にするという事実を除いて、2つの状況に違いはありませんC-x #
(別名server-edit
)。
M-x list-buffers
次のアドバイスに従って、質問しているような行動を制限できます。
(defadvice list-buffers-noselect (before list-buffers-noselect-limit-to-those-for-emacsclient activate)
"When the current buffer is a being viewed by an emacclient, restrict the buffers to those associated with the emacsclient"
(when (and (null (ad-get-arg 1)) server-buffer-clients)
(let ((blist (delete-dups (reduce 'append
(mapcar (lambda (proc) (process-get proc 'buffers))
server-buffer-clients)))))
(ad-set-arg 1 blist))))
M-x buffer-menu
がアクセスしたバッファemacsclient
で実行すると、同じクライアントがアクセスした他のバッファのみが表示されます。がバッファにアクセスしていない場合は、通常どおり動作しemacsclient
ます。
私は使用しませんido
が、カスタマイズは似ていると思います (このアドバイスがそのまま機能しない場合)。
詳細は、 を実行するemacsclient
と、開かれるバッファがサーバー プロセスに関連付けられることです ( を複数回呼び出して同じファイルを開くことができるため、複数になる可能性がありますemacsclient
)。バッファのサーバー クライアントは、バッファ ローカル変数に格納されますserver-buffer-clients
。
の特定の呼び出しに関連付けられているバッファを見つけるにはemacsclient
、その emacsclient のプロセスを見つけて、次のようにします(process-get proc 'buffers)
(proc
は特定の emacsclient プロセス - にあるリストの要素の 1 つですserver-buffer-clients
)。
アドバイスはそれだけです。
emacsserver が実行されている限り、emacs 23 に違いはありません。バッファリストはそれぞれで同じです。