2019-03-31 11:00:21 +00:00
---
title: Flymakeが便利
author: kazu634
date: 2008-08-25
wordtwit_post_info:
- 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:4233;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}'
categories:
- Emacs
---
< div class = "section" >
< p >
今までの懸念事項だったflymakeを導入してみた。色々な人が色々と書いているので、それを参考にする。
< / p >
< h4 >
共通の設定
< / h4 >
< pre class = "syntax-highlight" >
< span class = "synComment" > ;; ===============================================< / span >
< span class = "synComment" > ;; === flymake (Emacs22から標準添付されている) ===< / span >
< span class = "synComment" > ;; ===============================================< / span >
< span class = "synSpecial" > (< / span > < span class = "synStatement" > require< / span > < span class = "synSpecial" > '< / span > < span class = "synIdentifier" > flymake< / span > < span class = "synSpecial" > )< / span >
< span class = "synComment" > ;; set-perl5lib< / span >
< span class = "synComment" > ;; 開いたスクリプトのパスに応じて、@INCにlibを追加してくれる< / span >
< span class = "synComment" > ;; 以下からダウンロードする必要あり< / span >
< span class = "synComment" > ;; http://svn.coderepos.org/share/lang/elisp/set-perl5lib/set-perl5lib.el< / span >
< span class = "synSpecial" > (< / span > < span class = "synStatement" > require< / span > < span class = "synSpecial" > '< / span > < span class = "synIdentifier" > set-perl5lib< / span > < span class = "synSpecial" > )< / span >
< span class = "synComment" > ;; エラー、ウォーニング時のフェイス< / span >
< span class = "synSpecial" > (< / span > set-face-background < span class = "synSpecial" > '< / span > < span class = "synIdentifier" > flymake-errline< / span > < span class = "synConstant" > " red4" < / span > < span class = "synSpecial" > )< / span >
< span class = "synSpecial" > (< / span > set-face-foreground < span class = "synSpecial" > '< / span > < span class = "synIdentifier" > flymake-errline< / span > < span class = "synConstant" > " black" < / span > < span class = "synSpecial" > )< / span >
< span class = "synSpecial" > (< / span > set-face-background < span class = "synSpecial" > '< / span > < span class = "synIdentifier" > flymake-warnline< / span > < span class = "synConstant" > " yellow" < / span > < span class = "synSpecial" > )< / span >
< span class = "synSpecial" > (< / span > set-face-foreground < span class = "synSpecial" > '< / span > < span class = "synIdentifier" > flymake-warnline< / span > < span class = "synConstant" > " black" < / span > < span class = "synSpecial" > )< / span >
< span class = "synComment" > ;; エラーをミニバッファに表示< / span >
< span class = "synComment" > ;; http://d.hatena.ne.jp/xcezx/20080314/1205475020< / span >
< span class = "synSpecial" > (< / span > < span class = "synStatement" > defun< / span > flymake-display-err-minibuf < span class = "synSpecial" > ()< / span >
< span class = "synConstant" > " Displays the error/warning for the current line in the minibuffer" < / span >
< span class = "synSpecial" > (< / span > interactive< span class = "synSpecial" > )< / span >
< span class = "synSpecial" > (< / span > < span class = "synStatement" > let*< / span > < span class = "synSpecial" > ((< / span > line-no < span class = "synSpecial" > (< / span > flymake-current-line-no< span class = "synSpecial" > ))< / span >
< span class = "synSpecial" > (< / span > line-err-info-list < span class = "synSpecial" > (< / span > < span class = "synStatement" > nth< / span > < span class = "synConstant" > < / span > < span class = "synSpecial" > (< / span > flymake-find-err-info flymake-err-info line-no< span class = "synSpecial" > )))< / span >
< span class = "synSpecial" > (< / span > < span class = "synStatement" > count< / span > < span class = "synSpecial" > (< / span > < span class = "synStatement" > length< / span > line-err-info-list< span class = "synSpecial" > )))< / span >
< span class = "synSpecial" > (< / span > while < span class = "synSpecial" > (< / span > < span class = "synStatement" > > < / span > < span class = "synStatement" > count< / span > < span class = "synConstant" > < / span > < span class = "synSpecial" > )< / span >
< span class = "synSpecial" > (< / span > < span class = "synStatement" > when< / span > line-err-info-list
< span class = "synSpecial" > (< / span > < span class = "synStatement" > let*< / span > < span class = "synSpecial" > ((< / span > file < span class = "synSpecial" > (< / span > flymake-ler-file < span class = "synSpecial" > (< / span > < span class = "synStatement" > nth< / span > < span class = "synSpecial" > (< / span > < span class = "synStatement" > 1-< / span > < span class = "synStatement" > count< / span > < span class = "synSpecial" > )< / span > line-err-info-list< span class = "synSpecial" > )))< / span >
< span class = "synSpecial" > (< / span > full-file < span class = "synSpecial" > (< / span > flymake-ler-full-file < span class = "synSpecial" > (< / span > < span class = "synStatement" > nth< / span > < span class = "synSpecial" > (< / span > < span class = "synStatement" > 1-< / span > < span class = "synStatement" > count< / span > < span class = "synSpecial" > )< / span > line-err-info-list< span class = "synSpecial" > )))< / span >
< span class = "synSpecial" > (< / span > text < span class = "synSpecial" > (< / span > flymake-ler-text < span class = "synSpecial" > (< / span > < span class = "synStatement" > nth< / span > < span class = "synSpecial" > (< / span > < span class = "synStatement" > 1-< / span > < span class = "synStatement" > count< / span > < span class = "synSpecial" > )< / span > line-err-info-list< span class = "synSpecial" > )))< / span >
< span class = "synSpecial" > (< / span > line < span class = "synSpecial" > (< / span > flymake-ler-line < span class = "synSpecial" > (< / span > < span class = "synStatement" > nth< / span > < span class = "synSpecial" > (< / span > < span class = "synStatement" > 1-< / span > < span class = "synStatement" > count< / span > < span class = "synSpecial" > )< / span > line-err-info-list< span class = "synSpecial" > ))))< / span >
< span class = "synSpecial" > (< / span > message < span class = "synConstant" > " [%s] %s" < / span > line text< span class = "synSpecial" > )))< / span >
< span class = "synSpecial" > (< / span > < span class = "synStatement" > setq< / span > < span class = "synStatement" > count< / span > < span class = "synSpecial" > (< / span > < span class = "synStatement" > 1-< / span > < span class = "synStatement" > count< / span > < span class = "synSpecial" > )))))< / span >
< / pre >
< h4 >
C
< / h4 >
< p >
Cの設定はこんな感じ:
< / p >
< pre class = "syntax-highlight" >
< span class = "synComment" > ;; === Setting some C / C++ defaults ===< / span >
< span class = "synSpecial" > (< / span > add-hook < span class = "synSpecial" > '< / span > < span class = "synIdentifier" > c-mode-common-hook< / span >
< span class = "synSpecial" > (< / span > < span class = "synStatement" > function< / span > < span class = "synSpecial" > (< / span > < span class = "synStatement" > lambda< / span > < span class = "synSpecial" > ()< / span >
< span class = "synComment" > ;; more stuff here< / span >
< span class = "synSpecial" > (< / span > flymake-mode < span class = "synStatement" > t< / span > < span class = "synSpecial" > )< / span >
< span class = "synSpecial" > )))< / span >
< span class = "synSpecial" > (< / span > add-hook < span class = "synSpecial" > '< / span > < span class = "synIdentifier" > c-mode-common-hook< / span >
< span class = "synSpecial" > '(< / span > < span class = "synStatement" > lambda< / span > < span class = "synSpecial" > ()< / span >
< span class = "synSpecial" > (</ span > define-key c-mode-map < span class = "synConstant" > " \C-cd" </ span > 'flymake-display-err-menu-for-current-line< span class = "synSpecial" > )))</ span >
< / pre >
< p >
Cの場合、Makefileを一緒に書かなければいけない。とりあえずこんな風に書いておけば問題ないようだ。
< / p >
< blockquote >
< p >
.PHONY: check-syntax
< / p >
< p >
check-syntax:
< / p >
< p >
$(CXX) -Wall -Wextra -pedantic -fsyntax-only $(CHK_SOURCES)
< / p >
< / blockquote >
< h4 >
Perl
< / h4 >
< p >
Perlはこう:
< / p >
< pre class = "syntax-highlight" >
< span class = "synComment" > ;; === Perl用設定 ===< / span >
< span class = "synComment" > ;; http://unknownplace.org/memo/2007/12/21#e001< / span >
< span class = "synSpecial" > (< / span > < span class = "synStatement" > defvar< / span > flymake-perl-err-line-patterns
< span class = "synSpecial" > '((</ span >< span class = "synConstant" > " \\(.*\\) at \\([^ \n]+\\) line \\([0-9]+\\)[,.\n]" </ span > 2 3 < span class = "synStatement" > nil</ span > 1< span class = "synSpecial" > )))</ span >
< span class = "synSpecial" > (< / span > defconst flymake-allowed-perl-file-name-masks
< span class = "synSpecial" > '((</ span >< span class = "synConstant" > " \\.pl$" </ span > flymake-perl-init< span class = "synSpecial" > )</ span >
< span class = "synSpecial" > (</ span >< span class = "synConstant" > " \\.pm$" </ span > flymake-perl-init< span class = "synSpecial" > )</ span >
< span class = "synSpecial" > (</ span >< span class = "synConstant" > " \\.t$" </ span > flymake-perl-init< span class = "synSpecial" > )))</ span >
< span class = "synSpecial" > (< / span > < span class = "synStatement" > defun< / span > flymake-perl-init < span class = "synSpecial" > ()< / span >
< span class = "synSpecial" > (< / span > < span class = "synStatement" > let*< / span > < span class = "synSpecial" > ((< / span > temp-file < span class = "synSpecial" > (< / span > flymake-init-create-temp-buffer-copy
< span class = "synSpecial" > '< / span > < span class = "synIdentifier" > flymake-create-temp-inplace< / span > < span class = "synSpecial" > ))< / span >
< span class = "synSpecial" > (< / span > local-file < span class = "synSpecial" > (< / span > file-relative-name
temp-file
< span class = "synSpecial" > (< / span > file-name-directory buffer-file-name< span class = "synSpecial" > ))))< / span >
< span class = "synSpecial" > (< / span > < span class = "synStatement" > list< / span > < span class = "synConstant" > " perl" < / span > < span class = "synSpecial" > (< / span > < span class = "synStatement" > list< / span > < span class = "synConstant" > " -wc" < / span > local-file< span class = "synSpecial" > ))))< / span >
< span class = "synSpecial" > (< / span > < span class = "synStatement" > defun< / span > flymake-perl-load < span class = "synSpecial" > ()< / span >
< span class = "synSpecial" > (< / span > interactive< span class = "synSpecial" > )< / span >
< span class = "synSpecial" > (< / span > defadvice flymake-post-syntax-check < span class = "synSpecial" > (< / span > before flymake-force-check-was-interrupted< span class = "synSpecial" > )< / span >
< span class = "synSpecial" > (< / span > < span class = "synStatement" > setq< / span > flymake-check-was-interrupted < span class = "synStatement" > t< / span > < span class = "synSpecial" > ))< / span >
< span class = "synSpecial" > (< / span > ad-activate < span class = "synSpecial" > '< / span > < span class = "synIdentifier" > flymake-post-syntax-check< / span > < span class = "synSpecial" > )< / span >
< span class = "synSpecial" > (< / span > < span class = "synStatement" > setq< / span > flymake-allowed-file-name-masks < span class = "synSpecial" > (< / span > < span class = "synStatement" > append< / span > flymake-allowed-file-name-masks flymake-allowed-perl-file-name-masks< span class = "synSpecial" > ))< / span >
< span class = "synSpecial" > (< / span > < span class = "synStatement" > setq< / span > flymake-err-line-patterns flymake-perl-err-line-patterns< span class = "synSpecial" > )< / span >
< span class = "synSpecial" > (< / span > set-perl5lib< span class = "synSpecial" > )< / span >
< span class = "synSpecial" > (< / span > flymake-mode < span class = "synStatement" > t< / span > < span class = "synSpecial" > ))< / span >
< span class = "synSpecial" > (< / span > add-hook < span class = "synSpecial" > '< / span > < span class = "synIdentifier" > cperl-mode-hook< / span > < span class = "synSpecial" > '< / span > < span class = "synIdentifier" > flymake-perl-load< / span > < span class = "synSpecial" > )< / span >
< / pre >
< h4 >
Gauche
< / h4 >
< p >
「< a href = "http://d.hatena.ne.jp/higepon/20080309/1205043148" onclick = "__gaTracker('send', 'event', 'outbound-article', 'http://d.hatena.ne.jp/higepon/20080309/1205043148', '小黒さんのSchemeにおける glint + Emacs + flymake を試してみた – ひげぽん OSとか作っちゃうかMona-');" target = "_blank" > 小黒さんのSchemeにおける glint + Emacs + flymake を試してみた – ひげぽん OSとか作っちゃうかMona-< / a > 」を参考に。
< / p >
< pre class = "syntax-highlight" >
< span class = "synComment" > ;; === Gauche on Flymake ===< / span >
< span class = "synSpecial" > (</ span >< span class = "synStatement" > defvar</ span > flymake-glint-err-line-patterns < span class = "synSpecial" > '((</ span >< span class = "synConstant" > " ^\\(.+\\):\\([0-9]+\\): \\(.+\\)$" </ span > 1 2 < span class = "synStatement" > nil</ span > 3< span class = "synSpecial" > )))</ span >
< span class = "synSpecial" > (</ span > defconst flymake-allowed-gauche-file-name-masks < span class = "synSpecial" > '((</ span >< span class = "synConstant" > " \\.scm$" </ span > flymake-gauche-init< span class = "synSpecial" > )))</ span >
< span class = "synSpecial" > (< / span > < span class = "synStatement" > defun< / span > flymake-gauche-init < span class = "synSpecial" > ()< / span >
< span class = "synSpecial" > (< / span > < span class = "synStatement" > let*< / span > < span class = "synSpecial" > ((< / span > temp-file < span class = "synSpecial" > (< / span > flymake-init-create-temp-buffer-copy
< span class = "synSpecial" > '< / span > < span class = "synIdentifier" > flymake-create-temp-inplace< / span > < span class = "synSpecial" > ))< / span >
< span class = "synSpecial" > (< / span > local-file < span class = "synSpecial" > (< / span > file-relative-name
temp-file
< span class = "synSpecial" > (< / span > file-name-directory buffer-file-name< span class = "synSpecial" > ))))< / span >
< span class = "synSpecial" > (< / span > < span class = "synStatement" > list< / span > < span class = "synConstant" > " glint" < / span > < span class = "synSpecial" > (< / span > < span class = "synStatement" > list< / span > local-file< span class = "synSpecial" > ))))< / span >
< span class = "synSpecial" > (< / span > < span class = "synStatement" > defun< / span > flymake-gauche-load < span class = "synSpecial" > ()< / span >
< span class = "synSpecial" > (< / span > interactive< span class = "synSpecial" > )< / span >
< span class = "synSpecial" > (< / span > defadvice flymake-post-syntax-check < span class = "synSpecial" > (< / span > before flymake-force-check-was-interrupted< span class = "synSpecial" > )< / span >
< span class = "synSpecial" > (< / span > < span class = "synStatement" > setq< / span > flymake-check-was-interrupted < span class = "synStatement" > t< / span > < span class = "synSpecial" > ))< / span >
< span class = "synSpecial" > (< / span > ad-activate < span class = "synSpecial" > '< / span > < span class = "synIdentifier" > flymake-post-syntax-check< / span > < span class = "synSpecial" > )< / span >
< span class = "synSpecial" > (< / span > < span class = "synStatement" > setq< / span > flymake-allowed-file-name-masks < span class = "synSpecial" > (< / span > < span class = "synStatement" > append< / span > flymake-allowed-file-name-masks
flymake-allowed-gauche-file-name-masks< span class = "synSpecial" > ))< / span >
< span class = "synSpecial" > (< / span > < span class = "synStatement" > setq< / span > flymake-err-line-patterns flymake-glint-err-line-patterns< span class = "synSpecial" > )< / span >
< span class = "synSpecial" > (< / span > flymake-mode < span class = "synStatement" > t< / span > < span class = "synSpecial" > ))< / span >
< span class = "synSpecial" > (< / span > add-hook < span class = "synSpecial" > '< / span > < span class = "synIdentifier" > scheme-mode-hook< / span > < span class = "synSpecial" > '(< / span > < span class = "synStatement" > lambda< / span > < span class = "synSpecial" > ()< / span >
< span class = "synSpecial" > (< / span > flymake-gauche-load< span class = "synSpecial" > )< / span >
< span class = "synSpecial" > (</ span > define-key scheme-mode-map < span class = "synConstant" > " \C-cd" </ span > 'credmp/flymake-display-err-minibuf< span class = "synSpecial" > )))</ span >
< / pre >
< h4 >
感想
< / h4 >
< p >
これは果てしなく便利。
< / p >
2019-04-02 16:06:15 +00:00
< / div >