Perché Org-Mode ti cambierà la vita

Leonardo Tamiano

Created: 2021-12-25 sab 02:05

Che Cos'è Org-mode?

Org-mode può essere visto da due punti di vista diversi:

  1. Come markup language.
  2. Come major-mode in Emacs.

I file .org sono plaintext files che possono essere processati in modo dinamico tramite Emacs.

Plaintext

Org-mode (in emacs)

Detto questo, non è necessario utilizzare Emacs per scrivere/leggere i files in org-mode. Esistono anche supporti in altri tools/librerie, come ad esempio in python.

# This function takes a node of an org-file
# and returns the content of all the headings
# in the org file as a formatted string.
def create_toc_body(node, depth):
    if len(node.children) == 0:
        return ""

    res = ""
    spaces = " " * depth * 2
    for child in node.children:
        # remove bold characters *
        heading = child.get_heading().replace("*", "")
        res = res + spaces + "- " + heading + "\n"
        res = res + create_toc_body(child, depth+1)
    return res

Source: orgparse

La particolare sintassi utilizzata è detta Org-Mode Markup Language, e rappresenta la parte più importante di org-mode.

* This Is A Heading
** This Is A Sub-Heading
*** And A Sub-Sub-Heading
    Paragraphs are separated by at least one empty line.
    
    *bold* /italic/ _underlined_ +strikethrough+ =monospaced=
    [[http://Karl-Voit.at][Link description]]
    http://Karl-Voit.at → link without description

    - list item
      - sub-item
	1. also enumerated
    - [ ] yet to be done
    - [X] item which is done

    : Simple pre-formatted text such as for source code.

Source: karl-voit - Org Mode Is One of the Most Reasonable Markup Languages to Use for Text

Storia

Org-mode nasce nel 2003 da Carsten Dominik.

Source: Carsten Dominik blog

Dalle parole di Dominik:

Org was born in 2003, out of frustration over the user interface of the Emacs Outline mode. I was trying to organize my notes and projects, and using Emacs seemed to be the natural way to go […]

Source: orgmode manual

[…] Visibility cycling and structure editing were originally implemented in the package ‘outline-magic.el’, but quickly moved to the more general ‘org.el’ […]

Source: orgmode manual

[…] These areas highlighted the two main goals that Org still has today: to be a new, outline-based, plain text mode with innovative and intuitive editing features, and to incorporate project planning functionality directly into a notes file.

Source: orgmode manual

A partire del 2006 org-mode è strato introdotto come major-mode all'interno di Emacs.

Bastien Guerry è il maintainer corrente di org-mode.

Use Cases Generali

Org-mode può essere principalmente utilizzato per:

  • Document outlining.
  • Personal Information Management (PIM).
  • Literate Programming.
  • Publishing/Exporting tool.

Ma questo è solo l'inizio. Sono tanti gli altri possibili use-cases per org-mode…

Document Outlining

Tramite le headlines siamo in grado di

  • strutturare un testo di qualsiasi natura.
  • visualizzare in modo dinamico la parte del testo a cui siamo interessati.
  • modificare in modo dinamico la struttura delle varie headlines.

Utilizzo dinamico delle headlines in org-mode

Personal Information Management

La semplicità e flessibilità di org-mode permettono di gestire:

  • TODOs/appuntamenti (org-agenda).
  • Contatti.
  • Appunti per progetti.
  • Basi di conoscenza. (org-brain, org-roam)

e in generale tutti i task che necessitano di prendere appunti.

org-agenda

Per settare i file da cui prendere i dati bisogna eseguire il seguente codice elisp

(setq org-agenda-files (list "~/agenda.org"
                             "~/work.org"))

Una volta fatto questo possiamo editare il file agenda.org aggiungendo vari TODOs, a seconda dei nostri impegni.

Per avere una overview di tutti i nostri impegni (presenti anche in vari files), possiamo eseguire il comando (org-agenda).

contacts

Ciascuna headline può contenere vari attributi, che possono essere utilizzati, ad esempio, per memorizzare le informazioni dei contatti.

knowledge bases

Uno degli utilizzi più complessi di org-mode riguarda la creazione di basi di conoscenza personali.

Literate Programming

Tramite la componente org-babel di org-mode si è in grado di inserire del codice eseguibile in mezzo a del testo normale.

Sono vari i linguaggi supportati da org-babel.

Publishing/Exporting Tool

I file org-mode possono poi essere esportati in altri formati. Tra i formati di esportazione troviamo:

  • HTML.
  • LaTeX (.tex, .pdf).
  • Markdown.
  • iCalendar.
  • Plaintext.

il comando per fare questo è

(org-export-dispatch)

bindato al keybind C-c C-e.

Ad esempio,

file .org

\[\longrightarrow\]

file .html

Questa stessa presentazione è stata ottenuta esportando un file .org tramite il pacchetto ox-reveal.

\[\longrightarrow\]

Use Cases Personali

Personalmente utilizzo org-mode per un sacco di cose. Tra queste le più importanti attualmente sono:

  • Note libri.
  • Note università.
  • Gestione blog.
  • Presentazioni.
  • Appunti macchine HTB.
  • Gestione video YT.

Knowledge base

University Notes

Per ogni materia che studio ho uno o più files .org.

Il file principale di ogni materia contiene i puntatori ai files che contengono gli appunti delle lezioni.

In singoli file vengono poi esportati in formato .html per poterli condividere e per poter leggere meglio le formule matematiche tramite il pacchetto ox-twbs.

Source: leonardotamiano.xyz

Books

Durante la lettura ogni tanto mi segno degli appunti in un file .org appropriato.

Blog

La parte principale del mio blog la gestisco tramite un singolo file .org tramite il pacchetto ox-hugo.

Presentations

Le presentazioni le scrivo tutte in file .org e le esporto in .html tramite il pacchetto ox-reveal.

Youtube

Per gestire i vari video del canale ho un file .org apposito

Hack The Box

Per gestire gli appunti delle varie macchine su Hack The Box ho vari .org files.

Main org-file

Org-file per macchina

The Org-Mode Markup Language

Gli elementi principali che formano la org-mode markup language sono molto semplici, e possono essere visualizzati a seguire

* This Is A Heading
** This Is A Sub-Heading
*** And A Sub-Sub-Heading
    Paragraphs are separated by at least one empty line.
    
    *bold* /italic/ _underlined_ +strikethrough+ =monospaced=
    [[http://Karl-Voit.at][Link description]]
    http://Karl-Voit.at → link without description

    - list item
      - sub-item
	1. also enumerated
    - [ ] yet to be done
    - [X] item which is done

    : Simple pre-formatted text such as for source code.

Source: karl-voit - Org Mode Is One of the Most Reasonable Markup Languages to Use for Text

Riferimenti