emacsclient 如何关闭所有的打开的buffer

emacs启动速度是个难解决的问题,好在有emacs server,但是使用中还有一些痛点,看大家怎么看这个问题。 比如

  1. 启动了一个emacs server。 2.通过emacsclient -c 打开了file1, 然后接着通过c-x c-f打开了file2,file3, 然后通过spacemacs/kill frame关闭这个clinet. 3.问题来了,这个时候直接在server端查看打开的buffer发现,file2,file3的buffer没有被kill掉,还在emacs里开着,这样会造成打开的文件越来越多,而且有可能有些编辑过的文件没有保存。

不知道有没有什么办法,让emacsclient关闭的时候,自动关闭所有从这个emacsclient打开的buffer? 同时不影响其它emacsclient打开的buffer?

自带有一个 midnight-mode (好像是这个名字),可以在半夜关掉所有不活跃的 buffer ,比如超过三天没看过的。

谢谢回复,我觉得这种模式不太符合我工作中的需求,愁人啊。

可以研究下 autoload 或者直接用 use-package,Emacs 的启动速度基本上不是什么问题,我在 debian 下用 Emacs,gui 端的 Emacs 启动时间也就 1s 左右基本上不影响使用。

终端用的倒是 emacsserver,不过只是改改配置文件之类的,buffer 的多少并不影响使用。

听起来好喜感

结合delete-frame-functionframe-bufs应该可以做到

delete-frame的时候 kill buffer 就好了。如果多个 client 打开同一个文件就麻烦了。不过看楼主需求也不用考虑这种情况了吧。

其实,定期打开 ibuffer 看看清理下就好了。

1 个赞

我自己是有使用desktop-save-mode的。所以当我想关闭所有打开的buffer时,我一般是用M-x desktop-clear(可以简化成M-x de-cl)。

我经常这样清理已经打开的缓冲区

(defun kill-all-buffer ()
  "Kill all buffer."
  (interactive)
  (dolist (buffer (buffer-list)) (kill-buffer buffer)))

(defun kill-other-buffer ()
  "Close all of other buffer."
  (interactive)
  (dolist (buffer (delq (current-buffer) (buffer-list))) (kill-buffer buffer)))