Cambio de Hugo a org-static-blog

10 minutos de lectura

Si, ya sé lo que estas pensando “otro cambio de look en el blog”, pero sinceramente no termino de encontrar un tema o método de publicación que termine de llenarme, a parte de que soy de culo inquieto y siempre ando probando cosas nuevas. He pasado por jekyl, org-page, bash-blog, Hugo y sus respectivos temas, y aunque Emacs y org-mode se integran perfectamente gracias a ox-hugo, no terminaba de convencerme.

Fue a raíz de leer este artículo en el blog de Notxor, lo que ha hecho que me decida ha cambiar la forma de publicar el blog y a su vez de diseño..

Puesto que utilizo constantemente org-mode para organizarme, buscaba una forma sencilla y basada en org-mode para publicar el blog. Hasta ahora lo he ido haciendo con ox-hugo, pero es que org-static-blog genera una sitio sencillo, no usa JavaScript, además tiene feed configurable para RSS (esto aun lo tengo que mirar mas despacio) y sobre todo es muy sencillo de comprender aunque no tengas conocimientos en Lisp.

Como digo su funcionamiento es muy sencillo, creas el articulo en un fichero org y lo exportas a html.

Instalación

Si utilizas use-package añade a tu fichero init.el

1(use-package org-static-blog
2  :ensure t
3  :init)

O bien desde el repositorio melpa con el comando

M-x package-install <RET> org-static-blog <RET>

Configuración

Notxor modifica el fichero org-static-blog.el aunque puedes añadir las funciones a tu fichero init.el, además en el propio sitio de org-static-blog dispones de un pequeño ejemplo con una configuración mínima para empezar

Disponemos de tres bloques a configurar:

Cabecera HTML

El contenido de org-static-blog-page-header se inserta en el <head> de cada página. Usaremos esta función para incluir el CSS y/o JavaScript personalizados para el blog.

Encabezamiento de cada página

org-static-blog-page-premble, se inserta justo antes del contenido de cada página, podemos colocar el encabezado o los menús del blog.

El pie de página

El contenido de org-static-blog-page-postamble se inserta después del contenido de cada página generada, después de cualquier página de publicación de blog, después de la página de índice, las páginas de etiquetas y el archivo. Aquí podemos incluir el tipo de licencia del blog.

Ejemplos de configuración

Por si te sirve de guia esta es la configuracion para este blog que tengo en mi fichero init.el

 1(use-package org-static-blog
 2  :ensure t
 3  :init
 4  (setq org-static-blog-publish-title "el blog de lázaro"
 5	org-static-blog-publish-url "https://elblogdelazaro.org/"
 6	org-static-blog-publish-directory "~/Documentos/proyectos/elblogdelazaro.gitlab.io/public/"
 7	org-static-blog-posts-directory "~/Documentos/proyectos/elblogdelazaro.gitlab.io/posts"
 8	org-static-blog-drafts-directory "~/Documentos/proyectos/elblogdelazaro.gitlab.io/drafts"
 9	org-static-blog-rss-file "index.xml"
10	org-static-blog-langcode "es"
11	org-export-with-toc nil
12	org-static-blog-enable-tags t
13	org-export-with-section-numbers nil
14	org-static-blog-preview-ellipsis "(ver más..)"
15	org-static-blog-preview-link-p t
16	org-static-blog-preview-convert-titles nil
17	org-static-blog-use-preview t)
18
19  ;; This header is inserted into the <head> section of every page:
20  ;;   (you will need to create the style sheet at
21  ;;    ~/projects/blog/static/style.css
22  ;;    and the favicon at
23  ;;    ~/projects/blog/static/favicon.ico)
24  (setq org-static-blog-page-header
25	"<meta name=\"author\" content=\"Carlos M.\">
26	<meta name=\"viewport\" content=\"initial-scale=1,width=device-width,minimum-scale=1\">
27	<link href= \"static/style.css\" rel=\"stylesheet\" type=\"text/css\" />
28	<link rel=\"icon\" href=\"static/favicon.ico\">")
29
30  ;; This preamble is inserted at the beginning of the <body> of every page:
31  ;;   This particular HTML creates a <div> with a simple linked headline
32
33  (setq org-static-blog-page-preamble
34  "<div class=\"header\">
35	<a href=\"https://elblogdelazaro.org\">el blog de lázaro</a>
36   </div>")
37
38  ;; This postamble is inserted at the end of the <body> of every page:
39  ;;   This particular HTML creates a <div> with a link to the archive page
40  ;;   and a licensing stub.
41  (setq org-static-blog-page-postamble
42	"<center>
43	      <div style=\"text-align: center;\">
44		:<a href=\"mailto:hefistion.arroba.mail.com\">email</a>:<a href=\"https://gitlab.com/hefistion\">gitlab</a>:<a href=\"https://twitter.com/ElBlogDeLazaro\">twitter</a>:</a><a href=\"https://elblogdelazaro.org/index.xml\">rss</a>:
45	      </div><br>
46
47	 <a><a rel=\"licencia\" href=\"http://creativecommons.org/licenses/by-nc/4.0/\"><img alt=\"Licencia de Creative Commons\" style=\"border-width:0\" src=\"static/CC40.png\"/></a>
48	@2017 <a rel=\"https://elblogdelazaro.org\" href=\"https://elblogdelazaro.org\">el blog de lázaro</a>
49	está generado con <a rel=\"org-static-blog\" href=\"https://github.com/bastibe/org-static-blog/\"> org-static-blog</a>
50	en <a rel=\"Emacs\" href=\"https://www.gnu.org/software/emacs/\">emacs.</center>"))
51;;

También Notxor ha publicado su configuración así como su fichero css, al que le tengo que dar las gracias ya que he cogido prestadas algunas “/cosas” , finalmente he utilizado el mismo que https://zngguvnf.org

https://codeberg.org/Notxor/org-static-blog

También necesitaras un fichero css, yo he realizado unas pequeñas modificaciones al que tiene Bastian Bechtold https://zngguvnf.org en su repositorio https://github.com/bastibe/bastibe.github.com pero si estás interesado en el mio puedes mandarme un correo a hefistion arroba gmail punto com1

Mi modificación del fichero org-static-blog.el

Esta modificación se la he cogido prestada a Notxor, crea dos nuevas clase para el css (post-date-summary y post-title-summary) que permite cambiar el espaciado y tamaño de la fuente de la fecha y encabezados h2 para las paginas archivo y categoría.

Dejo la antigua modificación por si en un futuro me vuelve a ser útil

 1(defun org-static-blog-get-post-summary (post-filename)
 2  "Assemble post summary for an archive page.
 3This function is called for every post on the archive and
 4tags-archive page. Modify this function if you want to change an
 5archive headline."
 6  (concat
 7   "<div class=\"post-date-summary\">"
 8   (format-time-string (org-static-blog-gettext 'date-format) (org-static-blog-get-date post-filename))
 9   "</div>"
10   "<h2 class=\"post-title-summary\">"
11   "<a href=\"" (org-static-blog-get-post-url post-filename) "\">" (org-static-blog-get-title post-filename) "</a>"
12   "</h2>\n"))

Al cambiar al nuevo .css de https://zngguvnf.org ya no necesitaba realizar cambios el aspecto de la fecha y emcabezados.

Crear un artículo

Articulo

Podemos crear un fichero .org en la carpeta posts o en la que hayas configurado en org-static-blog-posts-directory, el fichero ha de contener un #+TITLE y un #+DATE, y si vamos a utilizar etiquetas para crear categorías añadiremos #+FILETAGS. y habilitar org-static-blog-enable-tags a t

También podemos utilizar M-x org-static-blog-create-new-post, para crear el fichero .org, nos preguntará por el titulo del articulo a publicar y el nombre del fichero .org, nos creará un fichero .org para completar el articulo.

#+title: Cambio a org-static-blog
#+date: <2021-01-05 22:23>
#+filetags: emacs orgmode
 * Instalación
 * Configuración
 ** Cabecera HTML

Borrador

Tenemos la posibilidad de ir creando borradores creando ficheros .org en la carpeta que hemos declarado como drafts o llamando al comando org-static-blog-create-new-draft

Cuando generemos el blog con el comando org-static-blog-publish los borradores generan sus respectivos html en la carpeta draft pero no se incluyen en el índice, el archivo o en la fuente RSS.

Publicar un artículo

Cuando hemos terminado de editar nuestro fichero .org o con el borrador (lo moveremos a la carpeta posts) para generar el fichero html usaremos M-x org-static-blog-publish este comando además del índice, genera el feed para el archivo RSS, etiquetas, etc..

Como bien escribe Noxtor podemos visualizar el borrador o articulo antes de publicarlo lanzando un servidor local con M-x httpd-start si no quieres salir de Emacs o desde una terminal ejecutando python3 -m http.server 8080, abres el navegador y lo pruebas.

Modificar un articulo

Puede darse el caso de que necesitemos modificar un sólo artículo, para ello usaremos M-x org-static-blog-publish-file fichero.org

Si lo prefieres puedes modificar directamente el fichero htmk generado mediante M-x org-static-blog-open-matching-publish-file

Básicamente este es todo lo que necesitas saber para empezar a publicar un blog desde Emacs con org-static-blog, su funcionamiento es verdaderamente sencillo , es mas, si le echas un vistazo al fichero org-static-blog.el, veras que es muy sencillo modificarlo para personalizar aun mas la salida del fichero html generado.

Pros y contras

En lo que a mi me afecta a la forma de publicar en el blog respecto a Hugo encuentro:

Pros

  • Sencillez de publicación y configuración.
  • Código mucho mas limpio
  • Sitio sencillo y fácil de entender, con Hugo me limitaba a utilizar un tema y rellenar el fichero de configuración del tema, sin llegar entender del todo como estaba creada2
  • Blog verdaderamente minimalista.
  • Totalmente integrado en mi flujo de trabajo de org-mode

Contras

  • Pierdo el tener todo el blog en un solo archivo org 3
  • En Gitlab puedes programar la ejecución de trabajos mediante un cron que junto con la posibilidad que ofrece Hugo de que no se publican los artículos futuros, me permitía programar la publicación de artículos, podía subir a Gitlab un articulo el lunes y se publicaba automáticamente el viernes.4
  • El blog es menos adaptativo a los dispositivos móviles, pero eso también es culpa mía y mi poco conocimiento sobre css

Disculpas y agradecimientos

He procurado mantener todos los enlaces y todas las referencias de los artículos pero es posible que alguna se me haya escapado, si lo encuentras por favor házmelo saber, también es posible que debido al cambio las referencias a las antiguas entradas en las redes sociales y enlaces parecidos no funcionen como es debido, sobre todos con la hoja de estilos.5

Por ultimo dar las gracias a Bastian Bechtold y https://zngguvnf.org por su trabajo y a Notxor por su mágnífico blog, un referente para mi aprendizaje sobre Emacs y org-mode y del cual aun continuo aprendiendo.

Espero que te haya gustado, pasa un buen día.


  1. Puedes encontrar el css de Bastian Bechtold en https://github.com/bastibe/bastibe.github.com/tree/master/static ↩︎

  2. Aquí la culpa es mía y mi falta de tiempo ↩︎

  3. Aunque realmente no es así, mantengo todos los artículos en un solo org y luego esporteo el que voy a publicar. ↩︎

  4. Esto también tiene solucion mediante un script y cron ↩︎

  5. Para visualizar correctamente la página haz clic en el titulo del artículo ↩︎