Позоваване на ПРОЦЕС в 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-линия и стъпка), C-c C-j (Eval линия), C-c C-r (eval регион) или C-c C-b (eval буфер) в 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
@Duality има нещо за подобряване тук, защото все още не е прието? - 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 C-e C-t е свързан към ess-build-tags-for-directory в ESS. Той е достатъчно умен, за да изпрати команда rtags от R буфери и заявка за regexp etag (базирана на текущото ime regexp) от други буфери.

person VitoshKa    schedule 08.07.2013