Как создать буфер, похожий на * compilation * в Emacs? - PullRequest
3 голосов
/ 09 августа 2009

У меня есть асинхронный процесс в Emacs, который создает файл TAGS.

Этот процесс создает буфер процесса с именем * ctags *. Если результат процесса «закончен \ n», я убиваю буфер.

Если результатом процесса является что-то еще, я хочу отобразить буфер процесса, похожий на вывод состояния * compilation * при запуске M-x compile .

т.е. Я хочу разделить экран по вертикали и показать буфер * ctags * внизу. Нажатие q предпочтительно уничтожит нижний буфер и просто покажет мой оригинальный буфер.

Я пытался использовать это в моем обратном вызове стража:

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

, но кроме того факта, что он помещает буфер * ctags * сверху, буфер не имеет тех же характеристик, что и вывод * compilation *, например, нажатие q вставляет q.

Как мне создать буфер типа * compilation *?

EDIT:

Вдохновленный ответом Трея Джексона ниже, это именно то, что я хочу:

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

Он выбирает буфер * ctags *, переводит его в режим компиляции и q выходит из окна.

EDIT2: Использование

(compilation-mode)
(основной режим вместо второстепенного), поскольку Emacs почему-то не любит повторное использование второстепенного режима в существующем буфере.

Сообщение об ошибке, которое я получаю:

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

Ответы [ 2 ]

5 голосов
/ 09 августа 2009

Чтобы получить поведение буфера *compilation*, добавьте его в ваш скрипт:

(compilation-mode)
3 голосов
/ 10 августа 2009

Лучше вывести собственный режим из режима компиляции и определить регулярное выражение для ошибок и т. Д.

...