Biểu đồ ESS trực tiếp đến bộ đệm Emacs?


33

Q: làm thế nào tôi có thể nhận ESS (R) để vẽ trực tiếp vào bộ đệm Emacs?

Khi tương tác với R thông qua ESS, R mặc định sinh ra một cửa sổ đồ họa riêng bên ngoài Emacs để vẽ các ô của nó. (Tất nhiên, người ta có thể chọn các thiết bị đồ họa khác, đó là cách chúng tôi vẽ đồ họa PDF, v.v.) Hai vấn đề: thứ nhất, cửa sổ mới đánh cắp tiêu điểm từ Emacs, và thứ hai, chắc chắn sẽ rất tốt để giữ mọi thứ tốt đẹp và gọn gàng trong hệ sinh thái Emacs.

Vậy: có cách nào để vẽ "trực tiếp" (hoặc thậm chí gián tiếp) vào bộ đệm Emacs và quan trọng hơn là làm như vậy mà không cần nhiều sự can thiệp thủ công của người dùng?

Đã có một số thảo luận trước trong luồng Stack Overflow cũ này , nhưng các giải pháp từng phần được đề xuất là không lý tưởng. Chúng chủ yếu liên quan đến việc thay đổi thiết bị vẽ trong R (giả sử thành PNG), âm mưu thành một tệp tạm thời, sau đó truy cập thủ công tệp đó trong bộ đệm Emacs. Điều đó khiến tôi rất bối rối, đặc biệt nếu mục tiêu là sử dụng cửa sổ cốt truyện / bộ đệm tương tác và vẽ nhiều ô trong một phiên (hoặc thêm các lớp cho chúng khi đang di chuyển).

Tôi đang suy đoán ở đây, nhưng nó gây ấn tượng với tôi rằng, vì cả R và Emacs đều hỗ trợ SVG, đó có thể là một định dạng hữu ích để sử dụng. Tuy nhiên, tôi không rõ nếu / làm thế nào người ta có thể nối vào quy trình R để liên lạc nhanh chóng. Có cách nào để R nhổ mã SVG trực tiếp vào bộ đệm Emacs không, hay nó cần phải đi qua trung gian của một tệp tạm thời? Làm thế nào người ta có thể thuyết phục Emacs truy cập một tệp tạm thời mới một cách tự động khi R tạo nó hoặc cập nhật bộ đệm lô như vậy khi tệp tạm thời được cập nhật / ghi đè bởi một âm mưu mới?


3
Emacs không phải sử dụng tệp và thay vào đó có thể sử dụng chuỗi để chèn hình ảnh vào bộ đệm, hãy xem chuỗi doc của create-image. Tôi không thể giúp bạn thực sự làm cho R và Emacs giao tiếp với nhau để đạt được điều đó.
wasamasa

1
Điều này đã được thảo luận trong danh sách gửi thư ESS: xem stat.ethz.ch/pipermail/ess-help/2013-November/009559.html
Ista

Câu trả lời:


5

Không hoàn toàn là một câu trả lời cho câu hỏi, nhưng khi một người sử dụng R trong babel mode của 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

Thực hiện C-c C-cđiều này trong chế độ org sẽ tạo một *my-R*bộ đệm với bộ đệm ESS tương tác, tạo âm mưu trong example.svgtệp và sau đó bạn có thể nhấp (hoặc nhấn enter) trên liên kết đã tạo với tệp, sẽ mở nó.

Chế độ Org có thể định tuyến hình ảnh, nhưng nó làm điều đó khi chuyển đổi chức năng này (với M-x org-toggle-inline-images) hoặc khi mở tệp, nhưng không chạy mã trong đó.

Vì vậy, đây không phải là một giải pháp hoàn chỉnh.


3
Bạn có thể làm cho hình ảnh hiển thị tự động bằng cách cài đặt (add-hook 'org-babel-after-execute-hook 'org-display-inline-images), nhưng đây là (tôi nghĩ) vẫn không thực sự là những gì OP muốn.
Ista

0

Tôi chỉ đăng một câu trả lời cho bài viết cũ mà bạn đang đề cập đến trong câu hỏi của bạn. Như tôi đã viết ở đó, điều này có thể không hiệu quả với bạn vì nó sẽ là một thay đổi khá lớn trong quy trình làm việc chung của máy tính của bạn.

Nhưng exwm , bằng cách cho phép bất kỳ cửa sổ không phải emacs nào là bộ đệm emacs, cho phép có các ô R trong bộ đệm emacs được điều khiển bởi các cài đặt và khóa phím thông thường.

Đây là một ví dụ về những gì nó trông như thế nào:

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.