Flycheck の leaf: Unrecognized keyword エラーを修正

私の emacsは、設定ファイルを分割して init-loader で読み込んでいます。

ところが Emacsの設定を use-package から leaf へ移行したら 各分割ファイルで flycheckが leaf: Unrecognized keyword :el-get (emacs-lisp) というようなエラーを吐くようになった。leaf で使える便利なキーワード(:hydra :chord :el-getなど)のいくつかがエラーに引っかかるみたい。

init.el(leaf-keywords-init)が宣言されているので、 分割ファイルでも問題なく leaf固有のキーワードを使うことができるのだが flycheck は分割ファイルごとに compileチェックをするのでエラーになるというのが原因のようだ。

そこで、各分割ファイルの冒頭に (eval-when-compile (leaf-keywords-init)) というのを書いてみたら警告が消えた。

でも、このイディオムを各ファイルに入れるのは面倒な気がして leaf.elの作者の @conao3 さんに相談したところ下記の Lispを教えて頂いた。

(leaf flycheck
  :ensure t
  :hook (prog-mode-hook . flycheck-mode)
  :custom ((flycheck-emacs-lisp-initialize-packages . t))
  :config
  ;; Fixing leaf-keywords "Unrecognized keyword" error in flycheck
  (eval-and-compile (require 'flycheck))
  (setq flycheck-emacs-lisp-package-initialize-form
		(flycheck-sexp-to-string
		 '(progn
			(with-demoted-errors "Error during package initialization: %S"
              (package-initialize))
			(leaf-keywords-init)))))