¿ESS traza directamente a un búfer Emacs?

33

P: ¿cómo puedo obtener ESS (R) para trazar directamente a un búfer de Emacs?

Al interactuar con R a través de ESS, R por defecto genera una ventana gráfica separada fuera de Emacs para dibujar sus trazados. (Por supuesto, uno puede elegir otros dispositivos gráficos, que es cómo trazamos en PDF, etc.) Dos problemas: primero, la nueva ventana le roba el foco a Emacs, y segundo, seguro que sería bueno mantener todo bien y ordenado dentro del ecosistema Emacs.

Entonces: ¿hay alguna forma de trazar "directamente" (o incluso indirectamente) a un búfer de Emacs y, lo que es más importante, hacerlo sin mucha intervención manual por parte del usuario?

Hubo alguna discusión previa en este viejo hilo de desbordamiento de pila , pero las soluciones parciales propuestas no son ideales. Principalmente implican cambiar el dispositivo de trazado en R (por ejemplo, a PNG), trazar en un archivo temporal y luego visitar manualmente ese archivo en un búfer de Emacs. Todo eso me parece muy torpe, especialmente si el objetivo es usar la ventana de trama / buffer de forma interactiva y dibujar muchas parcelas en una sesión (o agregar capas sobre la marcha).

Estoy especulando aquí, pero me parece que, dado que tanto R como Emacs admiten SVG, ese podría ser un formato útil para usar. Sin embargo, no me queda claro si / cómo se podría conectar al proceso R para comunicarse sobre la marcha. ¿Hay alguna manera de hacer que R escupe el código SVG directamente en un búfer de Emacs, o necesitaría pasar por el intermediario de un archivo temporal? ¿Cómo podría uno convencer a Emacs para que visite un nuevo archivo temporal de forma automática cuando R lo crea, o para actualizar dicho búfer de trama cuando el archivo temporal se actualiza / sobrescribe con una nueva trama?

Dan
fuente
3
Emacs no tiene que usar un archivo y en su lugar puede usar una cadena para insertar una imagen en un búfer, vea la cadena de documentos de create-image. Sin embargo, no puedo ayudarte a hacer que R y Emacs se comuniquen entre sí para lograrlo.
wasamasa
1
Esto se ha discutido en la lista de correo de ESS: ver stat.ethz.ch/pipermail/ess-help/2013-November/009559.html
Ista

Respuestas:

5

No es una respuesta completa a la pregunta, pero cuando uno usa R en el babel de org-mode:

* 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

Hacer C-c C-cesto en modo org creará un *my-R*búfer con un búfer ESS interactivo, creará el diagrama en el example.svgarchivo y luego puede hacer clic (o presionar enter) en el enlace creado al archivo, que lo abrirá.

Org-mode es capaz de alinear la imagen, pero lo hace al alternar esta funcionalidad (con M-x org-toggle-inline-images) o al abrir el archivo, pero no al ejecutar un código en él.

Entonces esta no es una solución completa.

Rémi
fuente
3
Puede hacer que la imagen se muestre automáticamente configurando (add-hook 'org-babel-after-execute-hook 'org-display-inline-images), pero esto (creo) todavía no es realmente lo que quería el OP.
Ista
0

Acabo de publicar una respuesta a la publicación anterior a la que te refieres en tu pregunta. Como escribí allí, esto puede no funcionar para usted, ya que sería un cambio bastante dramático en el flujo de trabajo general de su computadora.

Pero exwm , al permitir que cualquier ventana que no sea emacs sea un búfer de emacs, permite tener gráficos R en los búferes de emacs que están controlados por las configuraciones y combinaciones de teclas habituales de emacs.

Aquí hay un ejemplo de cómo se ve esto:

ingrese la descripción de la imagen aquí

prosoitos
fuente