emacs:我可以在模式钩子fn中设置compilation-error-regexp-alist吗?

时间:2010-03-17 20:38:16

标签: emacs jslint

我正在尝试将compilation-error-regexp-alist设置为我添加为模式挂钩的函数。

(defun cheeso-javascript-mode-fn ()
  (turn-on-font-lock)

   ...bunch of other stuff

  ;; for JSLINT
  (make-local-variable 'compilation-error-regexp-alist)
  (setq compilation-error-regexp-alist
        '(
 ("^[ \t]*\\([A-Za-z.0-9_: \\-]+\\)(\\([0-9]+\\)[,]\\( *[0-9]+\\))\\( Microsoft JScript runtime error\\| JSLINT\\): \\(.+\\)$" 1 2 3)
 ))

  ;;(make-local-variable 'compile-command)
  (setq compile-command
       (let ((file (file-name-nondirectory buffer-file-name)))
         (concat "%windir%\\system32\\cscript.exe \\cheeso\\bin\\jslint.js "  file)))

)

(add-hook 'javascript-mode-hook 'cheeso-javascript-mode-fn)

模式挂钩运行。我在模式挂钩工作中设置的各种东西。 compile-command已设置。但由于某种原因,compilation-error-regexp-alist值不会生效。

如果我稍后在M-x describe-variable上执行了compilation-error-regexp-alist,则会向我显示我认为它应具有的价值。但是..编译缓冲区中的错误没有突出显示,M-x next-error不起作用。

alt text http://i40.tinypic.com/drb3g4.jpg

如果我通过compilation-error-regexp-alist将错误正则表达式值添加到setq-default,请执行以下操作:

(setq-default compilation-error-regexp-alist
  '(
     ... jslint regexp here ...
     ... many other regexp's here...
   ))

...然后它有效。编译缓冲区中的错误被正确突出显示,M-x next-error按预期运行。

alt text http://i40.tinypic.com/10nclxv.jpg

1 个答案:

答案 0 :(得分:2)

我不相信compile命令会继承您为compilation-error-regexp-alist设置的本地值。解决方案是为*compilation*缓冲区本身定制一个钩子,参见compilation-mode-hook和compilation-start-hook。