在 emacs 中高亮显示所有编译错误

在 emacs 中高亮显示所有编译错误

有没有一个好的方法可以突出显示 emacs 中的所有编译错误,特别是在 haskell 模式下?

函数next-error( C-x `) 仅突出显示单个错误,但它不会将其设置match-data为错误,至少在 中不会haskell-modehaskell-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

仍处于实验阶段,欢迎随时提交问题。

相关内容