ruby-mode の flymake の設定をした

JavaScript 書くときは使いまくりんぐな flymake だったけど
Ruby では使っていなかったので使えるようにした。
flymake でリアルタイム文法チェック - とりあえず暇だったし何となく始めたブログを参考に
以下を .emacs に追加した。

;; flymake for ruby
(require 'flymake)
;; Invoke ruby with '-c' to get syntax checking
(defun flymake-ruby-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 "ruby" (list "-c" local-file))))
(push '(".+\\.rb$" flymake-ruby-init) flymake-allowed-file-name-masks)
(push '("Rakefile$" flymake-ruby-init) flymake-allowed-file-name-masks)
(push '("^\\(.*\\):\\([0-9]+\\): \\(.*\\)$" 1 2 nil 3) flymake-err-line-patterns)
(add-hook
 'ruby-mode-hook
 '(lambda ()
    ;; Don't want flymake mode for ruby regions in rhtml files
    (if (not (null buffer-file-name)) (flymake-mode))
    ;; エラー行で C-c d するとエラーの内容をミニバッファで表示する
    (define-key ruby-mode-map "\C-cd" 'credmp/flymake-display-err-minibuf)))

(defun credmp/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)))))


参考先ではエラー時の face を変えているようだけど
僕はデフォルトの背景がライトピンクになるやつがけっこう気に入っているのでその設定は外した。



エラー行で「C-c d」するとエラーの内容をポップアップで表示する設定もしてみたが
Meadow」だと「C-g」してもウィンドウが消えないようだ。
でもエンターを叩いたら消えるので特に問題はない。


また、エラー行で「C-c d」したときにエラーの内容を「ミニバッファ」で表示するようにした。
(参考: flymake のエラー/警告表示をミニバッファで - とりあえず暇だったし何となく始めたブログ)