これはかなり初歩的な質問ですが、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 に違いはありません。バッファリストはそれぞれで同じです。