2013-07-07 2 views
1

Я пытаюсь запустить команду Emacs с помощью ESS, чтобы отправить код в буфер R (хотя я наткнулся на эту проблему и на python).Ссылка на PROCESS в Emacs (ESS R)

Я не могу понять, хотя, как использовать:

(ess-send-string PROCESS STRING)

Я не понимаю, как я могу, при вызове этой функции из буфера сценария, послать строку в соответствующем * R * буфер.

Я пробовал использовать comint и process-send-string, но, я думаю, я не понимаю, как отправить процесс. Имя буфера не сделало этого, что будет?

Пример:

(defun create-rtags() 
    (interactive) 
    (ess-send-string PROCESS "rtags(ofile=paste0(getwd(), \"TAGS\"))") 
+0

Возможно, у меня нет вашего вопроса, но вы попробовали один из 'Cc Cn' (Eval-line и step),' Cc Cj' (Eval line), 'Cc Cr' (область eval) или' Cc Cb' (eval buffer) в ESS-буфере – dickoa

+0

Вы оцениваете текст из буфера, я пытаюсь оценить строку, как указано в команде (без текста, находящегося в буфере R, но в файле '.el') – PascalVKooten

ответ

3

Вы можете использовать get-process иметь правильный процесс или ess-get-process, если вы используете последний из ESS версии на GitHub.

(ess-send-string (get-process "R") "a <- 1:10;a") 

Результат в

[1] 1 2 3 4 5 6 7 8 9 10 

Так что для вашей функции, что-то, как это должно работать

(defun create-rtags() 
    (interactive) 
    (ess-send-string (get-process "R") "rtags(ofile = file.path(getwd(), \"TAGS\"))")) 
+0

Да, '(get-process ...)' это вещь! Что здесь представляет собой строка «R», имя буфера? – PascalVKooten

+0

@Dualinity Эта часть довольно запутанна в файле справки emacs, который они написали * .. В этих функциях аргумент процесса может быть процессом или именем процесса или именем буфера или буфера (который обозначает процесс через get -buffer-process) .. * Так что это было много проб и ошибок, прежде чем получить его – dickoa

+0

Кроме того, я считаю, что первая часть не очень актуальна ... Последний ответ, я буду отмечать его таким. Все еще любопытно, почему '' R "': Я считаю, что однажды попробовал '(get-process * * R *") ', считая, что ему нужно имя буфера. Что произойдет, когда вы создадите второй процесс, как получить доступ к этому? – PascalVKooten

1

Чтобы добавить @dickoa ответ. ESS обрабатывает несколько процессов, и все они перечислены в ess-proces-name-list. «R» - это имя первого открытого процесса R. В буферах ESS есть локальный vairable ess-local-process-name, который связывает буфер с процессом.

FWIW, C-c C-e C-t привязан к ess-build-tags-for-directory в ESS. Он достаточно умен, чтобы отправить команду rtags из буферов R и запрос regexp etag (на основе текущего imenu regexp) из других буферов.