这是一个相当基本的问题,但是在emacs的单独框架(make-new-frame)中打开新文件或在emacsclient实例中打开文件之间的实际区别是什么?我可以看到,如果您正在通过终端工作,差异很明显......但emacsclient是否还可以将(buffer-menu)或ido-mode访问的缓冲区列表限制为在该特定emacsclient实例中打开的缓冲区?
答案 0 :(得分:5)
除了服务器设置一些缓冲区本地状态以启用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
时,打开的缓冲区与服务器进程相关联(它可能不止一个,因为您可以通过多次调用{{1}打开同一个文件}})。缓冲区的服务器客户端存储在缓冲区局部变量emacsclient
中。
要找出与server-buffer-clients
的特定调用关联的缓冲区,请找到该emacsclient的进程,然后执行:emacsclient
(其中(process-get proc 'buffers)
是特定的emacsclient进程 - 一个在proc
)中找到的列表元素。
这就是所有的建议。
答案 1 :(得分:3)
只要emacsserver正在运行,emacs 23就没有区别了。每个缓冲区列表都是相同的。