&引用;此Emacs会话具有客户端“0”我怎样才能找到原因呢?
在C-x上,C-C Emacs不时宣布“此Emacs会话有客户端;是否仍要退出?” (我在Windows7上使用Emacs24beta,以防万一。) 我希望通过emacsclientw.exe打开一些文件,但我没有看到任何文件 (我有 git config--global core.editor“/c/lang/emacs-24beta/bin/emacsclientw.exe”) 有没有办法找出哪些缓冲区有客户端?(或者还有什么可以找的吗?) 有没有办法找出哪些缓冲区有客户端 当缓冲区有客户端时,其&引用;此Emacs会话具有客户端“0”我怎样才能找到原因呢?,emacs,Emacs,在C-x上,C-C Emacs不时宣布“此Emacs会话有客户端;是否仍要退出?” (我在Windows7上使用Emacs24beta,以防万一。) 我希望通过emacsclientw.exe打开一些文件,但我没有看到任何文件 (我有 git config--global core.editor“/c/lang/emacs-24beta/bin/emacsclientw.exe”) 有没有办法找出哪些缓冲区有客户端?(或者还有什么可以找的吗?) 有没有办法找出哪些缓冲区有客户端 当缓冲区有客户端
服务器缓冲区客户端
变量的值将为非零
我相信有更好的方法,但这段代码应该给出一个客户端缓冲区列表:
(require 'cl)
(defvar server-buffers nil)
(defun show-server-buffers ()
(interactive)
(setq server-buffers nil)
(let ((original-buffer (current-buffer)))
(loop for buf in (buffer-list)
do
(progn
(switch-to-buffer buf)
(if (and
server-buffer-clients
(buffer-live-p buf))
(add-to-list 'server-buffers buf))))
(switch-to-buffer original-buffer)
(message "server-buffers: %s" server-buffers)))
(要求“cl”)
(defvar服务器缓冲区为零)
(取消显示服务器缓冲区()
(互动)
(setq服务器缓冲区为零)
(let((原始缓冲区(当前缓冲区)))
(buf in循环(缓冲区列表)
做
(项目
(切换到缓冲区buf)
(如有)(及
服务器缓冲区客户端
(buffer-live-p buf)
(添加到列表“服务器缓冲区buf”))
(切换到缓冲区原始缓冲区)
(消息“服务器缓冲区:%s”服务器缓冲区)))
我已经调整了
列表流程
,用于列出客户。
使用新定义的命令list clients
可以获得客户机进程的列表。
每个客户机都与服务器编辑缓冲区一起列出,该缓冲区将客户机作为服务器缓冲区客户机
中的第一个条目
(定义派生模式客户端菜单模式过程菜单模式“客户端菜单”
“列出当前连接的客户端进程的主模式。”
(删除钩子“列表还原钩子”#列表进程--刷新t)
(添加hook‘列表还原hook#’server-list-clients——刷新nil t))
(defun服务器列表客户端(&可选的仅查询缓冲区)
“显示此emacs会话的所有客户端的列表。
如果可选参数QUERY-ONLY为非nil,则仅处理
将列出对退出标志集的查询。
任何列为已退出或已发出信号的进程实际上都已被消除
上市后。
可选参数BUFFER指定要使用的缓冲区,而不是
\“*客户端列表*\”。
返回值始终为零。”
(互动)
(或(fboundp的流程列表)
(错误“此系统不支持异步子进程”))
(除非(bufferp buffer)
(setq缓冲区(获取缓冲区创建“*客户端进程列表*”))
(带当前缓冲区)
(客户端菜单模式)
(仅查询setq过程菜单)
(服务器列表客户端--刷新)
(列表打印)
(显示缓冲区)
零)
(defalias#'列表客户端#'服务器列表客户端)
(defun服务器客户端缓冲区(客户端)
“返回“服务器缓冲区客户端”中客户端的缓冲区。”
(捕获:找到
(数据列表(buf(缓冲区列表))
(如果(memq客户端(使用当前缓冲区buf服务器缓冲区客户端))
(抛出:找到buf(()()))
(defun服务器列表客户端--刷新()
“重新计算客户端列表缓冲区的客户端进程列表。
此外,请删除已退出或发出信号的任何进程。”
(setq表格列表条目无)
(dolist(p服务器客户端)
(条件((memq(过程状态p)’(出口信号关闭))
(删除进程(p))
((或(不限于流程菜单查询)
(进程查询退出标志p))
(let*((buf(服务器-客户端缓冲区p))
(类型(工艺类型p))
(名称(过程名称p))
(状态(符号名称(过程状态p)))
(buf标签(如果(buffer-live-p buf)
`(,(缓冲区名称buf)
面链接
帮助(格式化消息)
“访问缓冲区“%s”
(缓冲区名称buf))
跟踪链接t
进程缓冲区
操作过程菜单(访问缓冲区)
"--"))
(tty(或(进程tty名称p)“—”)
(cmd
(如果(memq类型)(网络串行))
(let((触点(过程触点p t)))
(如果(均衡器类型“网络”)
(格式“(%s%s)”
(如果(plist get contact:type)
“数据报”
“网络”)
(如果(plist-get-contact:server)
(格式化“服务器在%s上”
(或
(plist获取联系人:主机)
(plist-get-contact:local)))
(格式为“连接到%s”
(plist-get-contact:host)))
(格式)(串行端口%s%s)
(或(plist-get-contact:port)“?”)
(让((速度(plist get contact:speed)))
(如果速度
(格式“速度为%s b/s”)
"")))))
(mapconcat“标识(过程命令p)”))
(推送(列表p(矢量名称状态buf标签tty cmd))
列表条目()()())
很有趣。编辑提交(并关闭其缓冲区)后,它会说:服务器缓冲区:(#)。顺便问一下:有没有比保存C-C-s然后杀死缓冲区C-C-k更好的方法来关闭这样的缓冲区?我已经编辑了我的答案,以排除杀死的缓冲区,还可以正确清除我的服务器缓冲区变量。Falko:您通常会使用C-x#
而不是C-xk
来告诉服务器您已经完成了缓冲区和客户机的使用(启动客户机时,您应该会看到这样的消息)。