Ссылка на ПРОЦЕСС в Emacs (ESS R)

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

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

(ess-send-string PROCESS STRING)

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

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

Пример:

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

person PascalVKooten    schedule 07.07.2013    source источник
comment
Может быть, я не понимаю ваш вопрос, но вы пробовали один из C-c C-n (Eval-line и step), C-c C-j (Eval line), C-c C-r (eval region) или C-c C-b (eval buffer) в ESS-буфере   -  person dickoa    schedule 08.07.2013
comment
Вы оцениваете текст из буфера, я пытаюсь оценить строку, как указано в команде (без текста в буфере R, но в файле .el)   -  person PascalVKooten    schedule 08.07.2013


Ответы (2)


Вы можете использовать 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\"))"))
person dickoa    schedule 07.07.2013
comment
Да, (get-process ...) это вещь! Но что это за строка R, имя буфера? - person PascalVKooten; 08.07.2013
comment
@Dualinity Эта часть довольно сбивает с толку в файле справки emacs, который они написали . В этих функциях аргумент процесса может быть процессом или именем процесса, или буфером или именем буфера (что означает процесс через get-buffer-process) .. Так что пришлось много проб и ошибок, прежде чем получить его - person dickoa; 08.07.2013
comment
Кроме того, я считаю, что первая часть не очень актуальна ... Вторая - это ответ, я отмечу это так. Все еще любопытно, почему "R": Кажется, однажды я пробовал (get-process "*R*"), думая, что ему нужно имя-буфера. Что произойдет, когда вы создадите второй процесс, как получить к нему доступ? - person PascalVKooten; 08.07.2013
comment
Спасибо за ответ. Я все еще в замешательстве: (get-proces "R") работает, хотя имя-буфера равно "*R*" - person PascalVKooten; 08.07.2013
comment
@Dualinity Я удалил первую часть и, как и вы, думаю, это просто имя буфера, но без звезд ... gnu.org/software/emacs/manual/html_node/elisp/ - person dickoa; 08.07.2013
comment
Имя процесса отделено от имени его буфера, и его можно увидеть через M-x list-processes. - person legoscia; 08.07.2013
comment
@Dualinity Здесь есть что улучшить, потому что это все еще не принято? - person dickoa; 08.07.2013
comment
@legoscia Спасибо за эту команду, очень полезная и теперь понятно - person dickoa; 08.07.2013

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

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

person VitoshKa    schedule 08.07.2013