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
まだ実験段階ですので、お気軽に問題をご提出ください。