kết quả org-babel đến một bộ đệm riêng


9

Tôi sử dụng org-babel để tạo một số báo cáo không thể tự động xử lý và vì org là định dạng phác thảo tốt, tôi in kết quả trong org để thể hiện chúng dưới dạng cây.

Tôi đã nhận thấy rằng việc đánh dấu org lồng vào #+begin_examplekhối làm cho emacs thực sự chậm (và định dạng của kết quả cũng bị tắt).

Sẽ thật tuyệt khi babel đặt đầu ra của các khối mã nhất định vào một bộ đệm riêng (và cũng mở một cửa sổ cho nó), giống như cách nó xử lý các lỗi.

Tôi đã xem qua tài liệu nhưng có vẻ như không có lựa chọn nào như vậy.

Tôi có lầm không? Nếu tôi không, có lẽ ai đó có một đoạn như vậy xung quanh?

Ngoài ra, sự chậm chạp có thể do một số tùy chọn khác trong cấu hình của tôi gây ra, trải nghiệm của bạn với văn bản được định dạng org được lồng vào examplenhư thế nào? Có lẽ tôi đang sủa dưới gốc cây sai ở đây.

Cảm ơn


1
Tôi nên thêm rằng đây không phải là những báo cáo lớn hay phức tạp. Đó là hàng trăm dòng, sâu hai ba cấp, dưới một trăm nút tổng thể. Tập tin org thực tế của tôi là cách lớn hơn. Khi tôi xóa, #+begin_examplechúng hoạt động tốt
Roman Grazhdan

1
Tôi đã có thể tạo ra tính năng mới này mà không gặp quá nhiều khó khăn, nhưng org-modeluôn phát triển và org-babel-insert-resultđã khá dài, và nó sẽ còn dài hơn với sửa đổi này. Bước # 1 : Quyết định một KẾT QUẢ KẾT QUẢ mới như từ này separate. Khối mã nguồn có thể chứa một cái gì đó như :results output separate Bước # 2 : Biến if/thencâu lệnh chứa điều kiện (and result-params (member "silent" result-params))thành ba điều kiện với điều kiện mới (and result-params (member "separate" result-params))và đặt buf mới.
luật

Câu trả lời:


7

Tôi đã xem qua tài liệu nhưng có vẻ như không có lựa chọn nào như vậy.

Đáng ngạc nhiên là orgkhông cung cấp :output buffertùy chọn. Có lẽ đây là trong các tác phẩm cho các orgphiên bản trong tương lai .

... đặt đầu ra của các khối mã nhất định vào một bộ đệm riêng ...

Đây là một cách để mô phỏng chức năng đó: lấy đầu ra của một khối nguồn và streamthành một new buffer:

#+NAME: mycontent
#+BEGIN_SRC emacs-lisp :results value :results raw :exports results
(print "this content is streamed to a new buffer")
#+END_SRC

#+NAME: mystream
#+BEGIN_SRC emacs-lisp :var c=mycontent :results none
(prin1 c (generate-new-buffer "new"))
#+END_SRC

mycontentkhối nguồn cung cấp nội dung cho mystreamnên bạn sẽ chỉ phải thực thi mystreamkhối src. Đó là, C-c C-ctrên mystreamkhối.

Nếu bạn C-c C-ctrên mycontentkhối src, thì kết quả sẽ được chèn vào cùng một bộ đệm.

Mặc dù mycontentđược hiển thị dưới dạng khối src emacs-lisp, đây có thể là bất kỳ khối org src hợp lệ nào. Bạn có thể phải điều chỉnh các :resultstùy chọn dựa trên ngôn ngữ.

Các :results nonecho mystreamkhối src là phản trực giác, nhưng sự kỳ diệu mà được nội dung của bạn vào một bộ đệm mới.


5

Vì tôi đã chấp nhận câu trả lời mà tôi đã sống với điều đó 'có đoạn trích ngắn gọn cho mỗi báo cáo tôi muốn' thiết lập trong một thời gian.

Nhưng sau đó tôi đã nghĩ ra mẹo sau:

một cách để mở outpupt org-babel trong một bộ đệm riêng biệt với C-o- org-open-at-pointđược ưa thích như thế. Vấn đề là, khối kết quả được tạo ra. Nhưng đó cũng là một mệnh lệnh org-babel-remove-result. Kết hợp cả hai, tôi đã thực hiện một chút hack bẩn

(defun my-babel-to-buffer ()
  "A function to efficiently feed babel code block result to a separate buffer"
  (interactive)
  (org-open-at-point)
  (org-babel-remove-result)
)

(defun my-org-mode-config ()
  "To use with `org-mode-hook'"
  (local-set-key (kbd "C-`") 'my-babel-to-buffer)
)

(add-hook 'org-mode-hook 'my-org-mode-config)

Các codeblocks tôi sử dụng như thế có thuộc tính :results output :format raw :exports results

Tệp của tôi với các mẹo và howtos không còn lộn xộn với đầu ra lớn và bộ đệm được sử dụng lại (phù hợp với quy trình làm việc của tôi).


Nếu bạn muốn hành vi này mọi lúc, bạn có thể sử dụng lệnh tùy chỉnh của mình như một cái móc : (add-hook 'org-babel-after-execute-hook 'my-bable-to-buffer))).
glucas

Không, chỉ trong một số trường hợp, để lấy một báo cáo về những thất bại của con rối hoặc một cái gì đó tương tự.
Roman Grazhdan
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.