js2-mode(2)

js2.el内で

(eval-when-compile
  (defvar font-lock-keywords nil))

されてるせいなのか,js2-modeだとfont-lock-keywordsがnilになってる.js2-modeのfont-lockの掛け方がよくわからなかったので,js2-mode-hookで無理矢理設定した.
それから,js2-mode-hook内でjs2-mirror-modeやjs2-dynamic-idle-timer-adjustにsetqしても反映されない.ソースを読んでみるに,これらはjs2-modeに入る時にだけ参照され,その後にjs2-mode-hookが実行されるので,これらはjs2-mode-hookでは設定できない.
そこで,defvarするようにしたけど,これはこれでロード順が変わると困るような気がする.
そんなこんなでとりあえずの設定:

(autoload 'js2-mode "js2" nil t)
(add-to-list 'auto-mode-alist '("\\.js$" . js2-mode))

(defadvice js2-mode-edit (before my-js2-mode-reset-timer () activate)
  (setq js2-idle-timer-delay (min (max 0.5 (* (point-max) 0.00004)) 2))) ; 数値は適当

(defvar js2-mirror-mode nil)
(add-hook 'js2-mode-hook
          '(lambda ()
             (set-face-foreground 'js2-function-param-face (face-foreground font-lock-variable-name-face))
             (setq js2-basic-offset 4)
             (setq js2-bounce-indent-flag nil)
             (setq js2-strict-cond-assign-warning nil)
             (setq js2-enter-indents-newline nil)
             (add-to-list
              'font-lock-keywords
              '(
                (" " 0 my-face-b-1 append)
                ("[ ]+$" 0 my-face-u-1 append) 
                ))
             (js2-reparse t)))

最後にjs2-reparseしておかないと,ファイルを開いた直後に js2-strict-cond-assign-warningが反映されない.