Есть ли хороший способ подсветить все ошибки компиляции в emacs, особенно в haskell-mode?
Функция next-error
( C-x `) выделяет только одну ошибку, но не устанавливает match-data
ее, по крайней мере в haskell-mode
, с ее haskell-interactive-mode-next-error
. Еще менее полезно то, что она вызывается (error "No more errors")
при последней ошибке, поэтому я думаю, что, возможно, она предназначена только для интерактивного вызова.
Я сделал следующее, чтобы создать подсветку наложений при каждой ошибке компиляции, но это действительно неуклюже и ненадежно. next-error-function
предполагается, что определяется режимом компиляции ( haskell-interaction-mode
в моем случае); при возврате match-data, похоже, указывает на некоторую строку. Я использую переменную, compilation-highlight-overlay
чтобы получить наложение, которое создает next-error.
(let (buf (just-started t) errors overlays)
;; Ask next-error to create all the highlighting overlays, save
;; their locations, then delete them, use the locations to
;; create our own overlays.
(ignore-errors
(when (setq buf (next-error-find-buffer))
(save-match-data
(save-excursion
(dotimes (max-iter 10)
(with-current-buffer buf
(funcall next-error-function 1 just-started)
(setq just-started nil)
(let* ((o compilation-highlight-overlay)
(start (overlay-start o)) (end (overlay-end o)))
;; (message "Found (%s,%s)" start end)
(push (cons start end) errors)
(push o overlays))))))))
(mapc 'delete-overlay overlays)
(dolist (err errors)
(let ((o (make-overlay (car err) (cdr err))))
(overlay-put o 'category 'error-highlight))))
Есть ли какой-то канонический способ сделать это?
решение1
Его очень сложно эксплуатировать, next-error-function
чтобы найти все ошибки, поскольку он реализован в очень императивной манере.
Я начал небольшой проект под названием complation-highlight-el
, который позволяет нам видеть более одной ошибки одновременно.
https://github.com/m2ym/compilation-highlight-el
Пока что это экспериментальная стадия, не стесняйтесь присылать сообщения о проблемах.