среда, 27 мая 2015 г.

Автозапуск Guard под Emacs

Настраивал тут Guard по статье на Хабре

Вспомнил, что когда-то настраивал нотификацию, в которой вроде бы ничего сложного нет (у Emacs она работает, кажется, из коробки).

Недостаток такой нотификации в том, что если появилась ошибка, в Emacs только перекрашивается mode-line в красный цвет (если всё Ок, то зелёный), а на ошибку надо смотреть в терминал, где запущен Guard. Да и предварительно необходимо его там ещё запустить.

А что если запускать guard прямо в Emacs при начале работы с проектом?

Для запуска Guard из Emacs нашёл готовую библиотеку  ruby-guard. и положил её в ~/emacs/ruby-guard/

Обычно при начале работы с проектом я сначала открываю корневой каталог проекта в dired. Значит, цепляемся к Dired! Добавим это в ~/.emacs:


(add-hook 'dired-mode-hook ;; При открытии каталога в Dired
  (lambda ()
    ;; Если найден Guardfile, запускаем Guard:
    (if (file-exists-p (concat default-directory "Guardfile"))
      (progn
        (load-library "~/emacs/ruby-guard/ruby-guard.elc")
        (ruby-guard)))
      ;; подкрашивать строку в dired:
      (hl-line-mode)))

Теперь при открытии каталога, содержащего Guard-файл, у нас будет появляться окно с выполняющимся Guard и, как только у нас будут появляться ошибки проверки, мы сможем переходить на точку ошибки в файле, если добавим в ~/.emacs строку:

(add-hook 'shell-mode-hook 'compilation-shell-minor-mode)

Теперь, когда в guard-буффере появляется ошибка, мы можем перейти в нужный файл на строку с ошибкой просто кликом мышки на ошибке или клавишей Enter.