Esempio di template org-capture per creare post in Hugo

Esempio di template org-capture per creare post in Hugo

Org Capture, tutto a portata di mano

Una delle funzionalità di Emacs che personalmente ritengo tra le più utili la si trova nel pacchetto Org Mode ed è la possibilità di gestire note, appunti, diari ed altri documenti con Org Capture.

Tramite dei buffer dedicati e grazie all’uso di template creati ad hoc si precompila un template contenente una parte del testo che poi dovrà essere completato con le informazioni desiderate di volta in volta.

Buffer? Template? Compilare? …ma cosa vuol dire tutto questo in termini pratici? Purtroppo Emacs porta con se una nomenclatura piuttosto obsoleta, ad esempio con il termine Buffer si indica normalmene un’area del programma dove si può scrivere del testo che poi, volendo, può essere memorizzato in un file.

Facciamo un esempio pratico: ipotizziamo che voglio aggiungere una nuova nota nel file che contiene tutti gli appunti. Mentre sto lavorando con Emacs mi basta richiamare Org Capture tramite una scorciatoia da tastiera e, nel buffer che si apre, selezionare l’opzione per creare una nota ed infine si può inserire il titolo ed il testo. Salvando il buffer (normalmente con C-c C-c) si aggiorna in automatico il file delle note.

Questo meccanismo mi permette di non dover uscire da Emacs per scrivere le note, in pochi istanti e con poco sforzo creo la nota.

Org Capture ed ox-hugo

Allo stesso modo è possibile creare un nuovo post per un blog gestito tramite Hugo / ox-hugo grazie ad un template dedicato che inserisce un nuovo post nel file di gestione dei contenuti del blog pre-compilando tutte le proprietà che sono state definite.

Nel caso di questo blog il template di cattura di nuovi post, aggiunto nel file di configurazione di Emacs, è stato creato a partire dall’esempio ufficiale presente nella documentazione di ox-hugo, con alcune modifiche:

(with-eval-after-load 'org-capture
  (defun org-hugo-new-subtree-post-capture-template ()
    (let* (
           (date (format-time-string (org-time-stamp-format :long :inactive) (org-current-time)))
           (title (read-from-minibuffer "Post Title: "))
           (fname (org-hugo-slug title)))
      (mapconcat #'identity
                 `(
                   ,(concat "* TODO " title)
                   ":PROPERTIES:"
                   ,(concat ":EXPORT_HUGO_BUNDLE: " fname)
                   ,(concat ":EXPORT_FILE_NAME: index")
                   ,(concat ":EXPORT_HUGO_CUSTOM_FRONT_MATTER:  :post_subtitle \"\"")
                   ,(concat ":EXPORT_HUGO_CUSTOM_FRONT_MATTER+: :description \"\"")
                   ,(concat ":EXPORT_HUGO_CUSTOM_FRONT_MATTER+: :summary \"\"")
                   ,(concat ":EXPORT_HUGO_CUSTOM_FRONT_MATTER+: :featured_image \"\"")
                   ,(concat ":EXPORT_HUGO_CUSTOM_FRONT_MATTER+: :featured_image_caption \"\"")
                   ,(concat ":EXPORT_HUGO_CUSTOM_FRONT_MATTER+: :featured_image_credits \"\"")
                   ,(concat ":EXPORT_HUGO_CUSTOM_FRONT_MATTER+: :type \"blog\"")
                   ,(concat ":EXPORT_OPTIONS: :toc:1")
                   ":END:"
                   "%?\n")
                 "\n")))

  (add-to-list 'org-capture-templates
               '("h"                ;`org-capture' binding + h
                 "Hugo post"
                 entry
                 (file+olp "blog.org" "Idee per Articoli")
                 (function org-hugo-new-subtree-post-capture-template))))

Questo template richiede il titolo del post, dal quale genera il percorso della pagina, e poi genera una serie di Custom Front Matter che gestisco dal tema Hugo. Inoltre abilita di default la generazione del “Table of Contents”, ovvero dell’indice che viene aggiunto all’inizio del post in automatico.

Per maggiori informazioni su questo metodo si può consultare la documentazione ufficiale:

Leonardo Finetti

Leonardo Finetti
Si occupa di informatica dalla metà degli anni novanta principalmente in ambito web con tecnologie Open Source. Esperto di Drupal e di SEO offre consulenze in tali ambiti e nel tempo libero si diletta scrivendo articoli di informatica ed anche di design, ergonomia, usabilità e sicurezza.