Làm cách nào để đưa đầu ra của lệnh shell vào khối mã nguồn chế độ org?


12

Ví dụ, tôi có một bản demo để hiển thị một lệnh và đầu ra của nó và tôi muốn chèn chúng vào một .orgtệp như một đoạn mã nguồn của C hoặc một cái gì đó. Sau đó, tôi muốn có thể xuất tệp thành tệp HTML và có khối được tô sáng giống như các ví dụ có trong nhiều sách.

Ví dụ, tôi có

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

nhưng nó không thể được chuyển đổi sang HTML: Một thông báo lỗi đọc

shell-mode: Đối số kiểu sai: processp, nil

hiện lên tất cả các thời gian. Tôi nên sử dụng chế độ nào để thay thế shellvà nếu tôi không nên sử dụng #+BEGIN_SRC...#+END_SRCđịnh dạng này, tôi nên sử dụng chế độ nào?

Câu trả lời:


16

Nếu bạn muốn tự xây dựng các ví dụ (đó là những gì tôi nhận được từ câu hỏi của bạn, nhưng hãy sửa tôi nếu tôi sai), hãy sử dụng một EXAMPLEkhối thay vì một SRCkhối:

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

Khi xuất sang HTML, khối này trở thành:

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

Như bạn có thể thấy, nội dung của khối xuất khẩu hoàn toàn giống với nội dung của EXAMPLEkhối ban đầu .


Nếu bạn thực sự muốn chạy một hoặc nhiều lệnh để tạo đầu ra động và bao gồm cả các lệnh và kết quả trong tài liệu HTML của bạn, bạn cần sửa đổi SRCkhối để trông như thế này:

#+BEGIN_SRC sh :exports both
ls
#+END_SRC

Nếu đầu ra của lslệnh bao gồm các thư mục và các tập tin bạn được liệt kê trong ví dụ của bạn ( dir1, dir2, file1, file2), điều này sẽ xuất khẩu sang:

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

Như bạn có thể thấy, bản thân mã được gói trong một khối mã và kết quả được liệt kê trong bảng.

Lưu ý rằng bạn sẽ cần kích hoạt hỗ trợ cho shcác khối mã một cách rõ ràng thông qua:

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

Điều này là do mặc định Org Babel chỉ cho phép hỗ trợ các khối mã Lisp của Emacs (như được giải thích ở đây ).


Cảm ơn bạn vì obđiều này, tôi đã có thêm hai vấn đề, 1đó là có cách nào built-in shortcutđể chèn cặp BEGIN_EXAMPLE, muốn <s then TABchèn BEGIN_EXAMPLEbên cạnh để xác định đoạn trích yasnippetkhông? 2: Tôi đã nhận được org-html-handle-links: Wrong type argument: stringp, nilthông báo lỗi sau khi thay đổi BEGIN_EXAMPLEnhưng không có gì khác, phải có lỗi gì đó về liên kết trong tệp org của tôi, có rất nhiều trong số đó, làm thế nào tôi có thể thực hiện org-exportđể hiển thị chi tiết hơn như số dòng bị sai khi xuất thất bại ??
CodyChan

Giải quyết câu hỏi đầu tiên của bạn: Vâng, có, nó được <etheo sau TAB. Xem mẫu dễ dàng cho một danh sách đầy đủ.
itjeyd

Đối với câu hỏi thứ hai của bạn: Tôi không chắc tôi biết ý của bạn là gì. Liên kết gì? Không có bất kỳ liên kết trong ví dụ ban đầu của bạn. Như một lời khuyên chung, hãy cố gắng lấy một ví dụ tối thiểu làm việc trước. Đặt EXAMPLEkhối như trong câu trả lời của tôi vào một tệp mới. Đừng thêm bất cứ điều gì khác. Sau đó thử xuất nó và xem những gì sẽ xảy ra. Nếu điều đó hoạt động, dần dần thêm nhiều thứ và tiếp tục xuất như bạn làm. Nếu bạn gặp phải một lỗi tại một thời điểm nào đó, bạn sẽ biết rằng lần bổ sung cuối cùng (hoặc thay đổi) bạn thực hiện là gây ra lỗi đó.
itjeyd

Vấn đề của bài viết gốc của tôi được giải quyết bằng BEGIN_EXAMPLE. Lỗi BEGIN_EXAMPLE nằm ở org-exportchính nó, vì vậy tôi biết đó là sự cố BEGIN_SRC, nhưng có nhiều hơn nữa trong tệp gốc của tôi, sau đó org-export, chỉ có thông org-html-handle-links: Wrong type argument: stringp, nilbáo lỗi xuất hiện và tôi không biết vị trí chính xác ở đâu.
CodyChan

@CodyChan Tôi không theo dõi. Nếu bạn muốn tôi xem nội dung của tệp bạn đang cố xuất, hãy thêm nó vào câu hỏi của bạn (bạn có thể xóa lại sau).
itjeyd
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.