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?
create-image
. Nie mogę ci jednak pomóc w tym, aby R i Emacs komunikowali się ze sobą, aby to osiągnąć.Odpowiedzi:
Nie jest to kompletna odpowiedź na pytanie, ale kiedy ktoś używa R w babelcie org-mode:
Wykonanie
C-c C-c
tej czynności w trybie org spowoduje utworzenie*my-R*
bufora z interaktywnym buforem ESS, utworzenie wykresu wexample.svg
pliku, 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ódło
(add-hook 'org-babel-after-execute-hook 'org-display-inline-images)
, ale to (tak myślę) wciąż nie jest tak, jak chciał OP.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:
źródło