1

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

我不知道如何使用:

(ess-send-string PROCESS STRING)

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

我曾尝试使用comintand process-send-string,但我想我不明白如何发送进程。一个buffer name没做,会怎样?

例子:

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

2 回答 2

4

You can use get-process to have the right process or ess-get-process if you use the latest of ESS version on github.

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

Result in

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

So for your function, something like this should work

(defun create-rtags () 
  (interactive)
  (ess-send-string (get-process "R") "rtags(ofile = file.path(getwd(), \"TAGS\"))"))
于 2013-07-07T22:08:19.373 回答
1

添加到@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 中。从 R 缓冲区发送 rtags 命令和从其他缓冲区发送正则表达式 etag 请求(基于当前 imenu 正则表达式)是足够聪明的。

于 2013-07-08T09:09:35.887 回答