TL; DR: l'utilizzo di una libreria persistente di babele memorizzata in un file può essere una semplice configurazione in 3 passaggi:
- Crea un
org
file -mode ~/.emacs.d/library-of-babel.org
.
- Aggiungi una linea
(org-babel-lob-ingest "~/.emacs.d/library-of-babel.org")
al tuo Conf Emacs.
- Raccogli utili funzioni in quel file, verranno lette all'avvio di emacs.
Il file Library-Of-Babel è dove ad esempio il aggregatebycol1
blocco da @mutbuerger verrebbe salvato.
Un altro semplice esempio di utilizzo sarebbe il blocco di codice, che genera i dati della tabella con una riga di intestazione, ma non contrassegna l'intestazione con un 'hline
. Questo non è tragico per una semplice visualizzazione, ma può rendere più coinvolta un'ulteriore elaborazione automatizzata. La soluzione qui potrebbe essere l'utilizzo di un piccolo blocco di codice per la post-elaborazione da qualche parte su Internet:
#+name: addhdr
#+begin_src emacs-lisp :var tbl=""
(cons (car tbl) (cons 'hline (cdr tbl)))
#+end_src
Questo semplicemente eseguirà il pipe dei dati mentre si giunge in 'hline
una seconda riga.
Per utilizzare questo blocco in un secondo momento in altri file organizzativi, è sufficiente aggiungere una :post
stanza di elaborazione al blocco sorgente dell'organizzazione che genera dati:
#+NAME: Example
#+BEGIN_SRC elisp :post addhdr(*this*)
'(("Header1" "Column2" "Three")("R1C1V" "2" "C3R1")("4" "5" "6"))
#+END_SRC
#+RESULTS: Example
| Header1 | Column2 | Three |
|---------+---------+-------|
| R1C1V | 2 | C3R1 |
| 4 | 5 | 6 |
È inoltre possibile assegnare facilmente tabelle preesistenti alle funzioni nel proprio LOB:
#+NAME: ExData
| h1 | h2 |
| dh1r1 | dh2r1 |
| dh1r2 | dh2r2 |
#+CALL: addhdr(ExData)
Nella mia biblioteca ho capitoli per organizzare diversi tipi di funzionalità: generazione dei dati, filtro, PrettyPrinting, ... Ricordati di ingest
nuovo dopo aver aggiunto nuovi blocchi.
org-babel-library-of-babel
. Durante la ricerca di blocchi di origine, org-babel cerca il file corrente e l'elenco memorizzato nella variabile sopra. La risposta di @mutbuerger descrive molto bene i dettagli, penso.