代码之家  ›  专栏  ›  技术社区  ›  cschol

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

  •  3
  • cschol  · 技术社区  · 15 年前

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

    此进程创建一个名为*ctags*的进程缓冲区。如果进程结果为“finished \n”,我将终止缓冲区。

    如果进程结果是其他任何结果,我希望在运行时显示类似于*编译*状态输出的进程缓冲区。 M—X编译 .

    也就是说,我要垂直拆分屏幕,并在底部显示*ctags*缓冲区。紧迫的 Q 最好是 杀死 底部缓冲区,只显示我的原始缓冲区。

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

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

    但是,除了将*ctags*缓冲区放在顶部之外,缓冲区没有与*compilation*输出相同的特性,例如,按 Q 插入Q.

    如何创建类似*编译*的缓冲区?

    编辑:

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

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

    它选择*ctags*缓冲区,将其放入编译模式,并 Q 将退出窗口。

    编辑2: 使用

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

    我得到的错误消息是:

    Toggling compilation-minor-mode off; better pass explicit argument.
    
    2 回复  |  直到 15 年前
        1
  •  5
  •   Trey Jackson    15 年前

    以了解 *compilation* 缓冲区,将其添加到脚本中:

    (compilation-mode)
    
        2
  •  3
  •   Alex Ott    15 年前

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