自分は普段の開発ではEmacsを使っていて、VSCodeユーザに笑われつつも(被害妄想)今のところ普通に開発できている。
そして、エラー表示にはFlycheckを使っている:
FlycheckはLSP-modeに対応しているので、LSPで検出したエラーをEmacsの枠組みでちゃんと表示できる。Flycheckもlsp-modeも、いちおうデファクトな地位を築いている(最近はeglotというlsp-mode互換?な拡張機能も出ているようだ)。
ウィンドウを出し入れしたい
さて、Flycheckではエラーを一覧するための関数としてflycheck-list-errors
が用意されている:
ただ、コマンドを実行すると出たままになってしまってちょっと邪魔なのと、dedicated window(そのウィンドウを特定のバッファが占有するモード)にならないので、エラー一覧の画面に他のバッファを開いてしまうことがあって困っていた。
この2点の問題を解消するべく、いくつかのelispを書いた。
まず、特定のショートカットでflycheck-list-errors
を実行してエラーリストを開き、もう一度同じショートカットを押下するとそのウィンドウを消すようにした:
(define-key evil-normal-state-map (kbd "SPC !") #'(lambda () (interactive) (if (get-buffer-window "*Flycheck errors*") ;; when already window opened, close (delete-window (get-buffer-window "*Flycheck errors*")) ;; otherwise, open flycheck error list and make it dedicated (progn (flycheck-list-errors) (let* ((original-buffer-name (buffer-name)) (original-window (get-buffer-window original-buffer-name)) (flycheck-window (get-buffer-window "*Flycheck errors*"))) (select-window flycheck-window) (set-window-dedicated-p flycheck-window t) (select-window original-window))))))
自分はEVILを使っているので、EVILユーザでなければevil-normal-state-map
のあたりを適宜読み替えてほしい。
この関数をevalすると、SPC !
を押下するたびに、エラーリストウィンドウがトグルされるようになる。エラーリストウィンドウにdedicated属性を付与するようにしてあるので、勝手にバッファが上書きされることはない。
加えて、常に画面下部10%のサイズで表示されるようにした:
(add-to-list 'display-buffer-alist `(,(rx bos "*Flycheck errors*" eos) (display-buffer-reuse-window display-buffer-in-side-window) (side . bottom) (reusable-frames . visible) (window-height . 0.1)))
これはflycheckのマニュアルからのコピペをいじっただけなので、あまりよくわかっていないが、まあとにかくこれでよい。