Як включити вихід команди оболонки в блок вихідного коду в режимі org?


12

Наприклад, я отримав демонстраційну команду, щоб показати команду та її вихід, і я хочу вставити їх у .orgфайл, як фрагмент вихідного коду C або щось подібне. Тоді я хочу мати можливість експортувати файл у HTML-файл, і цей блок буде виділено так, як приклади в багатьох книгах.

Наприклад, у мене є

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

але воно не може бути перетворене в HTML: повідомлення про помилку, яке читається

shell-mode: Неправильний аргумент типу: processp, nil

з’являється весь час. Який режим я повинен використовувати для заміни 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

Адресуючи своє перше запитання: Так, є, після <eчого йде TAB. Повний список див. У Легких шаблонах .
itjeyd

Щодо вашого другого запитання: я не впевнений, що знаю, що ви маєте на увазі. Яке посилання? У вашому оригінальному прикладі немає посилань. Як загальна порада, спробуйте спочатку отримати мінімальний приклад, працюючи. Покладіть EXAMPLEблок, як показано у моїй відповіді, у новий файл сам. Не додайте нічого іншого. Потім спробуйте експортувати його і подивитися, що станеться. Якщо це працює, поступово додайте більше матеріалів і продовжуйте експортувати, як і раніше. Якщо ви в якийсь момент зіткнетеся з помилкою, ви дізнаєтесь, що останнє додавання (або зміна), яке ви внесли, викликає це.
itsjeyd

Проблема моєї оригінальної публікації вирішена BEGIN_EXAMPLE. Помилка BEGIN_EXAMPLE розташована org-exportсама по собі, тому я знаю, що це проблема BEGIN_SRC, але в моєму початковому файлі є набагато більше, після цього відображається org-exportлише org-html-handle-links: Wrong type argument: stringp, nilповідомлення про помилку, і я не знаю, де знаходиться точна позиція.
CodyChan

@CodyChan Я не слідкую. Якщо ви хочете, щоб я ознайомився із вмістом файлу, який ви намагаєтеся експортувати, додайте його до свого питання (ви можете його видалити пізніше).
itsjeyd
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.