Всплывающие окна в R&Emacs

Я использую ESS, чтобы оставаться в Emacs при работе с R. Всякий раз, когда я создаю график, появляется новое всплывающее окно с графиком. Это новое окно кажется частью процесса R, вызываемого внутри Emacs. Таким образом, новое окно не является частью списка буферов и, кажется, находится вне среды Emacs.

Может ли новое окно, созданное R, содержащее, например. графики, вызываемые plot() или соответствующими функциями в ggplot2/lattice, должны оставаться внутри среды Emacs? Так что сюжет доступен как новый буфер.

Спасибо!


person mropa    schedule 19.02.2011    source источник


Ответы (5)


Нет, извините, нельзя. Буферы Emacs являются текстовыми. Графические окна являются графическими устройствами.

Но вы можете сделать это самостоятельно. Перед построением графика или даже в начале сеанса произнесите

pdf(file="/tmp/myplotfile.pdf")

и теперь сюжеты пойдут туда. Затем вы можете открыть файл pdf в Emacs, а последние версии включают предварительный просмотр pdf внутри Emacs (по крайней мере, на моем Linux boxen, не уверен, нужны ли мне для этого дополнительные режимы). Это будет близко к вашим требованиям.

person Dirk Eddelbuettel    schedule 19.02.2011
comment
хорошо, это была бы идея. но тогда мне приходится вызывать «dev.off()» каждый раз, когда я вызываю функцию построения графика, и запускать новую функцию «pdf()», прежде чем я создам новый график или обновлю старый. - person mropa; 19.02.2011
comment
Вы можете добавить несколько графиков в один и тот же файл, см. help(pdf) и опцию onefile. Но вам может понадобиться вызвать dev.off() для синхронизации/сброса файлового буфера. Но это может быть цена, которую вы должны заплатить за несколько необычный шаблон использования. - person Dirk Eddelbuettel; 20.02.2011
comment
Я использую режим DocView в Emacs при загрузке pdf. Автоматическое обновление не работает так гладко, поэтому, когда я дважды вызываю 'plot()', буфер с pdf отмечает ошибку. только после вызова 'dev.off' буфер обновляется, и я вижу два графика. хм .... хорошо, тогда я думаю, я останусь с обычными настройками. но спасибо Дирк за информацию. - person mropa; 20.02.2011
comment
Вы также можете использовать png(...), чтобы Emacs не использовал Ghostscript для преобразования PDF в PNG. К сожалению, режим автовозврата, кажется, вообще не работает должным образом, хотя обычный M-x revert-buffer работает. - person Nicholas Riley; 20.02.2011

О да, может...

В ESS сделайте так:

png(file="tmp.png")
plot(1:10)
dev.off()
# [[tmp.png]]

Ничего. Теперь сделайте ESC X iiimage-mode (да, там два i).

Это переводит ваш буфер в второстепенный режим iimage, он должен обнаружить [[tmp.png]] и загрузить туда ваше изображение. Это должно легко автоматизироваться. Это первый раз, когда я обнаружил это для себя, поэтому, вероятно, есть лучшие способы сделать это.

В списке ESS явно была какая-то болтовня по этому поводу:

https://stat.ethz.ch/pipermail/ess-help/2009-August/005474.html

но я удивлен, что его еще нет в ядре ESS...

person Spacedman    schedule 19.02.2011
comment
Что ж, это более или менее совпадает с моим предыдущим ответом, а не с тем, что просил ОП. Ему нужен буфер emacs в качестве родного графического устройства R. Какой из них придется кодировать. - person Dirk Eddelbuettel; 20.02.2011
comment
Хм, ах да, в качестве нового буфера... К сожалению, я не думаю, что на данный момент вы можете написать графический драйвер на чистом R, что значительно облегчило бы эту задачу... - person Spacedman; 20.02.2011
comment
omegahat.org/RGraphicsDevice/overview.html кажется, сегодня я ошибаюсь. .. - person Spacedman; 20.02.2011

Это вряд ли будет тем решением, которое вы ищете, поскольку оно предполагает превращение Emacs в оконный менеджер (работает для Linux и MacOS): пакет EXWM (Emacs X Window Manager) — полнофункциональный мозаичный оконный менеджер, который превращает все окна X в буферы Emacs.

Вот пример того, как это будет выглядеть (обратите внимание на окно R Graphics справа, которое теперь является буфером Emacs):

введите здесь описание изображения

Это позволяет вам использовать сочетания клавиш Emacs, конфигурацию и т. д. для всех X-окна.

person prosoitos    schedule 08.07.2018
comment
Это здорово. Не могли бы вы предоставить более подробную информацию о том, как вы настроили его для правильной работы после установки exwm? - person Stefan Avey; 03.11.2020

попробуй это:

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

Это не совсем отвечает на вопрос ОП, потому что это выходит за рамки ESS, но все же может иметь отношение к некоторым, потому что все еще связано с использованием R для создания графики, которую можно просматривать внутри Emacs.

Это можно сделать с помощью блокнота Emacs iPython (ein). Сначала вам нужно настроить Jupyter, но после этого он довольно прост и может работать с разными ядрами (R, Python, Julia , так далее.). Ниже скриншот

Скриншот графика R в ein

person Stefan Avey    schedule 23.08.2018