Có cách nào tốt để làm nổi bật tất cả các lỗi biên dịch trong emacs, cụ thể là ở chế độ haskell không?
Chức năng next-error
( C-x `) nhấn mạnh chỉ có một lỗi duy nhất, nhưng nó không được thiết lập match-data
để lỗi này, ít nhất là trong haskell-mode
, với nó haskell-interactive-mode-next-error
. Thậm chí ít hữu ích hơn, nó gọi (error "No more errors")
ở lỗi cuối cùng, vì vậy tôi nghĩ có lẽ nó chỉ được gọi là tương tác.
Tôi đã làm như sau để tạo lớp phủ nổi bật ở mỗi lỗi biên dịch, nhưng nó thực sự rất khó hiểu và không đáng tin cậy. next-error-function
được cho là được xác định bởi chế độ biên dịch ( haskell-interaction-mode
trong trường hợp của tôi); khi trả về, dữ liệu khớp dường như trỏ đến một chuỗi nào đó. Tôi sử dụng biến compilation-highlight-overlay
để lấy lớp phủ mà lỗi tiếp theo tạo ra.
(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))))
Có một số cách thức kinh điển để làm điều này?