Как включить вывод команды оболочки в блок исходного кода org-mode?

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формат, что я должен использовать вместо этого?

CodyChan
источник

Ответы:

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 (как описано здесь ).

itsjeyd
источник
Спасибо за 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-exportчтобы показать более подробную информацию, такую ​​как номер строки, неправильный при неудачном экспорте ??
CodyChan
Отвечая на ваш первый вопрос: да, есть, <eа затем TAB. Посмотрите Простые Шаблоны для полного списка.
itjeyd
Что касается вашего второго вопроса: я не уверен, что знаю, что вы имеете в виду. Какие ссылки? В исходном примере нет ссылок. В качестве общего совета постарайтесь, чтобы вначале работал минимальный пример. Поместите EXAMPLEблок, как показано в моем ответе, в новый файл. Больше ничего не добавляй. Затем попробуйте экспортировать его и посмотреть, что произойдет. Если это работает, постепенно добавляйте больше материала и продолжайте экспортировать, как вы это делаете. Если в какой-то момент вы столкнетесь с ошибкой, вы будете знать, что причиной является последнее добавленное вами (или изменение).
itjeyd
Проблема моего оригинального поста решена с помощью BEGIN_EXAMPLE. Ошибка BEGIN_EXAMPLE находится org-exportсама по себе, так что я знаю, что это проблема BEGIN_SRC, но в моем исходном файле их гораздо больше, после того org-export, как появляется только org-html-handle-links: Wrong type argument: stringp, nilсообщение об ошибке, а я не знаю, где находится точная позиция.
CodyChan
@CodyChan Я не следую. Если вы хотите, чтобы я посмотрел содержимое файла, который вы пытаетесь экспортировать, добавьте его к своему вопросу (вы можете удалить его позже).
itjeyd