有沒有一種好方法可以突出顯示 emacs 中的所有編譯錯誤,特別是在 haskell 模式下?
函數next-error
( C-x `) 僅突出顯示一個錯誤,但它不會設定match-data
該錯誤,至少在 中haskell-mode
,其haskell-interactive-mode-next-error
.更沒有幫助的是,它(error "No more errors")
在最後一個錯誤時調用,所以我認為它可能只是為了互動式調用。
我執行了以下操作來在每個編譯錯誤處建立突出顯示疊加,但它確實很笨重且不可靠。next-error-function
應該由編譯模式定義(haskell-interaction-mode
在我的例子中);返回時,匹配資料似乎指向某個字串。我使用該變數compilation-highlight-overlay
來獲取下一個錯誤創建的覆蓋。
(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
仍處於實驗階段,請隨時提交問題。