emacs: Могу ли я установить compilation-error-regexp-alist в хуке режима fn? - PullRequest
2 голосов
/ 17 марта 2010

Я пытаюсь установить 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

Если я добавлю значение регулярного выражения ошибки в 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

1 Ответ

2 голосов
/ 18 марта 2010

Я не верю, что команда compile наследует локальное значение, установленное для compilation-error-regexp-alist. Решением было бы настроить хук для самого буфера *compilation*, см. ловушка режима компиляции и ловушка запуска компиляции.

...