Comment inclure la sortie d'une commande shell dans un bloc de code source en mode org?

12

Par exemple, j'ai eu une démo pour montrer une commande et sa sortie, et je veux les insérer dans un .orgfichier comme un extrait de code source de C ou quelque chose. Je veux ensuite pouvoir exporter le fichier vers un fichier HTML et avoir le bloc en surbrillance, tout comme les exemples sont dans de nombreux livres.

Par exemple, j'ai

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

mais il ne peut pas être converti en HTML: un message d'erreur qui lit

shell-mode: Argument de type incorrect: processp, nil

apparaît tout le temps. Quel mode dois-je utiliser pour remplacer shell, et si je ne dois pas utiliser le #+BEGIN_SRC...#+END_SRCformat, que dois-je utiliser à la place?

CodyChan
la source

Réponses:

16

Si vous voulez construire des exemples vous-même (c'est ce que j'obtiens de votre question, mais corrigez-moi si je me trompe), utilisez un EXAMPLEbloc au lieu d'un SRCbloc:

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

Lors de l'exportation au format HTML, ce bloc devient:

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

Comme vous pouvez le voir, le contenu du bloc exporté est exactement le même que le contenu du EXAMPLEbloc d' origine .


Si vous souhaitez réellement exécuter une ou plusieurs commandes pour produire une sortie de manière dynamique et inclure à la fois les commandes et les résultats dans votre document HTML, vous devez modifier le SRCbloc pour qu'il ressemble à ceci:

#+BEGIN_SRC sh :exports both
ls
#+END_SRC

Si la sortie de la lscommande inclut les répertoires et les fichiers que vous avez énumérés dans votre exemple ( dir1, dir2, file1, file2), ce exportera à:

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

Comme vous pouvez le voir, le code lui-même est enveloppé dans un bloc de code et les résultats sont répertoriés dans un tableau.

Notez que vous devrez activer shexplicitement la prise en charge des blocs de code via:

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

En effet, par défaut, Org Babel active uniquement la prise en charge des blocs de code Emacs Lisp (comme expliqué ici ).

itsjeyd
la source
Merci pour la obchose, j'ai eu deux autres problèmes 1: y en a-t-il built-in shortcutpour insérer la paire de BEGIN_EXAMPLE, comme <s then TABpour insérer en BEGIN_EXAMPLEplus pour définir un extrait de code yasnippet? 2: J'ai reçu org-html-handle-links: Wrong type argument: stringp, nilun message d'erreur après avoir changé le BEGIN_EXAMPLEmais rien de plus, il doit y avoir quelque chose de mal dans le lien dans mon fichier org, il y en a beaucoup, comment je peux faire org-exportpour afficher plus de détails tels que le numéro de ligne qui est incorrect lors de l'échec de l'exportation ??
CodyChan
Répondre à votre première question: Oui, il y a, elle est <esuivie de TAB. Voir Modèles simples pour une liste complète.
itsjeyd
Quant à votre deuxième question: je ne suis pas sûr de savoir ce que vous voulez dire. Quel (s) lien (s)? Il n'y a aucun lien dans votre exemple d'origine. À titre de conseil général, essayez d'abord d'obtenir un exemple minimal. Mettez le EXAMPLEbloc comme indiqué dans ma réponse dans un nouveau fichier par lui-même. N'ajoutez rien d'autre. Essayez ensuite de l'exporter et voyez ce qui se passe. Si cela fonctionne, ajoutez progressivement d'autres éléments et continuez à exporter comme vous le faites. Si vous rencontrez une erreur à un moment donné, vous saurez que le dernier ajout (ou modification) que vous avez fait est à l'origine de cette erreur.
itsjeyd
Le problème de mon message d'origine est résolu par BEGIN_EXAMPLE. L'erreur BEGIN_EXAMPLE est localisée par org-exportlui - même, donc je sais que c'est le problème BEGIN_SRC, mais il y en a beaucoup plus dans mon fichier d'origine, après org-export, seul le org-html-handle-links: Wrong type argument: stringp, nilmessage d'erreur apparaît et je ne sais pas où se trouve la position exacte.
CodyChan
@CodyChan Je ne suis pas en train de suivre. Si vous voulez que je regarde le contenu du fichier que vous essayez d'exporter, ajoutez-le à votre question (vous pourrez le supprimer à nouveau plus tard).
itsjeyd