วิธีรวมเอาต์พุตของคำสั่งเชลล์ในบล็อกซอร์สโค้ดโหมด org?


12

ตัวอย่างเช่นฉันได้รับการสาธิตเพื่อแสดงคำสั่งและผลลัพธ์ของมันและฉันต้องการที่จะแทรกพวกเขาลงใน.orgไฟล์เช่น snippet ซอร์สโค้ดของ C หรือบางสิ่งบางอย่าง ฉันต้องการส่งออกไฟล์ไปยังไฟล์ HTML และให้ไฮไลต์บล็อกเหมือนกับตัวอย่างอยู่ในหนังสือหลายเล่ม

ตัวอย่างเช่นฉันมี

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

แต่ไม่สามารถแปลงเป็น HTML ได้: ข้อความแสดงข้อผิดพลาดที่อ่าน

shell-mode: อาร์กิวเมนต์ประเภทผิด: processp, ศูนย์

ปรากฏขึ้นตลอดเวลา ฉันควรใช้โหมดใดในการแทนที่shellและถ้าฉันไม่ควรใช้#+BEGIN_SRC...#+END_SRCรูปแบบใดฉันควรใช้อะไรแทน

คำตอบ:


16

หากคุณต้องการสร้างตัวอย่างด้วยตัวเอง (นั่นคือสิ่งที่ฉันได้รับจากคำถามของคุณ แต่แก้ไขให้ฉันถ้าฉันผิด) ให้ใช้EXAMPLEบล็อกแทนSRCบล็อก:

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

เมื่อส่งออกเป็น HTML บล็อกนี้จะกลายเป็น:

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

อย่างที่คุณเห็นเนื้อหาของบล็อกที่ส่งออกนั้นเหมือนกับเนื้อหาของEXAMPLEบล็อกดั้งเดิม


หากคุณต้องการเรียกใช้คำสั่งอย่างน้อยหนึ่งคำสั่งเพื่อสร้างเอาต์พุตแบบไดนามิกและรวมทั้งคำสั่งและผลลัพธ์ในเอกสาร HTML ของคุณคุณจะต้องแก้ไขSRCบล็อคเพื่อให้มีลักษณะดังนี้:

#+BEGIN_SRC sh :exports both
ls
#+END_SRC

ถ้าผลลัพธ์ของlsคำสั่งรวมถึงไดเรกทอรีและไฟล์ที่คุณระบุไว้ในตัวอย่างของคุณ ( dir1, dir2, file1, file2) นี้จะส่งออกไปยัง:

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

อย่างที่คุณเห็นรหัสตัวเองถูกห่อในบล็อกรหัสและผลลัพธ์จะแสดงรายการในตาราง

โปรดทราบว่าคุณจะต้องเปิดใช้งานการสนับสนุนสำหรับการshบล็อกรหัสอย่างชัดเจนผ่าน:

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

นี่เป็นเพราะโดยค่าเริ่มต้นOrg Babelจะเปิดใช้งานการสนับสนุนบล็อกโค้ด Emacs Lisp เท่านั้น (ดังอธิบายไว้ที่นี่ )


ขอบคุณสำหรับobสิ่งนี้ฉันมีปัญหาเพิ่มอีกสองปัญหา1: มีผู้ใดbuilt-in shortcutแทรก BEGIN_EXAMPLE ลงไปบ้างเช่นต้องการ<s then TABแทรกส่วนBEGIN_EXAMPLEนอกเหนือจากเพื่อกำหนดตัวอย่างข้อมูลyasnippetหรือไม่ 2: ฉันได้รับorg-html-handle-links: Wrong type argument: stringp, nilข้อความแสดงข้อผิดพลาดหลังจากเปลี่ยนBEGIN_EXAMPLEแต่ไม่มีอะไรเพิ่มเติมต้องมีบางอย่างผิดปกติเกี่ยวกับลิงก์ในไฟล์ org ของฉันมีหลายอย่างฉันorg-exportจะแสดงรายละเอียดเพิ่มเติมเช่นหมายเลขบรรทัดผิดเมื่อการส่งออกล้มเหลวได้อย่างไร ??
CodyChan

Addressing คำถามแรกของคุณ: ใช่มีคือมันตามมาด้วย<e TABดูEasy Templatesสำหรับรายการทั้งหมด
itsjeyd

สำหรับคำถามที่สองของคุณ: ฉันไม่แน่ใจว่าฉันรู้ว่าคุณหมายถึงอะไร ลิงค์อะไร ไม่มีลิงก์ในตัวอย่างดั้งเดิมของคุณ ตามคำแนะนำทั่วไปให้ลองทำตัวอย่างเล็กน้อยก่อน ใส่EXAMPLEบล็อกตามที่แสดงในคำตอบของฉันเป็นไฟล์ใหม่ด้วยตัวเอง อย่าเพิ่มอะไรอีก จากนั้นลองส่งออกและดูว่าเกิดอะไรขึ้น หากใช้งานได้ให้ค่อยๆเพิ่มสิ่งอื่น ๆ และส่งออกต่อไปตามที่คุณทำ หากคุณพบข้อผิดพลาดในบางจุดคุณจะรู้ว่าการเพิ่มครั้งล่าสุด (หรือเปลี่ยนแปลง) ที่คุณทำไว้เป็นสาเหตุ
itsjeyd

ปัญหาของโพสต์ดั้งเดิมของฉันได้รับการแก้ไขโดย BEGIN_EXAMPLE ข้อผิดพลาด BEGIN_EXAMPLE อยู่ด้วยorg-exportตัวเองดังนั้นฉันจึงรู้ว่ามันเป็นปัญหา BEGIN_SRC แต่มีไฟล์จำนวนมากในไฟล์ต้นฉบับของฉันหลังจากorg-exportนั้นมีเพียงorg-html-handle-links: Wrong type argument: stringp, nilข้อความแสดงข้อผิดพลาดปรากฏขึ้นและฉันไม่ได้ตำแหน่งที่แน่นอนอยู่
CodyChan

@CodyChan ฉันไม่ได้ติดตาม หากคุณต้องการให้ฉันดูเนื้อหาของไฟล์ที่คุณพยายามส่งออกให้เพิ่มไปยังคำถามของคุณ (คุณสามารถลบออกได้อีกในภายหลัง)
itsjeyd
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.