FuzPad2: Un Simple Gestor de Notas con Fzf¶
(Modificación del script original de JianZcar - https://github.com/JianZcar/FuzPad)
Descripción General¶
FuzPad es una utilidad de línea de comandos escrita en Bash que permite gestionar notas de texto de manera eficiente utilizando el buscador difuso fzf. Proporciona una interfaz interactiva para crear, abrir, buscar, etiquetar y borrar notas almacenadas en un directorio específico.
Las notas son archivos de texto plano, donde la primera línea se interpreta como el título y la segunda línea (opcional) como etiquetas (hashtags separados por espacios). El resto del archivo contiene el cuerpo de la nota. FuzPad facilita la navegación y manipulación de estas notas a través de menús interactivos y previsualizaciones, integrándose perfectamente con tu editor de texto preferido.
Atajos de Teclado en Vistas de Previsualización¶
Durante las previsualizaciones de las notas (al abrir, borrar o buscar), los siguientes atajos de teclado están disponibles gracias a la integración con fzf:
- Espacio: Desplaza la previsualización una línea hacia abajo.
- Ctrl+Espacio: Desplaza la previsualización una línea hacia arriba.
- Ctrl+x: Desplaza la previsualización una página hacia arriba.
- Ctrl+z: Desplaza la previsualización una página hacia abajo.

Detalles Técnicos de las Funciones¶
A continuación, se detalla la funcionalidad de cada función implementada en el script:
get_current_date_time()¶
- Qué hace: Genera una cadena de texto con la fecha y hora actual en un formato específico.
- Implementación: Utiliza el comando
datede Linux con el formato definido por la variable de entorno$DATE_TIME_FORMAT(por defecto:"%Y-%m-%d-%H-%M-%S"). La salida dedatese devuelve mediante la sustitución de comandos$(...).
list_order()¶
- Qué hace: Determina el orden en que se listarán los archivos en las funciones
open_noteydelete_notes. - Implementación: Verifica el valor de la variable de entorno
$REVERSE_LIST. Si no está configurada comotrue, devuelve la opción--tacpara el comandols, lo que invierte el orden de la lista (mostrando los archivos más recientes primero). Si$REVERSE_LISTestrue, no devuelve nada, manteniendo el orden alfabético por defecto dels.
render_icon()¶
- Qué hace: Muestra un icono colorido asociado a cada acción del menú principal.
- Implementación: Recibe un argumento de texto que representa el "nombre" del icono. Utiliza una estructura
casepara determinar qué secuencia de escape ANSI (para colores) y qué carácter Unicode debe imprimir. Si la variable de entorno$ICONestá configurada en0, la función no imprime nada.
get_title()¶
- Qué hace: Extrae el título de un archivo de nota.
- Implementación: Lee la primera línea del archivo especificado como argumento. Si esta primera línea comienza con
#!, se asume que es un shebang y se lee la segunda línea como el título. En caso contrario, la primera línea se considera el título. La función utilizasedpara leer la línea deseada.
get_tags()¶
- Qué hace: Extrae las etiquetas de un archivo de nota.
- Implementación: Similar a
get_title(), lee la primera línea del archivo. Si comienza con#!, lee la tercera línea como las etiquetas. De lo contrario, lee la segunda línea. Utilizasedpara obtener la línea correspondiente.
show_menu()¶
- Qué hace: Muestra el menú principal interactivo de FuzPad y gestiona la selección de acciones del usuario.
- Implementación: Define un array
$ACTIONScon las opciones del menú, incluyendo los iconos renderizados porrender_icon(). Entra en un buclewhileque utilizafzfpara presentar el menú al usuario. La opción seleccionada se almacena en$SELECTED_ACTION. Mediante una serie de condicionalesif/elif, se determina qué función ejecutar en base a la selección del usuario. El bucle continúa hasta que el usuario selecciona "Salir". Al salir, se muestra un mensaje de despedida.
create_new_note()¶
- Qué hace: Crea un nuevo archivo de nota con la fecha y hora actual en el nombre y abre el editor de texto.
- Implementación: Genera un prefijo de nombre de archivo utilizando la salida de
get_current_date_time()y la variable$FUZPAD_DIR. Verifica si ya existe un archivo con ese nombre y, de ser así, añade un sufijo numérico para evitar colisiones. Finalmente, abre el editor definido por la variable$EDITOR(por defecto:nano) con el nuevo archivo.
open_note()¶
- Qué hace: Permite al usuario seleccionar y abrir una nota existente para su edición.
- Implementación: Lista los archivos en
$FUZPAD_DIRutilizandols, excluyendo directorios. Para cada archivo, obtiene el título usandoget_title()y el nombre del archivo. Esta información se pasa afzfpara una selección interactiva, mostrando el título como etiqueta principal y el nombre del archivo como información adicional. La función también configura una previsualización del contenido de la nota utilizandosedybat(si está instalado para colorear la salida). Al seleccionar una nota, se abre con el editor definido en$EDITOR.
delete_notes()¶
- Qué hace: Permite al usuario seleccionar y eliminar una o varias notas. Requiere confirmación antes de la eliminación.
- Implementación: Similar a
open_note(), lista las notas y permite la selección múltiple confzf(opción--multi). Se muestra una previsualización de cada nota seleccionada. Después de la selección, se presenta una lista de las notas a eliminar y se pide al usuario que escriba "SI" o "S" (en mayúsculas) para confirmar la acción. Si la confirmación es positiva, se eliminan los archivos correspondientes utilizandorm.
search_notes()¶
- Qué hace: Permite al usuario buscar texto dentro del contenido de todas las notas.
- Implementación: Utiliza
grep -nipara buscar la consulta del usuario (almacenada en$LAST_QUERY) dentro de los archivos en$FUZPAD_DIR. Los resultados (nombre de archivo, número de línea y contenido de la línea) se pasan afzf. La función configura una previsualización que muestra el contexto de la línea encontrada, resaltando la coincidencia. Al seleccionar un resultado, se abre el archivo correspondiente en el editor, directamente en la línea donde se encontró la coincidencia. La consulta anterior se mantiene en$LAST_QUERYpara búsquedas posteriores hasta que se sale de la función.
open_tags()¶
- Qué hace: Permite al usuario buscar y abrir notas basadas en las etiquetas que contienen.
- Implementación: Primero, extrae todas las etiquetas únicas de todos los archivos de notas utilizando
grep -oE '#[A-Za-z0-9_]+'ysort -u. Estas etiquetas se presentan al usuario mediantefzfpara su selección. Una vez seleccionada una etiqueta, la función busca todos los archivos de notas que contengan esa etiqueta (usandogrep -q). Luego, presenta estos archivos al usuario mediantefzf(similar aopen_note()) para que pueda seleccionar una nota para abrir.
Autor¶
JianZcar - Modificado por Daniel Horacio Braga y chatbos de IA varios.
Redactor del README¶
Google Gemini AI.