从函数启动命名的ESS R进程

时间:2013-02-01 09:31:23

标签: r emacs ess

我正在尝试创建一个小型交互式elisp函数,以便快速显示适合回答关于R的Stackoverflow问题的布局。想法是打开一个临时R文件,并在另一个文件中启动与之关联的R会话帧。

到目前为止,我写了这个非常简单的事情:

(defun jb-so ()
  "Start R for StackOverflow layout"
  (interactive)
  (find-file "/tmp/so.R")
  (new-frame)
  (R))

除了两个细节外几乎没问题:

  • 有提示确认我要在/tmp中启动R会话。有没有办法自动接受它?
  • 默认情况下,会话称为*R*,但我想为其指定一个特定名称,例如*RSo*,以避免与其他正在运行或将来的会话冲突。有没有办法直接从函数中完成?

提前致谢!

1 个答案:

答案 0 :(得分:5)

在启动时有很多选择。所以emacs动态范围真的有帮助:

(defun jb-so ()
  "Start R for StackOverflow layout"
  (interactive)
  (find-file "/tmp/so.R")
  (let ((ess-ask-for-ess-directory nil)
        (inferior-ess-same-window nil)
        (ess-gen-proc-buffer-name-function (lambda (nm) "*RSO*")))
    (R)
    (pop-to-buffer "so.R")))

请注意,这仅适用于最近版本的ESS,它提供了为进程缓冲区设置自定义名称的工具(请参阅ess-gen-proc-buffer-name-function)。您还可以使用 M-x rename-buffer重命名劣质缓冲区。