ESS:ess-request-a-process默认为“S”

时间:2010-12-08 07:18:49

标签: r emacs customization ess

我经常发现自己在ESS缓冲区中运行大量R进程。有一个方便的Lisp函数ess-request-a-process,它要求R进程,并把它带到前面。唯一的缺点是它以某种方式默认为 S ,因此每次我要进行切换时,我都必须输入 R ,这是令人作呕的。

我尝试自定义ess-language变量,但即使我将值设置为“R”,即当前会话为4,或者即使我为将来的会话保存设置,只要我输入{{1} },自动 S 再次出现。这非常烦人,我真的不希望最终得到C-c C-k然后C-x C-b来获得所需的R会话! =)

我甚至尝试在C-s中设置(setq-default ess-language "R"),但没有运气......

BTW,我在Linux Mint上运行Emacs v.23.1.1,在Arch Linux上运行Emacs v.23.2,ESS v.5.12。如果这是相关的,我使用.emacs参数从终端运行Emacs。这是我的-nw

.emacs

那么......如何一劳永逸地设置 R ? (我不使用S / S + / SAS)

1 个答案:

答案 0 :(得分:3)

到目前为止我还不知道这个功能。 C-c C-k 与ESS缓冲区中的ess-force-buffer-current绑定。

[编辑: C-c C-k 确实绑定到iESS中的ess-request-a-process,在ESS中它是ess-force-buffer-current]

在任何情况下,您必须自定义的变量为ess-dialect

(setq-default ess-dialect "R")

它是缓冲区局部变量,而ess-mode-hook中的其他一些东西可能会将它设置为不同的值。

使用 C-h v ess-dialect

在每个缓冲区中检查

此外,如果您已经运行了多个进程,那么ess-switch-process C-c C-s )可能是正确的方法。 [编辑:它不会跳转到进程,只是重置当前ESS缓冲区的关联进程]

[编辑:在深入研究该问题后,发现ess-request-a-process使用ess-language变量ess-dialect似乎更合适。问题是,每次ess-inferior过程开始时,它都会重置ess-language的全局值。这就是为什么在你的情况下设置它不起作用。

这是一个快速修复:

(defun ess-set-language ()
  (setq-default ess-language "R")
  (setq ess-language "R")
  )

(add-hook 'ess-post-run-hook 'ess-set-language t)