引用Emacs中的PROCESS(ESS R)

时间:2013-07-07 20:38:09

标签: r emacs ess

我正在尝试使用ESS从Emacs运行命令,将代码发送到R缓冲区(尽管我在python中偶然发现了这个问题)。

我无法弄清楚如何使用:

(ess-send-string PROCESS STRING)

我不明白如何从脚本缓冲区调用此函数,将字符串发送到关联的* R *缓冲区。

我尝试过使用comintprocess-send-string,但我想我不明白如何发送流程。缓冲区名称没有这样做,会是什么?

示例:

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

2 个答案:

答案 0 :(得分:3)

如果您在github上使用最新的ESS版本,则可以使用get-process来获得正确的进程或ess-get-process

(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\"))"))

答案 1 :(得分:1)

添加到@dickoa的答案。 ESS处理多个进程,它们都列在ess-proces-name-list中。 “R”是第一个开放R过程的名称。在ESS缓冲区中,存在本地可变ess-local-process-name,它将缓冲区与进程链接起来。

FWIW, C-c C-e C-t 在ESS中与ess-build-tags-for-directory绑定。它非常聪明,可以从R缓冲区发送rtags命令,并从其他缓冲区发送regexp etag请求(基于当前的imenu regexp)。