Come includere l'output di un comando shell nel blocco di codice sorgente in modalità org?


12

Ad esempio, ho una demo per mostrare un comando e il suo output e voglio inserirli in un .orgfile come uno snippet di codice sorgente di C o qualcosa del genere. Voglio quindi poter esportare il file in un file HTML e avere il blocco evidenziato proprio come gli esempi sono in molti libri.

Ad esempio, ho

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

ma non può essere convertito in HTML: un messaggio di errore che legge

shell-mode: Argomento di tipo errato: processp, nil

si presenta tutto il tempo. Quale modalità dovrei usare per sostituire shelle se non dovessi usare il #+BEGIN_SRC...#+END_SRCformato, cosa dovrei usare invece?

Risposte:


16

Se vuoi costruire tu stesso degli esempi (è quello che sto ricevendo dalla tua domanda, ma correggimi se sbaglio), usa un EXAMPLEblocco invece di un SRCblocco:

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

Quando si esporta in HTML, questo blocco diventa:

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

Come puoi vedere, i contenuti del blocco esportato sono esattamente gli stessi del EXAMPLEblocco originale .


Se si desidera effettivamente eseguire uno o più comandi per produrre in modo dinamico l'output e includere sia i comandi che i risultati nel documento HTML, è necessario modificare il SRCblocco in questo modo:

#+BEGIN_SRC sh :exports both
ls
#+END_SRC

Se l'uscita del lscomando include le directory ei file che avete elencato nel tuo esempio ( dir1, dir2, file1, file2), questo sarà esportare in:

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

Come puoi vedere, il codice stesso è racchiuso in un blocco di codice e i risultati sono elencati in una tabella.

Nota che dovrai abilitare shesplicitamente il supporto per i blocchi di codice tramite:

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

Questo perché per impostazione predefinita Org Babel abilita solo il supporto per i blocchi di codice Emacs Lisp (come spiegato qui ).


Grazie per la obcosa, ho avuto altri due problemi 1: c'è qualcuno built-in shortcutper inserire la coppia di BEGIN_EXAMPLE, come <s then TABinserire l' BEGIN_EXAMPLEoltre per definire uno snippet yasnippet? 2: Ho ricevuto org-html-handle-links: Wrong type argument: stringp, nilun messaggio di errore dopo aver modificato il BEGIN_EXAMPLEma niente di più, ci deve essere qualcosa di sbagliato nel collegamento nel mio file organizzativo, ce ne sono molti, come posso fare org-exportper mostrare più dettagli come il numero di riga che è sbagliato quando l'esportazione non è riuscita ??
— CodyChan,

Rispondere alla tua prima domanda: Sì, c'è, è <eseguito da TAB. Vedi Modelli semplici per un elenco completo.
— È il

Per quanto riguarda la tua seconda domanda: non sono sicuro di sapere cosa intendi. Quali collegamenti? Non ci sono collegamenti nel tuo esempio originale. Come consiglio generale, prova prima a fare un esempio minimo. Metti il EXAMPLEblocco come mostrato nella mia risposta in un nuovo file da solo. Non aggiungere altro. Quindi prova a esportarlo e guarda cosa succede. Se funziona, aggiungi gradualmente più cose e continua ad esportare mentre lo fai. Se si verifica un errore ad un certo punto, si saprà che è stata causata dall'ultima aggiunta (o modifica) effettuata.
— itsjeyd

Il problema del mio post originale è risolto da BEGIN_EXAMPLE. L'errore BEGIN_EXAMPLE si trova da org-exportsolo, quindi so che è il problema BEGIN_SRC, ma ci sono molti più nel mio file originale, dopo org-export, viene visualizzato solo il org-html-handle-links: Wrong type argument: stringp, nilmessaggio di errore e non so dove si trova la posizione esatta.
— CodyChan,

@CodyChan non sto seguendo. Se vuoi che dia un'occhiata al contenuto del file che stai tentando di esportare, aggiungilo alla tua domanda (puoi rimuoverlo più tardi).
— giovedì
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.