如何在Emacs中创建类似于* compilation *的缓冲区?

时间:2009-08-09 14:37:29

标签: emacs elisp

我在Emacs中有一个异步进程,它创建了一个TAGS文件。

此过程创建一个名为* ctags *的进程缓冲区。如果处理结果是“完成\ n”,我会杀死缓冲区。

如果处理结果是其他任何内容,我想在运行 M-x compile 时显示类似于* compilation * status输出的进程缓冲区。

即。我想垂直分割屏幕并在底部显示* ctags *缓冲区。按 q 最好 kill 底部缓冲区并显示原始缓冲区。

我尝试在我的进程中使用了这个回调:

(split-window-vertically)
(set-window-buffer (selected-window) (get-buffer "*ctags*"))

但是除了将* ctags *缓冲区置于顶部之外,缓冲区与* compilation *输出不具有相同的特性,例如:按 q 插入q。

如何创建像* compilation *?

这样的缓冲区

修改

受到Trey Jackson在下面的回答的启发,这正是我想要的:

(pop-to-buffer (get-buffer "*ctags*"))
(compilation-mode)

选择* ctags *缓冲区,将其置于编译模式, q 将退出窗口。

EDIT2: 使用

(compilation-mode)
(主模式而不是次模式),因为Emacs不知道不喜欢将次模式重新应用到现有缓冲区。

我得到的错误信息是:

Toggling compilation-minor-mode off; better pass explicit argument.

2 个答案:

答案 0 :(得分:5)

要获取*compilation*缓冲区的行为,请将其添加到脚本中:

(compilation-mode)

答案 1 :(得分:3)

最好从编译模式派生自己的模式,并定义错误正则表达式等。