2025年3月21日金曜日

emacs に elisp-autofmt を入れて elisp のフォーマットをしてみる

emacs に elisp-autofmt を入れて elisp のフォーマットをしてみる

概要

emacs の設定ファイルである el ファイルをフォーマットする方法を紹介します

環境

  • macOS 15.3.2
  • emacs 30.1
  • python 3.12.9

インストール

  • package-list-packages
  • elisp-autofmt -> x -> y

フォーマット実行

  • M-x elisp-autofmt-buffer

emacs を実行しているパスで python コマンドが使えないとダメなので注意しましょう

トラブルシューティング

実行時に

elisp-autofmt: error output
Note, built-in variable ‘image-scaling-factor’ not bound

となる場合は再度 elisp-autofmt-buffer を実行すればエラーが解消されます

自動起動

(add-hook 'emacs-lisp-mode-hook 'elisp-autofmt-mode)
(add-hook 'lisp-mode-hook 'elisp-autofmt-mode)

これで el ファイル保存時に自動でフォーマットしてくれます

うまく保存時にフォーマットしてくれない場合は以下でも OK です

(add-hook 'before-save-hook 'elisp-autofmt-buffer)

CLI で実行

emacs が必要ですが CLI からも実行できます
https://codeberg.org/ideasman42/emacs-elisp-autofmt/src/branch/main/elisp-autofmt-cmd.py を使っても OK です

for file_name in `git ls-files files | egrep -e 'el|emacs'`
do
emacs --batch $file_name -l ~/.emacs.d/elpa/elisp-autofmt-*/elisp-autofmt.el --eval "
(progn
  (let ((use-stdout nil))
    (dolist (buf (buffer-list))
      (with-current-buffer buf
        (when (buffer-file-name)
          (setq buffer-undo-list t) ;; Disable undo.
          (if use-stdout
              (progn
                (elisp-autofmt-buffer)
                (princ (buffer-substring-no-properties (point-min) (point-max))))
            (princ buffer-file-name)
            (princ \"\n\")
            (elisp-autofmt-buffer-to-file)))))))"
done

こちらも実行するパスに python が必要になるので注意しましょう

最後に

elisp-autofmt をインストールして elisp ファイルの自動フォーマットをしてみました

次回は CI を組み込んで lint してみたいと思います

参考サイト

0 件のコメント:

コメントを投稿