EmacsでPerl開発する上で必須な設定 #2 - flymake
Emacs22から標準添付されているflymakeが超便利です。flymakeは、動的にシンタックスチェックを行ってくれるelispで、typo等によるミスが、これでかなり減ること受け合い。以下の設定には、set-perl5lib.elが必要なので、あらかじめload-pathの通った場所にインストールしておく必要があります。
以下、設定。
;; flymake (Emacs22から標準添付されている) (require 'flymake) ;; set-perl5lib ;; 開いたスクリプトのパスに応じて、@INCにlibを追加してくれる ;; 以下からダウンロードする必要あり ;; http://svn.coderepos.org/share/lang/elisp/set-perl5lib/set-perl5lib.el (require 'set-perl5lib) ;; エラー、ウォーニング時のフェイス (set-face-background 'flymake-errline "red4") (set-face-foreground 'flymake-errline "black") (set-face-background 'flymake-warnline "yellow") (set-face-foreground 'flymake-warnline "black") ;; エラーをミニバッファに表示 ;; http://d.hatena.ne.jp/xcezx/20080314/1205475020 (defun flymake-display-err-minibuf () "Displays the error/warning for the current line in the minibuffer" (interactive) (let* ((line-no (flymake-current-line-no)) (line-err-info-list (nth 0 (flymake-find-err-info flymake-err-info line-no))) (count (length line-err-info-list))) (while (> count 0) (when line-err-info-list (let* ((file (flymake-ler-file (nth (1- count) line-err-info-list))) (full-file (flymake-ler-full-file (nth (1- count) line-err-info-list))) (text (flymake-ler-text (nth (1- count) line-err-info-list))) (line (flymake-ler-line (nth (1- count) line-err-info-list)))) (message "[%s] %s" line text))) (setq count (1- count))))) ;; Perl用設定 ;; http://unknownplace.org/memo/2007/12/21#e001 (defvar flymake-perl-err-line-patterns '(("\\(.*\\) at \\([^ \n]+\\) line \\([0-9]+\\)[,.\n]" 2 3 nil 1))) (defconst flymake-allowed-perl-file-name-masks '(("\\.pl$" flymake-perl-init) ("\\.pm$" flymake-perl-init) ("\\.t$" flymake-perl-init))) (defun flymake-perl-init () (let* ((temp-file (flymake-init-create-temp-buffer-copy 'flymake-create-temp-inplace)) (local-file (file-relative-name temp-file (file-name-directory buffer-file-name)))) (list "perl" (list "-wc" local-file)))) (defun flymake-perl-load () (interactive) (defadvice flymake-post-syntax-check (before flymake-force-check-was-interrupted) (setq flymake-check-was-interrupted t)) (ad-activate 'flymake-post-syntax-check) (setq flymake-allowed-file-name-masks (append flymake-allowed-file-name-masks flymake-allowed-perl-file-name-masks)) (setq flymake-err-line-patterns flymake-perl-err-line-patterns) (set-perl5lib) (flymake-mode t)) (add-hook 'cperl-mode-hook 'flymake-perl-load)