ghpreview – Gema Ruby para previsualizar archivos Markdown con el estilo de GitHub
La gema ghpreview es una herramienta que te permite previsualizar un archivo Markdown localmente con el estilo de GitHub:
Cuando escribes el README para tu proyecto, quieres poder previsualizar el Markdown localmente antes de madnarlo a GitHub. ghpreview es una utilidad de línea de comando que abre tu archivo Markdown en un navegador web. Usa el estilo de GitHub y (opcionalmente) actualiza automáticamente cada vez que guardes el archivo fuente.
Corría el año 2012 y estaba trabajando en Neo (antes conocida como “New Context”), una empresa multinacional que había adquirido Cubox, empresa uruguaya donde estaba trabajando. Neo también había adquirido EdgeCase, otra empresa culturalmente bastante similar a Cubox con oficinas en Ohio y Edimburgo.
En algún momento Adam McCrea, programador en una de las oficinas de Ohio, compartió su nuevo proyecto de código abierto: ghpreview. Me resultó bastante útil, una buena manera de asegurarse de tener el formato correcto en los README de un proyecto antes de subirlo a GitHub. Así que fui a instalarla para probarla.
La gema no funcionaba en mi computadora con GNU/Linux en ese momento. Así que fui a mirar el código fuente para ver qué estaba pasando. Encontré que una vez que el archivo markdown era procesado, usaba el comando `open` para ver el HTML resultante en un navegador web. El comando open de Mac OS X abre archivos y directorios con la aplicación establecida por defecto. Para que funcionara en mi sistema, tenía que reemplazar el comando open por `xdg-open` – una herramienta independiente del entorno de escritorio para configurar las aplicaciones por defecto de un usuario. Esta herramienta está incluida en la mayoría de las distribuciones GNU/Linux con un entorno de escritorio. Así que tuve que hacer un cambio bastante simple en el código:
if RUBY_PLATFORM =~ /linux/
command = 'xdg-open'
else
command = 'open'
end
`#{command} #{HTML_FILEPATH}`
Al principo la gema descargaba el CSS de GitHub y mandaba un request a la API de GitHub para procesar el markdown a HTML. Pocos días después del lanzamiento de ghpreview, GitHub anunció html-pipeline, una gema que incluye varias utilidades HTML internas usadas en GitHub. Esto incluye compilación Markdown y destacado de sintaxis. Así que mi segundo Pull Request al código de la gema fue evitar el request a la API de GitHub y usar html-pipeline. Las hojas de estilo CSS seguían siendo descargadas de GitHub, pero se cachean por una semana.
Hasta el año 2013 la gema fue mantenida de manera relativamente regular. Pasó un tiempo, Neo implosionó, y sus programadores siguieron distintos caminos por la vida. En marzo de 2017, me encontraba en Escocia trabajando en Cultivate, la empresa antes conocida como Neo en Escocia, previamente conocida como EdgeCase en Escocia. Editando un archivo markdown con un formato relativamente complejo, recordé la existencia de ghpreview. Así que me decidí a instalarla.
Habían pasado mucha versiones de Ruby desde 2013, mucha actualizaciones de dependencias y más. Por lo que no se podía instalar la gema. Nuevamente bajé el código fuente y me puse a actualizar cosas hasta que logré instalarla. Publiqué un Pull Request en el código fuente de la gema, y seguí usando mi rama en local. Casi dos años después, en Setiembre de 2019, un comentario en el Pull Request reavivó la discusión. Adam, el desarrollador original de la gema, no la usaba hacía años. Así que se ofreció a entregar el mantenimiento a alguien más. Un par de correos después, me convertí en el nuevo mantenedor de la gema.
Así que en Setiembre, después de casi 6 años, se publicó una versión nueva de ghpreview: 0.2.0. En principio el mayor cambio es ser instalable en versiones modernas de Ruby. Demás sigue usando html-pipeline para imitar el estilo de GitHub cuando previsualizamos archivos markdown. Sin embargo, no logré recrear exactamente igual el resaltado de sintaxis todavía. Espero eventualmente tener tiempo para dedicarle a eso. Otro trabajo en proceso que tengo en una rama paralela es un build en Travis con tests. Tengo alguna idea más, pero como siempre falta tiempo. Pero estoy contento de estar manteniendo el proyecto cuando la alternativa es que quedara en el olvido.
Pueden ver el código fuente de ghpreview en GitHub:
https://github.com/edgecase/ghpreview/