ESS tracer directement dans un tampon Emacs?

33

Q: Comment puis-je obtenir que ESS (R) trace directement dans un tampon Emacs?

Lors de l'interaction avec R via ESS, R crée par défaut une fenêtre graphique séparée en dehors d'Emacs pour dessiner ses graphiques. (On peut, bien sûr, choisir d'autres périphériques graphiques, c'est ainsi que nous traçons au format PDF, etc.) Deux problèmes: premièrement, la nouvelle fenêtre vole le focus sur Emacs, et deuxièmement, il serait bien de tout garder bien rangé au sein de l'écosystème Emacs.

Donc: existe-t-il un moyen de tracer "directement" (ou même indirectement) dans un tampon Emacs et, plus important encore, sans aucune intervention manuelle de la part de l'utilisateur?

Il y avait eu une discussion préalable dans cet ancien fil de débordement de pile , mais les solutions partielles proposées ne sont pas idéales. Ils impliquent principalement de changer le périphérique de traçage dans R (par exemple, en PNG), de traquer dans un fichier temporaire, puis de le visiter manuellement dans un tampon Emacs. Cela me semble très maladroit, surtout si le but est d’utiliser la fenêtre de tracé / le tampon de manière interactive et d’en dessiner de nombreux dans une session (ou d’y ajouter des calques à la volée).

Je spécule ici, mais il me semble que, étant donné que R et Emacs prennent en charge le format SVG, ce format pourrait être utile. Cependant, il m'est impossible de savoir si / comment on pourrait utiliser le processus R pour communiquer à la volée. Existe-t-il un moyen de faire en sorte que R crache du code SVG directement dans un tampon Emacs ou doit-il passer par l’intermédiaire d’un fichier temporaire? Comment convaincre Emacs de visiter automatiquement un nouveau fichier temporaire lorsque R le crée, ou de mettre à jour un tel tampon de tracé lorsque le fichier temporaire est mis à jour / remplacé par un nouveau tracé?

Dan
la source
3
Emacs n'a pas besoin d'utiliser un fichier et peut utiliser une chaîne pour insérer une image dans un tampon, voir la docstring de create-image. Cependant, je ne peux pas vous aider à faire en sorte que R et Emac communiquent pour atteindre cet objectif.
wasamasa
1
Cela a été discuté sur la liste de diffusion ESS: voir stat.ethz.ch/pipermail/ess-help/2013-November/009559.html
Ista

Réponses:

5

Pas complètement une réponse à la question, mais quand on utilise R dans le 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

Faire C-c C-ccela dans org-mode créera un *my-R*tampon avec un tampon ESS en interaction, créera le tracé dans le example.svgfichier, puis vous pourrez cliquer (ou appuyer sur Entrée) sur le lien créé vers le fichier, qui l'ouvrira.

Le mode organisationnel est capable d’inscrire une image en ligne, mais il le fait lors du basculement de cette fonctionnalité (avec M-x org-toggle-inline-images) ou lors de l’ouverture du fichier, mais pas lorsqu’il exécute un code.

Donc, ce n'est pas une solution complète.

Rémi
la source
3
Vous pouvez obtenir l’affichage automatique de l’image par réglage (add-hook 'org-babel-after-execute-hook 'org-display-inline-images), mais c’est (je pense) toujours pas vraiment ce que l’OP souhaitait.
Ista
0

Je viens de poster une réponse à l'ancien message auquel vous faites référence dans votre question. Comme je l'ai écrit ici, cela pourrait ne pas fonctionner pour vous car ce serait un changement radical de votre flux de travail informatique global.

Mais exwm , en permettant à toute fenêtre non-emacs d’être un tampon emacs, permet d’avoir des tracés R dans des tampons emacs contrôlés par les paramètres emacs habituels et les associations de clés.

Voici un exemple de ce à quoi cela ressemble:

entrez la description de l'image ici

prosoitos
la source