我正在尝试创建一个小型交互式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*
,以避免与其他正在运行或将来的会话冲突。有没有办法直接从函数中完成?提前致谢!
答案 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
重命名劣质缓冲区。