Emacs:我可以限制缓冲区中的行数吗?

6

在通过Emacs和gdb调试应用程序时,调试输出的行数有时可能会快速超过9xxxx。是否有一种方法可以强制Emacs在超过1000行后删除旧行?


你是否有像 gdb-debug-log-max 这样的变量?或者对于 *Messages* 缓冲区,是否有相应的等效变量,例如 message-log-max - lawlist
@lawlist 是的,第一个设置为128,第二个设置为1000。虽然我使用了shell模式,因为gud-gdbgdb都有问题。无论如何,我只是测试了一下:即使在gdb模式下,行数在绕过128或1000后也不会被删除。 - Hi-Angel
1
如何使用变量comint-buffer-maximum-size和函数comint-truncate-buffer,例如:https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell-Mode.html。我只是猜测,但这是一般的想法。还有其他类型的主要shell模式,根据不同的模式,变量可能会有所不同--例如,ansi-term可能会使用类似于`term-buffer-maximum-size`的东西。 - lawlist
@lawlist 哈哈!你可以发布一个答案:设置钩子(add-hook 'comint-output-filter-functions 'comint-truncate-buffer)就可以完成任务了。由comint-buffer-maximum-size变量管理的行数,它将是您设置的行数加1 *(我猜这是由于一个错误)*。 - Hi-Angel
1个回答

9
M-x comint-truncate-buffer

这个命令将 shell 缓冲区截断为一定数量的最大行数,由变量 comint-buffer-maximum-size 指定。以下是每次从子 shell 获取输出时自动执行此操作的方法:

(add-hook 'comint-output-filter-functions 'comint-truncate-buffer)

关于变量comint-buffer-maximum-size,从describe-variable的输出来看,如下所示: comint-buffer-maximum-size是一个在comint.el中定义的变量。它的值为1024。
文档说明:
Comint缓冲区的最大行数。如果函数comint-truncate-buffer' is oncomint-output-filter-functions',则会将Comint缓冲区从顶部截断,以使其不超过此数字。
您可以自定义此变量。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接