Emacs: Exportando bloques de código

2023-03-13

Muchas veces cuando escribo un articulo para el blog, hago referencia a comandos o contenido de ficheros del sistema.

Una manera fácil de obtener el resultado de esos comandos o ficheros para crear el articulo es ejecutar el código en una ventana de la terminal, copiar y pegar la salida al fichero õrg, pero gracias a una de las muchas cualidades de orgmode, podemos utilizar Babel para ejecutar bloques de código y exportarlo a un archivo.

Configurando Babel

A partir de Org 7.0, Babel se incluye como parte de Org, simplemente en nuestro fichero de configuración tenemos que activar los idiomas que deseamos usar con Babel.

El siguiente código en el archivo de configuración de Emacs activa los lenguajes lisp, python y la sheell del sistema.

(org-babel-do-load-languages
 'org-babel-load-languages
 '((lisp . t)
   (python . t)
   (shell . t)
   ))

Babel soporta multitud de lenguajes de programación, puedes echarles un ojo en https://orgmode.org/worg/org-contrib/babel/languages/index.html#configure

Definiendo bloques de código

Empecemos con un ejemplo simple, vamos evaluar la salida del comando del sistema tree -L 1, para ello podemos hacer uso de las plantillas predefinidas, teclea M x org-insert-structure-templatee o C-c C-, y selecciona s shell,

Automáticamente nos crea la estructura del bloque #+begin_src shell y #+end_src, añadimos :results output code a la cabecera y ponemos el código a evaluar dentro de esta estructura

#+begin_src shell :results output code
tree -L 1
#+end_src

Ejecutando bloques de código

Si pulsas C-c C-c sobre la linea #+begin_src shell o dentro del bloque, se ejecutará el código y el resultado se insertará en el fichero org

tree -L 1
#+begin_src shell
.
├── archetypes
├── blog.org
├── config.toml
├── content
├── data
├── layouts
├── public
├── resources
├── static
└── themes

9 directories, 2 files
#+end_src

output muestra el resultado impreso en stdout (normamalmete la pantalla) durante la ejecución del código de ese bloque.

code muestra el resultado encerrado en un bloque de código.

Exportando bloques de código

Como lo que quiero es poder exportar el código y el resultado a mi fichero markdown cuando hago uso de ox-hugo, utilizo el parámetro :exports

El argumento :exports especifica si esa parte del archivo se exporta

both exporta tanto el código como los resultados de la evaluación

El siguiente código en el fichero org

#+begin_src shell :results output code  :exports both
tree -L 1
#+end_src

Cuando procedemos a exportarlo, C-c C-e, nos pregunta si queremos evaluar el bloque de código, podemos contestar n si ya lo habíamos ejecutado.

Produce este resultado al ser exportado en ox-hugo

tree -L 1
.
├── archetypes
├── blog.org
├── config.toml
├── content
├── data
├── layouts
├── public
├── resources
├── static
└── themes

9 directories, 2 files

ejemplos con otros lenguajes

#+begin_src python :results output code :exports both
for i in range(2, 5):
    print(i)
#+end_src

#+RESULTS:
#+begin_src python
2
3
4
#+end_src

Resultado del bloque de código exportado

for i in range(2, 5):
    print(i)
2
3
4

Espero que te haya gustado, pasa un gran día 🐧

Referencia

https://orgmode.org/manual/Exporting-Code-Blocks.html

Ingrese la dirección de su instancia


Más publicaciones como esta

Org-Mode: Mi Flujo de trabajo

2019-12-09 | #emacs #org-mode

Ya has podido leer varios artículos sobre mi configuración y forma de trabajar con org-mode, en el articulo de hoy voy a explicarte como es mi flujo de trabajo con org-mode Utilizo dos ficheros org, uno llamado personal.org y otro llamado trabajo.org de esta forma separo los personal de lo profesional. Normalmente inicio todas mis tareas, notas, citas, etc., mediante plantillas de org-capture que inicio con la combinación de teclas C-c c

Continuar leyendo 


Añadiendo un enlace en el menú social para el tema Minimo

2019-12-23 | #hugo

Despuós de buscar un tema para Hugo que me gustara para el blog, por fin me decidí por Minimo pero carece de enlaces a Mastodon o para el RSS del blog. Una pequeña búsqueda por Internet encontró un magnifico articulo de como realizarlo, aunque con una pequeña modificación para que funcione. Añadiendo el icono svg. El autor del articulo creó el fichero svg y extrajo los paths, así que simplemente, con un fichero de textos, edita e inserta el código en themes/minimo/layouts/partials/svg/icons.

Continuar leyendo 