
n.py
Lien vers le projet — 📖 3 min
n.py, c'est le nom que j'ai trouvé pour ce petit projet.
"n" c'est pour "notes". Pas de majuscule, parce que ça fait prétentieux. Juste une seule lettre parce que c'est minimaliste, comme le programme.
Kessessé ?
C'est un petit programme qui permet de créer des notes textuelles dans un dossier.
Si on n'indique pas de nom à la note, le programme crée une note au format "YYYY-MM-DD.txt".
Ainsi, les notes sont incrémentales, on édite chaque jour une nouvelle note, et on peut facilement retrouver une note écrite un jour particulier (si on se souvient du jour, mais il y a d'autres moyens de retrouver du contenu).
J'ai repris le concept de "notes incrémentales" utilisé par inc, un petit programme dans la même veine que n.py, mais ayant quand même beaucoup plus de features. J'ai entendu parler de inc via cet article ("Incremental note-taking" en anglais), que je vous conseille chaudement.
Comment ça marche ?
C'est vraiment très simple. Il n'y a pas d'objets, c'est juste des fonctions. Et il n'y en a pas beaucoup (7 actuellement) ;
- Une fonction "main", qu'on peut lancer avec des arguments depuis un autre script Python, ou bien lancée automatiquement lorsque le script est appelé depuis la ligne de commande.
- Deux fonctions pour afficher & exécuter les commandes.
- Les fonctions qui font des choses : new_or_update, search, cat, ls.
Des fonctions pour afficher et exécuter les commandes ?
Tout-à-fait. La logique est implémentée dans n.py, mais les commandes à proprement parler sont lancées avec subprocess.call(), donc avec sh (dash sur mon ordi). Ainsi, ce programme est en fait réalisé en Python et en langage Shell :P
C'est quoi les commandes ?
- aucun argument : pour créer la note du jour (n),
- un argument : pour créer une note avec un nom particulier (n nom_de_la_note),
- deux arguments : pour créer une note avec un nom particulier et une extension (n nom_de_la_note extension),
- l, list, -l, --list : pour lister les notes,
- n, new, -n, --new : pour créer une nouvelle note,
- s, search, -s, --search : pour chercher du contenu (ligne à ligne) dans toutes notes,
- c, cat, -c, --cat : pour afficher le contenu d'une note en fonction du nom (permet par exemple d'afficher toutes les notes de 2021 en entrant la commande n c 2021),
- h, help, -h, --help : pour afficher l'aide (rédigée en mauvais anglais et en justifié),
- autocomplete : pour afficher les instructions pour activer l'autocomplétion.
Et la config ?
Il y a pour l'instant 3 variables d'environnement qui existent, et qui permettent de configurer le comportement par défaut de n.py :
- N_FOLDER : Le dossier où vont être sauvegardés les fichiers. Si la variable d'environnement n'existe pas, le script va tenter de sauvegarder le fichier dans le dossier ~/n/. Le dossier n'est pas créé par défaut, il vous faudra le créer manuellement !
- N_TOOL : L'outil qui va permettre d'ouvrir les notes pour les éditer. Si la variable n'est pas définie, il va ouvrir les fichiers avec nano.
- N_DEFAULT_EXT : L'extension par défaut avec laquelle sauvegarder les fichiers. Si la variable n'est pas définie, il va enregistrer les fichiers en txt.
Je vous ai fait une petite démo sur asciinema afin de montrer les fonctionnalités du script (bon ça a pas record l'entièreté du terminal mais on n'a qu'à dire que c'est pas grave) :
Il est pensé pour tourner sous Linux uniquement (mais peut éventuellement fonctionner sous macos, et je l'ai testé sous Android avec termux et ça fonctionne bien), et est compatible python2.4 jusqu'à 3.9+, et au moins bash & zsh.
Je l'ai créé parce que j'avais envie d'un outil configurable, léger et minimaliste. L'absence de features évoluées est normale et voulue. N'hésitez pas à consulter le readme et l'aide du programme (rédigée après être tombé sur ce tweet) pour plus d'informations :)
Et voilà, c'est la fin de la présentation de ce petit programme !
N'hésitez pas à le tester s'il vous intéresse, et à me rapporter les éventuels bugs que vous trouverez par email (corentin at ce domaine) :)