Bloques de código en Org mode

El principio de la programación literaria

Tal como explica John D. Cook en un artículo sobre programación literaria (lo vemos en otro momento), Orgmode permite manejar distintos y variados bloques de texto en un documento de texto, y estos bloques pueden ser incluso bloques de código.

Con cualquiera de estos bloques se pueden hacer cosas, como por ejemplo, si se tratan de código, ejecutar volcar los resultados al documento de texto, ya sea luego exportado a HTML o PDF, y mostrar a la vez el código y el resultado de ejecutar el código.

Nombrando los bloques de código, podemos referenciarlos para operaciones posteriores.

(Para una lectura sobre programación lteraria e investigación reproducible, recomiendo el artículo A Multi-Language Computing Environment for Literate Programming and Reproducible Research.)

Insertar bloques de código

Para insertar un elemento estructural, se escribe el carácter < seguido de un selector de plantillas de bloques de código que activamos con el tabulador . Estas son las opciones que aparecen:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
s 	#+BEGIN_SRC ... #+END_SRC
e 	#+BEGIN_EXAMPLE ... #+END_EXAMPLE
q 	#+BEGIN_QUOTE ... #+END_QUOTE
v 	#+BEGIN_VERSE ... #+END_VERSE
c 	#+BEGIN_CENTER ... #+END_CENTER
l 	#+BEGIN_LaTeX ... #+END_LaTeX
L 	#+LaTeX:
h 	#+BEGIN_HTML ... #+END_HTML
H 	#+HTML:
a 	#+BEGIN_ASCII ... #+END_ASCII
A 	#+ASCII:
i 	#+INDEX: line
I 	#+INCLUDE: line

Por ejemplo, si se escribe <h se expande un bloque de código HTML:

1
2
3
#+BEGIN_HTML
<p>Hola, Mundo!!!</p>
#+END_HTML

En cambio, si hubiéramos tecleado <H , habríamos encontrado una línea donde escribir HTML dentro del documento Orgmode:

1
2

#+HTML: <div id="ejemplo"><p>Hola, Mundo</p></div>

O bien se puede ejecutar bash:

1
echo "hola, mundo"

Perl:

1
2
3
4
sub my_func {
	print "Hello, world!\n";
}
print my_func;

O cualquier otro lenguaje, mientras lo tengamos configurado correctamente con Babel.

Añadir lenguajes

Este es un ejemplo de configuración de Babel en el archivo que corresponda:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
(org-babel-do-load-languages
 'org-babel-load-languages
  '( (perl . t)
     (ruby . t)
     (sh . t)
     (python . t)
     (emacs-lisp . t)
     (sqlite . t)
     (R . t)
   ))

Donde hemos configurado perl, ruby, bash, python, emacs-lisp, sqlite y R.

Para añadir lenguajes, hay que instalar su correspondiente conector.

Añadir templates

Una vez que te acostumbras a insertar los bloques de código, encuentras de utilidad personalizarlos o añadir otros.

Con la variable org-structure-template-alist se pueden añadir atajos para la inserción de bloques de código. Por ejemplo, así se añaden bloques de código emacs-lisp con el atajo <el

1
2
(add-to-list 'org-structure-template-alist
	     '("el" "#+BEGIN_SRC emacs-lisp\n?\n#+END_SRC" "<src lang=\"emacs-lisp\">\n?\n</src>"))
Adolfo Antón Bravo
Adolfo Antón Bravo
Coordinador del Máster de Periodismo y Visualización de Datos de la Universidad de Alcalá

Periodismo y visualización de datos, web semántica, bash, emacs, orgmode

Relacionado