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

csc*_*hol 3 emacs elisp

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

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

如果进程结果是其他任何我想在运行Mx编译时显示类似于*compilation*status输出的进程缓冲区.

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

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

(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.

Tre*_*son 5

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

(compilation-mode)
Run Code Online (Sandbox Code Playgroud)

  • 大!正是我需要的.为了完整起见,(compilation-minor-mode)也可以. (2认同)