这是一个相当基本的问题,但是在emacs的单独框架(make- new - frame )中打开新文件和在emacsclient实例中打开文件有什么实际区别呢?我可以看到,如果你是通过终端工作,区别是显而易见的……但是emacsclient是否可以将(buffer-menu)或ido-mode访问的缓冲区列表限制为在该特定emacsclient实例中打开的缓冲区?
发布于 2009-10-08 23:08:58
除了服务器设置了一些本地缓冲区状态来启用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))))现在,当您在emacsclient访问的缓冲区中执行M-x buffer-menu时,您只能看到相同客户端访问的其他缓冲区。当emacsclient未访问缓冲区时,它会正常工作。
我不使用ido,但我认为定制应该是类似的(如果这个建议不能按原样工作)。
细节是,当您运行emacsclient时,打开的缓冲区与服务器进程相关联(它可以不止一个,因为您可以通过多次调用emacsclient来打开同一个文件)。缓冲区的服务器客户端存储在缓冲区局部变量server-buffer-clients中。
要找出哪些缓冲区与emacsclient的特定调用相关联,请找到该客户端的进程,然后执行:(process-get proc 'buffers) (其中proc是特定的客户端进程-在server-buffer-clients中找到的列表元素之一)。
这就是所有的建议。
发布于 2009-10-08 21:42:08
只要emacsserver正在运行,emacs 23就没有区别。缓冲区列表在每个中都是相同的。
https://stackoverflow.com/questions/1540581
复制相似问题