OpenSolaris2009.06のemacs環境のflymake設定

 さて、flymake環境作る。

2011/03/18

 C用の設定忘れてたので追加、このときはまだSolaris使っていたんだな(* ̄_ ̄)

flymake-mode

 以下を参考にflymakeの環境構築。
ちなみに、emacs22以降だとデフォルトでflymakeは含まれている*1とのこと。

  1. C/C++
  2. Ruby
  3. Java*2


 ~/.emacs.d/elisp/init-flymake.elを作成して、以下記載。

;; -*- Mode: Emacs-Lisp ; Coding: utf-8 -*-


;;; Flymake
(require 'flymake)

;;; ; http://d.hatena.ne.jp/mowamowa/20071217/1197865281
;;; ;; C
(defun flymake-c-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 "gcc" (list "-Wall" "-Wextra" "-fsyntax-only" local-file))))
(push '("\\.c$" flymake-c-init) flymake-allowed-file-name-masks)

(add-hook 'c-mode-hook
          '(lambda ()
             (flymake-mode t)))


;;; ; http://d.hatena.ne.jp/suztomo/20080905/1220633281
;;; ;; C++
(defun flymake-cc-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 "g++" (list "-Wall" "-Wextra" "-fsyntax-only" local-file))))

(push '("\\.cpp$" flymake-cc-init) flymake-allowed-file-name-masks)

(add-hook 'c++-mode-hook
          '(lambda ()
             (flymake-mode t)))


;;; ; http://d.hatena.ne.jp/gan2/20080702/1214972962
;;; ;; Ruby
;;; ;; 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)))))


;;; ; http://dev.ariel-networks.com/Members/matsuyama/detect-syntax-errors-by-flymake
;;; ;; Java
;; redefine to remove "check-syntax" target
;(defun flymake-get-make-cmdline (source base-dir)
;  (list "make"
;        (list "-s"
;              "-C"
;              base-dir
;              (concat "CHK_SOURCES=" source)
;               "SYNTAX_CHECK_MODE=1")))
;
;;; specify that flymake use ant instead of make                                                                                                                
;(setcdr (assoc "\\.java\\'" flymake-allowed-file-name-masks)
;        '(flymake-simple-ant-java-init flymake-simple-java-cleanup))
;
;;; redefine to remove "check-syntax" target
;(defun flymake-get-ant-cmdline (source base-dir)
;  (list "ant"
;        (list "-buildfile"
;              (concat base-dir "/" "build.xml"))))
;
;(add-hook 'java-mode-hook
;          '(lambda ()
;             (flymake-mode)))))

;;; ;; Other
;;; ;; Other
~/.emacsを修正

 init-misc.elの読み込みにinit-flymake.elを追加><

(load "init-opensolaris")
(load "init-ruby")
(load "init-flymake")
(load "init-misc")

動作確認問題無し>w<b

 しかし嘘はついてないんだけど、ここの所あんまりOpenSolarisとは関係ないね。
OpenSolaris上のemacsの設定ってだけでw;

*1:emacs21だとflymakeをDL><

*2:多分emacs21の時の情報なのでしょうね、emacs22ではうまく動かなかったw;