ESS spiskuje bezpośrednio do bufora Emacsa?

33

P: Jak mogę zmusić ESS (R) do drukowania bezpośrednio do bufora Emacsa?

Podczas interakcji z R przez ESS, R domyślnie odradza osobne okno graficzne poza Emacsem, aby rysować swoje wykresy. (Można oczywiście wybrać inne urządzenia graficzne, czyli w jaki sposób drukujemy do formatu PDF itp.) Dwa problemy: po pierwsze, nowe okno kradnie fokus od Emacsa, a po drugie, z pewnością dobrze byłoby zachować wszystko ładnie i schludnie w ekosystemie Emacsa.

A zatem: czy istnieje jakiś sposób na wydrukowanie „bezpośrednio” (lub nawet pośrednio) do bufora Emacsa i, co ważniejsze, zrobić to bez dużej ręcznej interwencji użytkownika?

W tym starym wątku przepełnienia stosu była wcześniejsza dyskusja , ale proponowane rozwiązania częściowe nie są idealne. Polegają one głównie na zmianie urządzenia drukującego w R (powiedzmy na PNG), drukowaniu do pliku tymczasowego, a następnie ręcznym odwiedzeniu tego pliku w buforze Emacsa. To wszystko wydaje mi się bardzo niezgrabne, szczególnie jeśli celem jest interaktywne korzystanie z okna / bufora wykresu i rysowanie wielu wykresów w sesji (lub dodawanie do nich warstw w locie).

Spekuluję tutaj, ale uderza mnie to, ponieważ zarówno R, jak i Emacs obsługują SVG, to może być przydatny format do użycia. Jednak nie jest dla mnie jasne, czy / jak można podłączyć się do procesu R, aby komunikować się w locie. Czy istnieje sposób, aby R wypluł kod SVG bezpośrednio do bufora Emacsa, czy też musiałby przejść przez pośredni plik tymczasowy? Jak można przekonać Emacsa do automatycznego odwiedzenia nowego pliku tymczasowego podczas tworzenia go przez R lub zaktualizowania takiego bufora wydruku, gdy plik tymczasowy zostanie zaktualizowany / nadpisany przez nowy wykres?

Dan
źródło
3
Emacs nie musi używać pliku i zamiast tego może użyć łańcucha do wstawienia obrazu do bufora, zobacz dokumentację create-image. Nie mogę ci jednak pomóc w tym, aby R i Emacs komunikowali się ze sobą, aby to osiągnąć.
wasamasa
1
Zostało to omówione na liście mailingowej ESS: patrz stat.ethz.ch/pipermail/ess-help/2013-November/009559.html
Ista

Odpowiedzi:

5

Nie jest to kompletna odpowiedź na pytanie, ale kiedy ktoś używa R w babelcie 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

Wykonanie C-c C-ctej czynności w trybie org spowoduje utworzenie *my-R*bufora z interaktywnym buforem ESS, utworzenie wykresu w example.svgpliku, a następnie możesz kliknąć (lub nacisnąć Enter) na utworzony link do pliku, który go otworzy.

Tryb organizacji może wstawiać obraz, ale robi to podczas przełączania tej funkcji (za pomocą M-x org-toggle-inline-images) lub podczas otwierania pliku, ale nie po uruchomieniu w nim kodu.

To nie jest kompletne rozwiązanie.

Rémi
źródło
3
Możesz ustawić wyświetlanie obrazu automatycznie, ustawiając (add-hook 'org-babel-after-execute-hook 'org-display-inline-images), ale to (tak myślę) wciąż nie jest tak, jak chciał OP.
Ista
0

Właśnie pisał odpowiedź do starego postu masz na myśli w swoim pytaniu. Jak już tam napisałem, może to nie działać, ponieważ byłaby to dość dramatyczna zmiana w ogólnym przepływie pracy komputera.

Ale exwm , pozwalając, aby dowolne okno inne niż emacs było buforem emacs, pozwala mieć wykresy R w buforach emacs, które są kontrolowane przez zwykłe ustawienia i skróty klawiszowe.

Oto przykład tego, jak to wygląda:

wprowadź opis zdjęcia tutaj

prosoitos
źródło