在Emacs中,保护像*scratch*和*Messages*这样的重要缓冲区的规范方法是什么?

eve*_*_jr 3 emacs elisp

我正在阅读这个问题,答案是一个令人费解的 混乱(计时器功能真的吗?)

在任何情况下,我都不关心重新创建这些缓冲区,因为这是微不足道的.但是这些缓冲区包含永远不应删除的信息,并且因为它们没有关联的文件名,所以它们通常在没有确认的情况下被杀死.

我确实有一个解决方案,但我想看看是否有人有更"规范"的解决方案.



jtahlborn提供了最规范的解决方案,除了"keep-buffers"包显示其年龄有一些问题:

  1. 你必须指定是否所有受保护的缓冲区都要被掩埋和擦除(擦除缓冲区可以通过"撤消"恢复),当被杀死时,或者只是在被杀死时被掩埋.

  2. member被重新实现为find-in-list效率较低.

  3. 辅助功能并没有真正帮助.

我制作了protected-list一个将regexp与erase-action相关联的alist,并删除了无用的(IMO)代码.默认情况下," scratch "在被杀死时被删除," Messages "永远不会被删除或杀死.

github

Jon*_*Lin 8

您可以尝试向kill-buffer-query-functions检查当前缓冲区的变量添加一个函数,如果它是临时的,或者Messages然后返回nil.我以前从未尝试过,但应该防止它们被杀死.

编辑:这是一个使用的例子kill-buffer-query-functions,允许您保护特定的缓冲区:http://www.emacswiki.org/emacs/protbuf-by-name.el


jta*_*orn 3

我使用keep-buffers实用程序。