R&;中的弹出窗口;Emacs

R&;中的弹出窗口;Emacs,r,emacs,ess,R,Emacs,Ess,我使用ESS是为了在使用R时留在Emacs中。每当我创建一个绘图时,一个新的弹出窗口将与图形一起出现。这个新窗口似乎是称为Emacs内部的R进程的一部分。因此,新窗口不是缓冲区列表的一部分,似乎位于Emacs环境之外 由R创建的新窗口(包含plot()调用的图形或ggplot2/lattice中的相应函数)是否可以强制留在Emacs环境中?因此,绘图可用作新的缓冲区 谢谢 不,对不起,不能。Emacs缓冲区是文本。图形窗口是图形设备 但是你可以自己做。在绘图之前,甚至在会话开始时 pdf(fil

我使用ESS是为了在使用R时留在Emacs中。每当我创建一个绘图时,一个新的弹出窗口将与图形一起出现。这个新窗口似乎是称为Emacs内部的R进程的一部分。因此,新窗口不是缓冲区列表的一部分,似乎位于Emacs环境之外

由R创建的新窗口(包含plot()调用的图形或ggplot2/lattice中的相应函数)是否可以强制留在Emacs环境中?因此,绘图可用作新的缓冲区


谢谢

不,对不起,不能。Emacs缓冲区是文本。图形窗口是图形设备

但是你可以自己做。在绘图之前,甚至在会话开始时

pdf(file="/tmp/myplotfile.pdf")
现在,阴谋将被转移到那里。然后,您可以在Emacs中打开pdf文件,最新版本在Emacs中包含一个pdf预览(至少在我的Linux boxen上,我不确定是否需要额外的模式)。这将接近您的要求。

哦,是的,它可以

在ESS中,执行以下操作:

png(file="tmp.png")
plot(1:10)
dev.off()
# [[tmp.png]]
没什么。现在执行ESC X iimage模式(是的,有两个i)

这会将您的缓冲区置于iimage次要模式,它会发现[[tmp.png]]并将您的图像加载到其中。这应该很容易实现自动化。这是我第一次为自己发现这一点,所以可能有更好的方法

ESS名单上显然有人在谈论这件事:

但我很惊讶它还不在ESS核心中…

试试这个:

X11()   #  starts a X11 graphics device
plot(c(1:10),c(1:10))
savePlot(filename = "try_save_X11.png",type = c("png"))

这不太可能是您正在寻找的解决方案,因为它涉及将Emacs转换为窗口管理器(适用于Linux和MacOS):该软件包(Emacs X window manager)是一个功能齐全的平铺窗口管理器,可将所有X窗口转换为Emacs缓冲区

下面是一个这样的示例(请注意右侧的R图形窗口,它现在是一个Emacs缓冲区):


这允许您对所有X窗口使用Emacs密钥绑定、配置等。

这并不能完全回答OP的问题,因为这超出了ESS的范围,但它仍然可能与某些相关,因为它仍然与使用R生成可在Emacs内部查看的图形有关

您可以使用(ein)来执行此操作。您必须首先进行设置,但之后就非常简单,可以使用不同的内核(R、Python、Julia等)。下面是一个截图


好的,这是个好主意。但是,在创建新绘图或更新旧绘图之前,每次调用绘图函数时,我都必须调用“dev.off()”,并启动新的“pdf()”函数。您可以将多个绘图添加到同一文件中,请参见
help(pdf)
onefile
选项。但是您可能需要调用
dev.off()
来同步/刷新文件缓冲区。但这可能是你为这种有点不寻常的使用模式付出的代价。自动更新的工作并不那么顺利,所以当我两次调用“plot()”时,带有pdf的缓冲区会记录一个错误。只有在调用“dev.off”之后,缓冲区才会更新,我看到了两个图。嗯……好吧,那我想我还是照常做吧。但是感谢dirk提供的信息。您也可以使用png(…),这样Emacs就不必使用Ghostscript将PDF转换为png。不幸的是,虽然常规的
M-x恢复缓冲区可以正常工作,但自动恢复模式似乎根本无法正常工作。这与我先前的回答大致相同,而不是OP要求的。他想要一个emacs缓冲区作为原生的R图形设备。哪一个需要编码。嗯,啊,是的,作为一个新的缓冲区。。。遗憾的是,我认为目前还不能用纯R编写一个图形驱动程序,这样做会容易得多。。。我今天似乎充满了错误…这太棒了。您能否提供有关如何在安装exwm后将其设置为正常工作的更多详细信息?