【问题标题】:Referencing a PROCESS in Emacs (ESS R)在 Emacs (ESS R) 中引用进程
【发布时间】:2013-07-07 20:38:09
【问题描述】:

我正在尝试使用 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\"))")

【问题讨论】:

  • 可能我没有得到您的问题,但您是否尝试过C-c C-n(评估线和步骤)、C-c C-j(评估线)、C-c C-r(评估区域)或C-c C-b(评估缓冲区)在 ESS 缓冲区中
  • 您正在评估缓冲区中的文本,我正在尝试评估命令中提到的字符串(文本不在 R 缓冲区中,但在 .el 文件中)

标签: r emacs ess


【解决方案1】:

您可以使用get-process 来获得正确的进程,如果您使用github 上最新的ESS 版本,则可以使用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\"))"))

【讨论】:

  • 是的,(get-process ...) 就是这样!这里的字符串“R”是什么,缓冲区名称?
  • @Dualinity 这部分在他们写的 emacs 帮助文件中相当混乱 ..在这些函数中,process 参数可以是进程或进程的名称,也可以是缓冲区或缓冲区名称(代表通过 get-buffer-process 的进程).. 所以在得到它之前需要反复试验
  • 另外,我发现第一部分并不真正相关......后者是答案,我会这样标记。仍然好奇为什么"R":我相信我曾经尝试过(get-process "*R*"),认为它需要缓冲区名称。当您创建第二个进程时会发生什么,如何访问该进程?
  • 感谢您的回答。我仍然感到困惑:(get-proces "R") 有效,即使缓冲区名称等于 "*R*"
  • 进程名与其缓冲区名是分开的,可以通过M-x list-processes看到。
【解决方案2】:

添加到@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)是足够聪明的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-02
    • 2013-12-07
    • 2019-05-15
    • 1970-01-01
    • 2012-09-30
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    相关资源
    最近更新 更多