График ESS напрямую в буфер Emacs?

33

Q: как я могу получить ESS (R) для вывода непосредственно в буфер Emacs?

При взаимодействии с R через ESS R по умолчанию порождает отдельное графическое окно вне Emacs, чтобы рисовать его графики. (Можно, конечно, выбрать другие графические устройства, как мы рисуем в PDF и т. Д.) Две проблемы: во-первых, новое окно украдет фокус из Emacs, и, во-вторых, было бы неплохо, чтобы все было красиво и аккуратно. в экосистеме Emacs.

Итак: есть ли способ построить «прямо» (или даже косвенно) в буфере Emacs и, что более важно, сделать это без большого ручного вмешательства пользователя?

В этом старом потоке переполнения стека было некоторое предварительное обсуждение , но предложенные частичные решения не идеальны В основном они включают изменение устройства построения графиков в R (скажем, PNG), создание графиков во временный файл и последующее ручное посещение этого файла в буфере Emacs. Все это кажется мне очень неуклюжим, особенно если цель состоит в том, чтобы использовать окно / буфер графика в интерактивном режиме и рисовать много графиков в сеансе (или добавлять слои к ним на лету).

Я размышляю здесь, но меня поражает, что, поскольку R и Emacs поддерживают SVG, это может быть полезным форматом для использования. Тем не менее, мне не ясно, если / как можно подключиться к процессу R, чтобы общаться на лету. Есть ли способ поместить R-код SVG прямо в буфер Emacs, или ему нужно пройти через промежуточный файл? Как можно убедить Emacs автоматически открыть новый временный файл, когда его создает R, или обновить такой буфер графика, когда временный файл обновляется / перезаписывается новым графиком?

Дэн
источник
3
Emacs не должен использовать файл и может вместо этого использовать строку для вставки изображения в буфер, см. Строку документации create-image. Я не могу помочь вам с тем, чтобы R и Emacs общались друг с другом для достижения этой цели.
васамаса
1
Это обсуждалось в списке рассылки ESS: см. Stat.ethz.ch/pipermail/ess-help/2013-November/009559.html
Иста

Ответы:

5

Не полностью ответ на вопрос, но когда один использует R в babel режима org:

* My example
#+name: simple-org-example
#+begin_src R :session *my-R* :dir "." :results output graphics :file example.svg :width 18 :height 9
  plot(cyl~mpg,data=mtcars)
#+end_src

Выполнение C-c C-cэтого в режиме org создаст *my-R*буфер с взаимодействующим буфером ESS, создаст график в example.svgфайле, а затем вы можете нажать (или нажать Enter) на созданной ссылке на файл, и он откроется.

Org-mode может встроить изображение, но делает это при переключении этой функции (с помощью M-x org-toggle-inline-images) или при открытии файла, но не при запуске кода в нем.

Так что это не полное решение.

Рэй
источник
3
Вы можете настроить автоматическое отображение изображения (add-hook 'org-babel-after-execute-hook 'org-display-inline-images), но это (я думаю) все еще не совсем то, что хотел ОП.
Иста
0

Я только что опубликовал ответ на старый пост вы ссылаетесь в вашем вопросе. Как я уже писал, это может не сработать для вас, так как это приведет к значительным изменениям в общем рабочем процессе вашего компьютера.

Но exwm , позволяя любому окну , не являющемуся emacs, быть буфером emacs, позволяет иметь R графиков в буферах emacs, которые управляются обычными настройками emacs и привязками клавиш.

Вот пример того, как это выглядит:

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

prosoitos
источник