gpt4 book ai didi

emacs 用回车覆盖

转载 作者:行者123 更新时间:2023-12-04 02:43:18 25 4
gpt4 key购买 nike

我喜欢使用 start-process-shell-command 从 emacs 中启动子进程,例如编译、渲染或单元测试。我知道我可以通过提供缓冲区名称将输出重定向到缓冲区。

(start-process-shell-command "proc-name" "output-buffer-name" command)

很多进程会使用回车作为实时进度条,这样在终端中进度条在最终输出中只占一行。然而,当这个进度条被重定向到一个 emacs 缓冲区时,回车字符被保留,因此缓冲区显示所有状态更新,使得阅读输出变得很痛苦。

有没有办法让 emacs 像终端处理回车一样处理输出缓冲区中的回车?即,将指针返回到行首并覆盖现有文本。

最佳答案

您可以使用 a filter function 执行此操作.

这有点工作,但你只需要在输出中找到以\r 终止的行,然后在缓冲区中找到旧行,删除该行,并用新行替换它。这是一个玩具版本:

// foo.c
#include <stdio.h>
main() {
int i;
for (i = 0; i < 10; i++) {
printf(" count: %d\r", i);
fflush(stdout);
sleep(1);
}
printf("\n");
}

然后您可以让每个计数行覆盖前一行(在这种情况下通过删除整个缓冲区。)

(defun filt (proc string)
(with-current-buffer "foo"
(delete-region (point-min) (point-max))
(insert string)))

(progn
(setq proc
(start-process "foo" "foo" "path/to/foo"))
(set-process-filter proc 'filt))

关于emacs 用回车覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19407278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com