有没有一个好的方法可以突出显示 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
在我的情况下);返回时,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
仍处于实验阶段,欢迎随时提交问题。