Emacs-EmacClient还是新框架?

Emacs-EmacClient还是新框架?,emacs,emacs23,emacsclient,Emacs,Emacs23,Emacsclient,这是一个相当基本的问题,但在单独的框架(生成新框架)中从emacs打开新文件与在EmacClient实例中打开文件之间的实际区别是什么?我可以看出,如果你是通过终端工作,区别是显而易见的。。。但是EmacClient是否可以将(缓冲区菜单)或ido模式访问的缓冲区列表额外限制为在特定EmacClient实例中打开的缓冲区?只要emacsserver正在运行,emacs 23中就没有区别。缓冲区列表在每种情况下都是相同的。这两种情况之间实际上没有区别,只是服务器设置了一些缓冲区本地状态以启用C-x

这是一个相当基本的问题,但在单独的框架(生成新框架)中从emacs打开新文件与在EmacClient实例中打开文件之间的实际区别是什么?我可以看出,如果你是通过终端工作,区别是显而易见的。。。但是EmacClient是否可以将(缓冲区菜单)或ido模式访问的缓冲区列表额外限制为在特定EmacClient实例中打开的缓冲区?

只要emacsserver正在运行,emacs 23中就没有区别。缓冲区列表在每种情况下都是相同的。

这两种情况之间实际上没有区别,只是服务器设置了一些缓冲区本地状态以启用
C-x
(又称
服务器编辑

您可以限制
M-x列表缓冲区
的行为,就像您提出以下建议一样:

(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))))
现在,当您在
EmacClient
访问的缓冲区中执行
M-x缓冲区菜单
时,您只会看到同一客户端访问的其他缓冲区。当
EmacClient
未访问缓冲区时,它正常工作

我不使用
ido
,但我认为定制将是类似的(如果这个建议不能按原样工作)

详细信息是,当您运行
emacsclient
时,打开的缓冲区与服务器进程相关联(它可以是多个缓冲区,因为您可以通过多次调用
emacsclient
打开同一个文件)。缓冲区的服务器客户端存储在缓冲区局部变量
服务器缓冲区客户端

要找出哪些缓冲区与
EmacClient
的特定调用关联,请找到该EmacClient的进程,然后执行:
(process get proc'buffers)
(其中
proc
是特定的EmacClient进程-在
服务器缓冲区客户端中找到的列表元素之一)


这就是所有的建议。

谢谢!正如Jed提到的,当打开一个新框架时,似乎没有什么区别,但是当我使用EmacClient-t打开一个新文件时,上面的建议是有效的。有趣的。。。我将研究ido模式,可能还有ibuffer。非常感谢!谢谢-是的,它看起来基本上是正确的,但是emacs似乎意识到哪个客户端正在访问特定的文件,正如Trey指出的。。。但是谢谢你的意见!