La necesidad de escribir notas de diferentes temas existe. Mucha gente opta por tener un archivo infinito donde va pegando cosas y luego las busca.
Este script en bash nace de esa necesidad de tener categorizadas las notas y de poder tomarlas rápidamente con nuestro editor favorito.
El código es muy sencillo y puede descargarse desde aquí: git.56k.es/fanta/n
La forma de instalar n
Para instalar n en el sistema se puede hacer así:
$ git clone http://git.56k.es/fanta/n /tmp/n
# cp -pv /tmp/n/n /usr/local/bin/
# chmod +x /usr/local/bin/n
Lo que viene a ser clonar el repositorio git.56k.es/fanta/n en el directorio /tmp/n y luego como root se copia el script n en /usr/local/bin/ .
Cuando pongo $ estoy refiriéndome a que ese comando se ejecuta con un usuario normal. Cuando indico # es que ese comando se lanza como root.
Cuando indicamos al comando «cp» las opciones -p y -v estamos diciendo que preserve los permisos y que nos imprima en pantalla lo que ha copiado (-v verbose).
De todos modos por asegurarnos al final como root he puesto que se haga ejecutable el script (chmod +x) pese a que no sería necesario.
Analizando cosas buenas de este código
Aquí el código integro al día de hoy. Lo ideal es consultar el del repositorio por si existen cambios.
#!/bin/bash
nDir="$HOME/.config/n"
#editor="/usr/bin/vim"
#editor="/usr/bin/emacs"
editor="/usr/bin/nano"
check_root(){ if [ "$(id -u)" == 0 ]; then echo "don't run n as root"; exit; fi }
create_nDir(){ [ ! -d "$nDir" ] && mkdir -p $nDir ; }
get_tagListRecentUseOrder(){ { nTags=$(ls -1t $nDir | tee /dev/fd/3 | wc -l); } 3>&1 ; }
create_tag(){ nDir="$1" ; tagName="$2" ; [ ! -f "$nDir/$tagName" ] && touch $nDir/$tagName ; }
check_tag(){ tagName="$1" ; [[ "$tagName" = "${tagName%[[:space:]]*}" ]] && echo 0 || echo 1 ; }
check_root ; create_nDir
[[ $# -eq 0 ]] && get_tagListRecentUseOrder
[[ $# -eq 1 ]] && [[ $(check_tag "$1") -eq 1 ]] && echo "bad tag name . Please try again without spaces." && exit
[[ $# -eq 1 ]] && create_tag "$nDir" "$1" && $editor $nDir/$1
Las notas se crearán en el directorio oculto .config/n dentro de nuestro home. De modo que si uso n con el usuario pepito lo más probable es que estén en /home/pepito/.config/n/
El editor por defecto que usará n es nano. Esto puede cambiarse fácilmente comentando la línea y descomentando las de otros editores. Puedes añadir también otros si indicas la ruta del ejecutable.
No permitir que root pueda ejecutar n
Con la siguiente comprobación no permitiremos que root pueda ejecutar n.
check_root(){ if [ "$(id -u)" == 0 ]; then echo "don't run n as root"; exit; fi }
Lo que realmente hace es comprobar el id del usuario que ejecuta el script. Si por ejemplo ese id es 0 estaremos hablando de que el usuario es root.
N mostrará por pantalla que no podemos ejecutar n como root y no seguirá.
Funciones
El script es muy pequeño pero tiene sus funciones bien definidas. Trabajar así te permitirá poder llevarte esos fragmentos de código que necesitas en otro script fácilmente.
N al ejecutarse sin parámetros intenta mostrar por pantalla el listado de nuestras notas, es decir, los tags de categorización. Se mostrarán en el orden de «las primeras las más recientes, las que hemos usado hace menos tiempo».
La forma de usar n es simple. Escribes «n» y ves las notas que tienes. Si quieres añadir algo de info en una existente llamada tareas pues escribes «n tareas».
Si alguna categoría no existe la creas de la misma forma.
Problemas conocidos
El borrado de notas no se gestiona con n. Esto se puede hacer pero he preferido no crear una función que lo haga.
Si quieres borrar algunas notas puedes hacerlo eliminado el archivo en /home/tuusuario/.config/n/
N es una forma rápida de categorizar notas y se integra bien con git
n es lo que utilizo para tomar notas. Es como tener muchos archivos en un directorio pero lo manejas rápidamente.
Si estás viendo algo que quieres anotar solo escribes n categoría y lo dejas pegado. Si al rato quieres añadir algo más o cambiarlo escribes lo mismo.
Las notas podrían ir perfectamente a parar a un repositorio git privado. De esta forma puedes usar n en diferentes equipos y siempre acceder a tus notas.
Y más o menos eso es todo lo que quería explicar de este script.
Saludos cordiales.