问题是这样的:
Magit 在工作过程中会产生很多临时性的 buffer,如 magit-diff magit-process,然后就没有其它机制能自动关闭它们。而我又是追求工作环境简洁的人,这我肯定忍不了。于是果断写了一个 hook,目标是在 Magit 的 status 页面按 q 自动释放所有有关 Magit 的 buffer。
(defun my-custom-emacsconfig-ggmagit ()
"Kill magit related buffer"
(interactive)
(let ((magit-buffers (magit-mode-get-buffers)))
(dolist (buf magit-buffers)
(when (buffer-live-p buf)
(kill-buffer buf)))))
(add-hook 'magit-mode-bury-buffer-hook #'my-custom-emacsconfig-ggmagit)
在 status 页面执行 magit-modde-bury-buffer 却没有效果,但是手动执行 my-custom-emacsconfig-ggmagit 又有效。
折磨了半天之后发现钩子函数执行时,Magit 已经把自己的 buffer 列表 “清空” 了,所以 magit-mode-get-buffers 拿不到任何 buffer,代码相当于白执行。
最后改成
(defun my-custom-emacsconfig-ggmagit (&rest args)
"Kill magit related buffer before magit escape"
(let ((magit-buffers (magit-mode-get-buffers)))
(dolist (buf magit-buffers)
(when (buffer-live-p buf)
(kill-buffer buf)))))
(advice-add 'magit-mode-bury-buffer :before #'my-custom-emacsconfig-ggmagit)
成功拿下!
本来已经写好问题了准备发出来求大伙帮忙的,写着写着自己不信邪给改好了,干脆把结果发出来了。万一有谁哪天用得上呢。