hasil org-babel ke buffer terpisah

9

Saya menggunakan org-babel untuk menghasilkan beberapa laporan yang tidak dapat diproses secara otomatis, dan karena org adalah format garis besar yang baik, saya mencetak hasilnya dalam org untuk menggambarkannya sebagai pohon.

Saya perhatikan bahwa markup org yang bersarang ke dalam #+begin_exampleblok membuat emacs sangat lambat (dan format hasilnya juga mati).

Akan sangat keren jika babel menempatkan output dari blok kode tertentu ke buffer terpisah (dan membuka jendela untuk itu juga), dengan cara yang sama seperti menangani kesalahan.

Saya telah melihat dokumentasi tetapi sepertinya tidak ada opsi seperti itu.

Apakah aku salah? Jika tidak, mungkin ada orang yang memiliki potongan seperti itu?

Juga, kelambatan mungkin disebabkan oleh beberapa opsi lain di konfigurasi saya, bagaimana pengalaman Anda dengan teks berformat org yang bersarang example? Mungkin saya menggonggong di bawah pohon yang salah di sini.

Terima kasih

Roman Grazhdan
sumber
1
Saya harus menambahkan bahwa ini bukan laporan besar atau rumit. Ini beberapa ratus baris, kedalaman dua-tiga, di bawah seratus node secara keseluruhan. File org saya yang sebenarnya jauh lebih besar. Setelah saya menghapus #+begin_examplemereka bekerja dengan baik
Roman Grazhdan
1
Saya dapat membuat fitur baru ini tanpa terlalu banyak kesulitan, tetapi org-modeselalu berkembang dan org-babel-insert-resultsudah agak lama, dan akan lebih lama lagi dengan modifikasi ini. Langkah # 1 : Tentukan HASIL-PARAM baru seperti kata separate. Blok kode sumber dapat berisi sesuatu seperti :results output separate Langkah # 2 : Ubah if/thenpernyataan yang berisi kondisi (and result-params (member "silent" result-params))menjadi tiga kondisi dengan yang baru (and result-params (member "separate" result-params))dan atur buf baru.
hukum

Jawaban:

7

Saya telah melihat dokumentasi tetapi sepertinya tidak ada opsi seperti itu.

Mengejutkan bahwa orgtidak menawarkan :output bufferopsi. Mungkin ini sedang bekerja untuk orgversi masa depan .

... tempatkan output dari blok kode tertentu ke buffer terpisah ...

Berikut ini salah satu cara untuk mensimulasikan fungsi itu: ambil output dari satu blok sumber dan streamitu menjadi 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

Karena mycontentblok sumber memberi makan konten mystream, Anda harus menjalankan hanya mystreamblok src. Yaitu, C-c C-cdi mystreamblok.

Jika Anda C-c C-cberada di mycontentblok src, maka hasilnya akan dimasukkan dalam buffer yang sama.

Meskipun mycontentditampilkan sebagai blok src emacs-lisp, ini bisa berupa blok src org yang valid. Anda mungkin harus menyesuaikan :resultsopsi berdasarkan bahasa.

The :results noneuntuk mystreamblok src adalah kontra-intuitif, tetapi sihir yang mendapatkan konten Anda ke dalam buffer baru.

Pengguna Emacs
sumber
5

Karena saya telah menerima jawaban yang sudah saya gunakan untuk pengaturan 'punya potongan kecil untuk setiap laporan yang saya inginkan' untuk sementara waktu.

Tapi kemudian saya menemukan trik berikut:

Ada adalah cara untuk terbuka outpupt org-babel dalam buffer terpisah dengan C-o- org-open-at-pointyang mewah seperti itu. Masalahnya adalah, blok hasil dibuat. Tetapi ada juga perintah org-babel-remove-result. Menggabungkan keduanya, saya membuat sedikit hack kotor

(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)

Kode kunci yang saya gunakan seperti itu memiliki properti :results output :format raw :exports results

File saya dengan tips dan howtos tidak lagi berantakan dengan output besar dan buffer digunakan kembali (yang sesuai dengan alur kerja saya).

Roman Grazhdan
sumber
Jika Anda ingin perilaku ini sepanjang waktu, Anda dapat menggunakan perintah kustom Anda sebagai kail: (add-hook 'org-babel-after-execute-hook 'my-bable-to-buffer))).
glukas
Tidak, hanya dalam beberapa kasus, untuk mengambil laporan tentang kegagalan boneka atau sesuatu seperti itu.
Roman Grazhdan