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.