Bagaimana cara memasukkan output dari perintah shell dalam blok kode sumber mode-org?

12

Sebagai contoh, saya mendapat demo untuk menunjukkan perintah dan hasilnya, dan saya ingin memasukkannya ke dalam .orgfile seperti cuplikan kode sumber C atau sesuatu. Saya kemudian ingin dapat mengekspor file ke file HTML, dan memiliki blok yang disorot seperti contoh di banyak buku.

Sebagai contoh, saya punya

#+BEGIN_SRC shell
$ ls
dir1
dir2
file1
file2
...
or any other examples like this
...
#+END_SRC

tetapi tidak dapat dikonversi ke HTML: Pesan kesalahan yang berbunyi

shell-mode: Argumen tipe yang salah: processp, nil

muncul sepanjang waktu. Mode apa yang harus saya gunakan untuk mengganti shell, dan jika saya tidak menggunakan #+BEGIN_SRC...#+END_SRCformat, apa yang harus saya gunakan?

CodyChan
sumber

Jawaban:

16

Jika Anda ingin contoh membangun diri sendiri (yang ini apa yang saya dapatkan dari pertanyaan Anda, tetapi benar saya jika saya salah), menggunakan EXAMPLEblok bukannya SRCblok:

#+BEGIN_EXAMPLE
$ ls
dir1
dir2
file1
file2
...
#+END_EXAMPLE

Saat mengekspor ke HTML, blok ini menjadi:

<pre class="example">
$ ls
dir1
dir2
file1
file2
...
</pre>

Seperti yang Anda lihat, isi blok yang diekspor persis sama dengan isi EXAMPLEblok asli .


Jika Anda benar-benar ingin menjalankan satu atau lebih perintah untuk menghasilkan output secara dinamis dan menyertakan perintah dan hasil dalam dokumen HTML Anda, Anda perlu memodifikasi SRCblok agar terlihat seperti ini:

#+BEGIN_SRC sh :exports both
ls
#+END_SRC

Jika output dari lsperintah termasuk direktori dan file Anda terdaftar dalam contoh Anda ( dir1, dir2, file1, file2), ini akan ekspor ke:

<div class="org-src-container">
  <pre class="src src-sh">
    ls
  </pre>
</div>

<table>
  <colgroup>
    <col class="left" />
  </colgroup>
  <tbody>
    <tr>
      <td class="left">dir1</td>
    </tr>
    <tr>
      <td class="left">dir2</td>
    </tr>
    <tr>
      <td class="left">file1</td>
    </tr>
    <tr>
      <td class="left">file2</td>
    </tr>
  </tbody>
</table>

Seperti yang Anda lihat, kode itu sendiri dibungkus dengan blok kode, dan hasilnya tercantum dalam tabel.

Perhatikan bahwa Anda harus mengaktifkan dukungan untuk shblok kode secara eksplisit melalui:

(require 'ob-sh)
(org-babel-do-load-languages 'org-babel-load-languages '((sh . t)))

Ini karena secara default Org Babel hanya mengaktifkan dukungan untuk blok kode Emacs Lisp (seperti yang dijelaskan di sini ).

itu hanya
sumber
Terima kasih untuk obmasalahnya, saya punya dua masalah lagi 1: apakah ada built-in shortcutuntuk menyisipkan pasangan BEGIN_EXAMPLE, ingin <s then TABmenyisipkan BEGIN_EXAMPLEselain untuk mendefinisikan cuplikan yasnippet? 2: Saya mendapat org-html-handle-links: Wrong type argument: stringp, nilpesan kesalahan setelah mengubah BEGIN_EXAMPLEtetapi tidak lebih, pasti ada sesuatu yang salah tentang tautan dalam file org saya, ada banyak dari mereka, bagaimana saya dapat membuat org-exportuntuk menampilkan lebih detail seperti nomor baris yang salah ketika ekspor gagal ??
CodyChan
Mengatasi pertanyaan pertama Anda: Ya, ada, <ediikuti oleh TAB. Lihat Template Mudah untuk daftar lengkap.
itsjeyd
Adapun pertanyaan kedua Anda: Saya tidak yakin saya tahu apa yang Anda maksud. Tautan apa? Tidak ada tautan dalam contoh asli Anda. Sebagai saran umum, cobalah untuk mendapatkan contoh minimal yang berfungsi pertama. Letakkan EXAMPLEblok seperti yang ditunjukkan dalam jawaban saya ke file baru dengan sendirinya. Jangan tambahkan yang lain. Kemudian cobalah untuk mengekspornya dan lihat apa yang terjadi. Jika itu berhasil, secara bertahap tambahkan lebih banyak barang dan terus ekspor seperti yang Anda lakukan. Jika Anda mengalami kesalahan di beberapa titik, Anda akan tahu bahwa penambahan terakhir (atau perubahan) yang Anda buat menyebabkannya.
itsjeyd
Masalah pos asli saya diselesaikan oleh BEGIN_EXAMPLE. Kesalahan BEGIN_EXAMPLE terletak dengan org-exportsendirinya, jadi saya tahu itu adalah masalah BEGIN_SRC, tetapi ada banyak lagi di file asli saya, setelah itu org-export, hanya org-html-handle-links: Wrong type argument: stringp, nilpesan kesalahan yang muncul dan saya tidak tahu di mana posisi tepatnya.
CodyChan
@CodyChan Saya tidak mengikuti. Jika Anda ingin saya melihat isi file yang ingin Anda ekspor, tambahkan ke pertanyaan Anda (Anda dapat menghapusnya lagi nanti).
itsjeyd