我使用Windows批处理文件使用emacsclientw.exe在已经运行的Emacs实例中打开文件.但是,以这种方式打开的任何文件都是在服务器模式下打开的,这意味着我必须使用Cx#来杀死它,而不是通常的Cx k.我该如何改变这种行为?
我的解决方案是重新绑定它(实际上是Mw):
(lambda () (interactive) (if server-buffer-clients (server-edit) (kill-this-buffer)))
[编辑:现在已经阅读了服务器编辑的代码,最好使用服务器完成(取决于你想要的).server-edit会将您切换到服务器编辑的缓冲区(如果仍然存在),但服务器完成只会切换到下一个缓冲区.您还可以使用server-done的输出来查看缓冲区是否实际被杀死(如果文件在调用emacsclient之前打开则不是这种情况)然后如果没有则将其终止.或者使用其他地方建议的server-kill-buffer.
以下是我在.emacs中执行此操作的内容:
(add-hook 'server-switch-hook (lambda () (local-set-key (kbd "C-x k") '(lambda () (interactive) (if server-buffer-clients (server-edit) (ido-kill-buffer))))))
就像这个Cx k工作时常用的方式当我没有从emacsclient找到一个文件(对我来说就是ido-kill-buffer),如果我正在使用emacsclient,如果客户端正在等待,Cx k会进行服务器编辑,或者运行ido-kill-buffer(如果我使用了emacsclient -n).
使用:
D:\> emacsclientw -n foo.txt
-n说"没有等待".这是关于RELEASE(以及许多先前版本,IIRC)的2008-03-26的GNU Emacs 22.2.1(i386-mingw-nt5.1.2600).