¿Cómo incluir la salida de un comando de shell en el bloque de código fuente del modo org?

12

Por ejemplo, obtuve una demostración para mostrar un comando y su salida, y quiero insertarlos en un .orgarchivo como un fragmento de código fuente de C o algo así. Entonces quiero poder exportar el archivo a un archivo HTML, y tener el bloque resaltado tal como lo están los ejemplos en muchos libros.

Por ejemplo, tengo

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

pero no se puede convertir a HTML: un mensaje de error que dice

shell-mode: Argumento de tipo incorrecto: processp, nil

aparece todo el tiempo. ¿Qué modo debo usar para reemplazar shell, y si no debo usar el #+BEGIN_SRC...#+END_SRCformato, qué debo usar en su lugar?

CodyChan
fuente

Respuestas:

16

Si desea construir ejemplos usted mismo (eso es lo que obtengo de su pregunta, pero corríjame si me equivoco), use un EXAMPLEbloque en lugar de un SRCbloque:

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

Al exportar a HTML, este bloque se convierte en:

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

Como puede ver, el contenido del bloque exportado es exactamente el mismo que el contenido del EXAMPLEbloque original .


Si realmente desea ejecutar uno o más comandos para generar resultados dinámicamente e incluir tanto los comandos como los resultados en su documento HTML, debe modificar el SRCbloque para que se vea así:

#+BEGIN_SRC sh :exports both
ls
#+END_SRC

Si la salida del lscomando incluye los directorios y archivos que enumeró en su ejemplo ( dir1, dir2, file1, file2), esto va a exportar:

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

Como puede ver, el código en sí está envuelto en un bloque de código y los resultados se enumeran en una tabla.

Tenga en cuenta que deberá habilitar el soporte para shbloques de código explícitamente a través de:

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

Esto se debe a que, por defecto, Org Babel solo habilita la compatibilidad con los bloques de código Emacs Lisp (como se explica aquí ).

itsjeyd
fuente
Gracias por la obcosa, tengo dos problemas más 1: ¿hay alguno built-in shortcutpara insertar el par de BEGIN_EXAMPLE, como <s then TABinsertar el BEGIN_EXAMPLEademás para definir un fragmento yasnippet? 2: Recibí un org-html-handle-links: Wrong type argument: stringp, nilmensaje de error después de cambiar el, BEGIN_EXAMPLEpero nada más, debe haber algo mal sobre el enlace en mi archivo de organización, hay muchos de ellos, cómo puedo hacer org-exportpara mostrar más detalles, como el número de línea que está mal cuando la exportación falló ??
CodyChan
Abordar su primera pregunta: Sí, la hay, es <eseguida por TAB. Consulte Plantillas fáciles para obtener una lista completa.
itsjeyd
En cuanto a su segunda pregunta: no estoy seguro de saber a qué se refiere. ¿Qué enlace (s)? No hay enlaces en su ejemplo original. Como consejo general, trate de obtener un ejemplo mínimo que funcione primero. Coloque el EXAMPLEbloque como se muestra en mi respuesta en un nuevo archivo por sí mismo. No agregues nada más. Luego intente exportarlo y vea qué sucede. Si eso funciona, agregue gradualmente más cosas y continúe exportando a medida que lo hace. Si se encuentra con un error en algún momento, sabrá que la última adición (o cambio) que realizó lo está causando.
itsjeyd
BEGIN_EXAMPLE resuelve el problema de mi publicación original. El error BEGIN_EXAMPLE se encuentra por org-exportsí mismo, así que sé que es el problema BEGIN_SRC, pero hay muchos más en mi archivo original, después org-export, solo org-html-handle-links: Wrong type argument: stringp, nilaparece el mensaje de error y no sé dónde está la posición exacta.
CodyChan
@CodyChan No estoy siguiendo. Si desea que eche un vistazo al contenido del archivo que está intentando exportar, agréguelo a su pregunta (puede eliminarlo nuevamente más tarde).
itsjeyd