2015-08-27 4 views
1

Мой рабочий процесс:Запуск Rdevtool :: test_that на буфер сохранения в ESS

  • поредактируете на .R или проверить _ * R файл
  • Сохранить буфер..
  • Переключиться в окно с * R * процессом
  • hit C-p, RET. для переоценки devtools::test()

Для меня это кажется слишком трудным. Почему я не могу заставить R запускать devtools::test() автоматически при сохранении буфера? Пожалуйста, помогите, мои пальцы едва ли могут получить напряжение от семи дополнительных нажатий клавиш!

+0

Я открыл новую проблему для интеграции devtools [здесь] (https://github.com/emacs-ess/ESS/issues/229). – VitoshKa

ответ

2

Это работает для подобной установки (переключение на shell буфер):

(defun devtools-test() 
    (interactive) 
    (when (string-match (rx-to-string `(: ".R" eos) t) (buffer-name)) 
    (switch-to-buffer "*R*") 
    (end-of-buffer) 
    (insert "devtools::test()") 
    (comint-send-input))) 

(add-hook 'after-save-hook 'devtools-test) 

делает эту работу за вас?

+0

Не совсем. Ваша функция переключает мой текущий буфер на процесс R; Я бы хотел, чтобы он остался там, где он есть, в другом окне в том же кадре, где я просматриваю вывод. Ваша функция является улучшением, но поскольку я вынужден вернуться к файловому буферу после того, как тесты были запущены, я все еще чувствую, что сталкиваюсь с слишком большими трудностями. Я думаю, что если бы была функция insert-in-buffer, которая могла бы получать текст в * R * без переключения, но я не могу ничего найти. – Dmitri

+0

Легче просто переключиться обратно на старый буфер: '(когда ... (пусть * ((старый (текущий буфер))) (переключатель-в-буфер" * R ") ... (переключатель -to-buffer old)))) ' Извините, я не могу отформатировать его правильно в этом комментарии. –

+0

Да! Это действительно трюк. Вот суть конечного продукта: https://gist.github.com/Momus/7e7738971923d0c91555 – Dmitri

1

Существует функция ess-eval-linewise, которую вы можете использовать.

Что-то вроде этого (не проверено):

(defun devtools-test() 
    (interactive) 
    (when (and (equal ess-dialect "R") 
      (string-match "^test.*\\.[Rr]$" (buffer-name))) 
    (ess-eval-linewise "devtools::test()"))) 

(add-hook 'after-save-hook 'devtools-test) 

Я не рекомендовал бы это, хотя, как и для некоторых пакетов тестов занять некоторое время, чтобы бежать. Вы не хотите, чтобы они работали при каждом сохранении.

Вскоре появится специальная функция devtools. Следуйте этому issue.