这是一个相当基本的问题,但是在 emacs 的单独框架(make-new-frame)中打开新文件或在 emacsclient 实例中打开文件之间有什么实际区别?我可以看到,如果您正在通过终端工作,则区别很明显......但是 emacsclient 是否可以另外将 (buffer-menu) 或 ido-mode 访问的缓冲区列表限制为在该特定 emacsclient 实例中打开的缓冲区?
问问题
1921 次
2 回答
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
,打开的缓冲区与服务器进程相关联(它可能不止一个,因为您可以通过多次调用打开同一个文件emacsclient
)。缓冲区的服务器客户端存储在缓冲区局部变量server-buffer-clients
中。
要找出与特定调用相关联的缓冲区emacsclient
,请找到该 emacsclient 的进程,然后执行以下操作:(特定的 emacsclient 进程(process-get proc 'buffers)
在哪里proc
- 在 中找到的列表的元素之一server-buffer-clients
)。
这就是所有的建议。
于 2009-10-08T23:08:57.613 回答
3
emacs 23 没有区别,只要 emacsserver 正在运行。缓冲区列表在每个中都是相同的。
于 2009-10-08T21:42:08.340 回答