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 jekyll, 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 aún 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 artículo en un fichero org y lo exportas a html.
Instalación
Si utilizas use-package añade a tu fichero init.el
(use-package org-static-blog
:ensure t
: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 configuración para este blog que tengo en mi fichero init.el
(use-package org-static-blog
:ensure t
:init
(setq org-static-blog-publish-title "el blog de lázaro"
org-static-blog-publish-url "https://elblogdelazaro.org/"
org-static-blog-publish-directory "~/Documentos/proyectos/elblogdelazaro.gitlab.io/public/"
org-static-blog-posts-directory "~/Documentos/proyectos/elblogdelazaro.gitlab.io/posts"
org-static-blog-drafts-directory "~/Documentos/proyectos/elblogdelazaro.gitlab.io/drafts"
org-static-blog-rss-file "index.xml"
org-static-blog-langcode "es"
org-export-with-toc nil
org-static-blog-enable-tags t
org-export-with-section-numbers nil
org-static-blog-preview-ellipsis "(ver más..)"
org-static-blog-preview-link-p t
org-static-blog-preview-convert-titles nil
org-static-blog-use-preview t)
;; This header is inserted into the <head> section of every page:
;; (you will need to create the style sheet at
;; ~/projects/blog/static/style.css
;; and the favicon at
;; ~/projects/blog/static/favicon.ico)
(setq org-static-blog-page-header
"<meta name=\"author\" content=\"Carlos M.\">
<meta name=\"viewport\" content=\"initial-scale=1,width=device-width,minimum-scale=1\">
<link href= \"static/style.css\" rel=\"stylesheet\" type=\"text/css\" />
<link rel=\"icon\" href=\"static/favicon.ico\">")
;; This preamble is inserted at the beginning of the <body> of every page:
;; This particular HTML creates a ")
;; This postamble is inserted at the end of the <body> of every page:
;; This particular HTML creates a <br>
<a><a rel=\"licencia\" href=\"http://creativecommons.org/licenses/by-nc/4.0/\">\
</a>
@2017 <a rel=\"https://elblogdelazaro.org\" href=\"https://elblogdelazaro.org\">el blog de lázaro</a>
está generado con <a rel=\"org-static-blog\" href=\"https://github.com/bastibe/org-static-blog/\"> \
org-static-blog</a>
en <a rel=\"Emacs\" href=\"https://savannah.nongnu.org/projects/emacs-wiki\">emacs.</center>"))
;;
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 necesitarás 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 com
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 páginas archivo y categoría.
Dejo la antigua modificación por si en un futuro me vuelve a ser útil
(defun org-static-blog-get-post-summary (post-filename)
"Assemble post summary for an archive page.
This function is called for every post on the archive and
tags-archive page. Modify this function if you want to change an
archive headline."
(concat
""
"<h2 class=\"post-title-summary\">"
"<a href=\"" (org-static-blog-get-post-url post-filename) "\">" (org-static-blog-get-title post-filename) "</a>"
"</h2>\n"))
Crear un artículo
Artículo
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 título del artículo a publicar y el nombre del fichero .org, nos creará un fichero .org para completar el artículo.
#+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 artículo 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 artículo
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, verás que es muy sencillo modificarlo para personalizar aún 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 creada
- 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 - En Gitlab puedes programar la ejecución de trabajos mediante un cron que junto con la posibilidad que ofrece Hugo de que no se públicon los artículos futuros, me permitía programar la publicación de artículos, podía subir a Gitlab un artículo el lunes y se publicaba automáticamente el viernes.
- 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.
Por último 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 aún continuo aprendiendo.
Espero que te haya gustado, pasa un buen día.