Просмотр ошибок предыдущей компиляции во время новой компиляции?

Как настроить emacs, чтобы я мог просматривать ошибки предыдущей компиляции во время новой компиляции?

Две вещи не работают для меня:

  1. M-g Функция M-g (следующая ошибка) не работает, когда выполняется вторая компиляция.

  2. У меня emacs разбит на 5 неравных окон (split-windows-horizontally), «окно» компиляции в два раза больше (настройка монитора dbl). Когда я запускаю компиляцию, она всегда появляется в последнем окне двойной компиляции. Теперь он открывает для себя новое окно.

8

Решение

Вот решение, которое, кажется, отвечает всем вашим требованиям:

  • *compilation-old* буфер всегда остается в одном и том же окне
  • next-error не ломается
  • все последующие результаты компиляции добавляются в конце *compilation-old* когда процесс компиляции заканчивается
(defun my-compilation-finish-function (buffer msg)
;; Don't do anything if we are in a derived mode
(when (with-current-buffer buffer (eq major-mode 'compilation-mode))

;; Insert the last compilation output at the end of *compilation-old*
(if (get-buffer "*compilation-old*")
(with-current-buffer "*compilation-old*"(save-excursion
(goto-char (point-max))
(insert-buffer buffer)))
(with-current-buffer buffer
(rename-buffer "*compilation-old*")))))

(add-hook 'compilation-finish-functions 'my-compilation-finish-function)(defadvice compile (around my-compile-show-old activate)
"Show the *compilation-old* buffer after starting the compilation"(let ((buffer (current-buffer)))
(when (get-buffer "*compilation-old*")
(pop-to-buffer "*compilation-old*")
(switch-to-buffer "*compilation*"))
ad-do-it
(when (get-buffer "*compilation-old*")
(switch-to-buffer "*compilation-old*")
(pop-to-buffer buffer))))
3

Другие решения

Помещение следующего в ваш файл инициализации переименует буфер компиляции в *compilation-old* когда команда компиляции заканчивается.

Обратите внимание, что это не будет работать, если вы запустите новый процесс компиляции из старого буфера компиляции (так как compile будет в этом случае использовать буфер вместо создания нового)

(defun my-rename-compilation-buffer (buffer message)
;; Don't do anything if we are in a derived mode
(when (with-current-buffer buffer (eq major-mode 'compilation-mode))
(let* ((old-compilation-buffer-name "*compilation-old*")
(old-compilation-buffer (get-buffer old-compilation-buffer-name)))

;; Kill old compilation buffer if necessary
(when old-compilation-buffer
(kill-buffer old-compilation-buffer))

;; Rename the current compilation buffer
(with-current-buffer buffer
(rename-buffer old-compilation-buffer-name)))))

(add-hook 'compilation-finish-functions 'my-rename-compilation-buffer)
2

Это немного Kludge, но попробуйте это:

Перед началом новой компиляции сохраните (напишите, C-x C-w) текущий буфер компиляции в файл. Если буфер для нового файла теряет свою настройку «режим компиляции», просто включите режим компиляции (режим компиляции M-x).

0
По вопросам рекламы [email protected]