Contenido

Scripts y herramientas externas que potencian a Kate

Introducción

Este es uno más de una serie de artículos destinados a dar a conocer como utilizo el editor Kate. Este artículo tendrá muchos ejemplos de como nos puede ayudar este editor a gestionar un sitio web estático, pero puede extenderse a innumerables escenarios.

Scripts = Herramientas externas

El complemento ‘Herramientas externas’ de Kate permite ejecutar aplicaciones o scripts externos con datos relacionados con el documento actual, por ejemplo su URL, directorio, texto o selección.

Mas abajo daré ejemplos que pueden ayudar a crear artículos en un generador de sitios estáticos como Hugo o manejar un sistema de notas tipo Zettelkasten.

/posts/136-hugo-y-kate-iv-scripts/plugin-external-tools.webp
Activar Herramientas Externas

Una vez habilitado el plugin, aparece una página de configuración como la que se muestra a continuación:

/posts/136-hugo-y-kate-iv-scripts/plugin-external-tools2.webp
Herramientas Externas

Esta permite cambiar o eliminar las herramientas externas existentes. Además, se pueden agregar nuevas herramientas personalizadas: En mi caso, suelo tener algunos scripts que automatizan muchas tareas de gestión del blog y de notas. Algunos ejemplos:

  • Crear un nuevo post
  • Generar el Frontmatter de un post en un archivo vacío
  • Probar los cambios realizados en el blog localmente (hugo server)
  • Actualizar el sitio web
  • Crear una nueva nota para el sistema Zettelkasten

Algunas de estos herramientas pueden tener un uso similar al de los Snippets que comentaba en el artículo anterior. Sin embargo existen algunas diferencias, que aunque sutiles, pueden ser importantes a la hora de escoger una u otra.

Requisistos antes de ejecutar los scripts

Algunos de los scripts requieren una ventana de diálogo para introducir datos; para esta tarea escogí la herramienta kdialog, que viene por defecto en algunas distribuciones. En otras es preciso instalarla.

Instalar kdialog en Arch y derivadas: sudo pacman -S kdialog

Ejemplos

Crear un nuevo archivo para un artículo

Este script en Python permite crear una carpeta nueva introduciendo el nombre que queramos darle, y un archivo index.es.md en la ruta establecida del blog.

A efectos prácticos, esta es una manera rápida de crear la carpeta y el archivo vacía de un artículo.

Creamos un archivo nuevo-articulo.py con el siguiente contenido:

# Importamos los módulos necesarios
import os
import subprocess

# Pedimos el nombre de la carpeta al usuario con kdialog
nombre_carpeta = subprocess.check_output(["kdialog", "--inputbox", "Ingrese el nombre de la carpeta"]).decode().strip()

# Establecemos la ruta a la carpeta de posts.
ruta_blog_content = "/media/datos/javier/Onedrive/Blog/milanga-blog/content/posts/"
# Creamos la ruta completa de la carpeta
ruta_carpeta = os.path.join(ruta_blog_content, nombre_carpeta)

# Creamos la carpeta si no existe
if not os.path.exists(ruta_carpeta):
    os.makedirs(ruta_carpeta)

# Creamos la ruta completa del archivo
ruta_archivo = os.path.join(ruta_carpeta, "index.es.md")

# Creamos el archivo vacío
with open(ruta_archivo, "w") as f:
    pass

# Mostramos un mensaje de confirmación con kdialog
subprocess.call(["kdialog", "--msgbox", f"Se ha creado la carpeta {nombre_carpeta} y el archivo index.es.md"])

Generar el Frontmatter de un post en un archivo vacío

Esto permite generar un generar fácilmente los meta-datos (título, subtítulo, categoría, etiquetas, fecha y hora de creación, autor, etc) en el archivo creado con el script anterior, para que Hugo genere lo que será nuestro futuro artículo.

Si bien puede hacerse un solo script para que cree la carpeta, el archivo y permita introducir los meta-datos, prefiero tener cada cosa por separado.

Creamos un archivo frontmatter.py con el siguiente contenido:

# Script en python para ser ejecutado por Kate (external tools) para crear un frontmatter en Yaml para Hugo.
# Importar el módulo subprocess
import subprocess
import datetime

# Definir una función para ejecutar kdialog e ingresar datos
def obtener_entrada(titulo, texto):
    # Ejecutar el comando kdialog con los argumentos necesarios
    resultado = subprocess.run(["kdialog", "--title", titulo, "--inputbox", texto], capture_output=True)
    # Eliminar el salto de línea final
    entrada = resultado.stdout.decode().strip()
    return entrada

# Pedir al usuario que ingrese los datos del frontmatter usando kdialog
titulo = obtener_entrada("Frontmatter", "Ingrese el título:")
subtitulo = obtener_entrada("Frontmatter", "Ingrese el subtítulo:")
categoria = obtener_entrada("Frontmatter", "Ingrese la categoría:")
etiquetas = obtener_entrada("Frontmatter", "Ingrese etiquetas separadas por comas Y ENTRECOMILLADAS:")

# Generar la hora
hora_ext = datetime.datetime.now()
hora = hora_ext.strftime("%Y-%m-%d")

# Formatear el frontmatter según el formato YAML
frontmatter = f"""---
title: "{titulo}"
subtitle: "{subtitulo}"
author: "Javierinsitu"
description: "..."
date: {hora}
# lastmod:
category: "{categoria}"
tags: [{etiquetas}]
lightgallery: true
resources:
    - name: featured-image
      src: featured-image.webp
    - name: featured-image-preview
      src: featured-image.webp
toc: true
comments: true
license: "All posts are licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International license."
draft: true
---

<!--more-->

##

"""

# Resultado final
print(frontmatter)

Crear un archivo con un organizador semanal

Para no hacer demasiado extenso este artículo simplemente les dejaré el archivo new_weekly, este script les permite crear un archivo .md con una plantilla personalizada y útil como organizador semanal.

Probar los cambios realizados en el blog localmente (hugo server)

Este script lanza un servidor local y el navegador

Creamos un archivo hugo-server-blog.sh con el siguiente contenido:

#!/bin/bash
cd /media/datos/javier/Onedrive/Blog/milanga-blog/

hugo server -D -E -F & falkon http://localhost:1313

Detener el servidor local de Hugo

Detiene el sitio web ‘de prueba’ que lanzamos con el script anterior.

creamos un archivo hugo-stop.sh con el siguiente contenido:

pkill hugo

Actualizar el sitio web

El siguiente script genera el sitio web en Hugo y realiza una sube los archivos al servidor remoto. Obviamente hay que adaptar las rutas y direcciones IP según sus necesidades.

Creamos un archivo update-blog.sh con el siguiente contenido:

#!/bin/bash
cd /media/datos/javier/Onedrive/Blog/milanga-blog/
hugo

rsync --progress -avzh -c -e 'ssh -p 65002' /media/datos/javier/Onedrive/Blog/milanga-blog/public/ milanga-blog:/home/u883848096/domains/milangaelectronica.com.ar/public_html/

Esto es lo que podemos ver que realiza este script si lo ejecutamos desde la terminal:

/posts/136-hugo-y-kate-iv-scripts/updater.webp
Resultado del script si lo ejecutamos desde la terminal

Palabras finales

Estos son solo algunos de las herramientas externas que utilizo. Las posibilidades son enormes e iré actualizando el artículo según surjan nuevos ejemplos que puedan resultar útiles.

¡Saludos!

 

¡Deja tus comentarios aquí !

 

 

 

Dame feedback!