F: Wie kann ich ESS (R) dazu bringen, direkt in einen Emacs-Puffer zu zeichnen?
Bei der Interaktion mit R über ESS wird standardmäßig ein separates Grafikfenster außerhalb von Emacs geöffnet, um die Diagramme zu zeichnen. (Natürlich kann man auch andere Grafikgeräte auswählen. So zeichnen wir in PDF usw.) Zwei Probleme: Erstens stiehlt das neue Fenster Emacs den Fokus, und zweitens wäre es sicher schön, alles schön und aufgeräumt zu halten innerhalb des Emacs-Ökosystems.
Also: Gibt es eine Möglichkeit, "direkt" (oder sogar indirekt) in einen Emacs-Puffer zu zeichnen, und dies, was noch wichtiger ist, ohne viel manuelles Eingreifen des Benutzers?
In diesem alten Stapelüberlauf-Thread gab es einige vorherige Diskussionen , aber die vorgeschlagenen Teillösungen sind nicht ideal. Meistens müssen Sie das Zeichengerät in R (z. B. in PNG) ändern, in eine temporäre Datei plotten und diese Datei dann manuell in einem Emacs-Puffer aufrufen. Das alles erscheint mir sehr klobig, insbesondere wenn das Ziel darin besteht, das Plotfenster / den Puffer interaktiv zu verwenden und viele Plots in einer Sitzung zu zeichnen (oder ihnen im laufenden Betrieb Layer hinzuzufügen).
Ich spekuliere hier, aber es fällt mir auf, dass dies ein nützliches Format sein könnte, da sowohl R als auch Emacs SVG unterstützen. Mir ist jedoch nicht klar, ob / wie man sich in den R-Prozess einbinden könnte, um on the fly zu kommunizieren. Gibt es eine Möglichkeit, R SVG-Code direkt in einen Emacs-Puffer zu spucken, oder muss eine temporäre Datei dazwischengeschaltet werden? Wie kann man Emacs überzeugen, eine neue temporäre Datei automatisch zu besuchen, wenn R sie erstellt, oder einen solchen Plotpuffer zu aktualisieren, wenn die temporäre Datei durch einen neuen Plot aktualisiert / überschrieben wird?
create-image
. Ich kann Ihnen jedoch nicht helfen, R und Emacs dazu zu bringen, miteinander zu kommunizieren, um dies zu erreichen.Antworten:
Keine vollständige Antwort auf die Frage, aber wenn man R in org-mode's babel benutzt:
Wenn Sie
C-c C-c
dies im org-Modus tun, wird ein*my-R*
Puffer mit einem interagierenden ESS-Puffer erstellt, die Zeichnung in derexample.svg
Datei erstellt und Sie können auf den erstellten Link zur Datei klicken (oder die Eingabetaste drücken), um diese zu öffnen.Der Org-Modus kann Bilder einbinden, dies geschieht jedoch beim Umschalten dieser Funktion (mit
M-x org-toggle-inline-images
) oder beim Öffnen der Datei, jedoch nicht beim Ausführen eines Codes.Das ist also keine vollständige Lösung.
quelle
(add-hook 'org-babel-after-execute-hook 'org-display-inline-images)
, aber dies ist (glaube ich) immer noch nicht wirklich das, was das OP wollte.Ich habe gerade eine Antwort auf den alten Beitrag gepostet , auf den Sie in Ihrer Frage verweisen. Wie ich dort schrieb, funktioniert dies möglicherweise nicht für Sie, da es eine ziemlich dramatische Änderung in Ihrem gesamten Computer-Workflow bedeuten würde.
Aber exwm , indem jeder nicht-Emacs - Fenster ein Emacs - Puffer sein, erlaubt R Plots in Emacs - Puffer zu haben , die von den üblichen Emacs Einstellungen und keybindings gesteuert werden.
Hier ist ein Beispiel, wie das aussieht:
quelle