Il y a presque quatre ans, j'écrivais que j'avais mis en place quelques alias pour me simplifier la vie et me pousser à écrire plus souvent sur le blog... On dirait que ça n'a pas bien marché...

Qu'à cela ne tienne, j'ai un petit truc à raconter ici. En effet, après avoir testé plein de systèmes pour gérer les tâches à réaliser, j'ai finalement décidé de revenir à une approche KISS, de bien définir mes besoins de base et de tout gérer avec deux fichiers texte et un petit script bash. Pour un accès mobile, j'utilise Nextcloud et en particulier l'application Notes.

Le point de départ, c'est une idée de David Manise qui fait sa to-do list dans un seul fichier avec quelques "codes" assez basiques. Je n'ai pas retrouvé où il parle de ça mais j'ai gardé l'idée de me faire un petit "code" à moi pour organiser les choses. J'ai en effet besoin d'avoir des listes pour différents contextes (perso, pro, familial, ...).

Après quelques tests et réflexions, j'ai donc un fichier en markdown qui ressemble à ça :

ToDo List    
=========    

- [ ] .S. Documenter script todo    
- [ ] .C. Poncer meuble
- [ ] .C. Acheter vis
- [ ] .F. Aller à la piscine avec les enfants    
- [x] .S. Script ToDo à faire (v1)    
- [ ] .S. Script ToDo à faire (v2?)
- [ ] .V. Terminer de lire "The Anarchist's Design Book"

Récurrents    
==========    
- [ ]R .S. Méditer (tous les jours)     
- [ ]R .S. Faire du sport (étirements, élliptique, quick&dirty, aïkido..)     

Légende    
=======    

  .C. : Copeaux (Mes Beaux Copeaux)    
  .F. : Famille    
  .S. : Simon (Perso)    
  .V. : Vrac (trucs pas urgent)
  ..]R: Récurrents

On remarque quelques catégories (Les trucs pour moi, les trucs pour mon activité professionnelle Mes Beaux Copeaux, les trucs pour la famille, les trucs pas urgents (vrac), ...) et il est possible que j'en ajoute d'autres si le besoin se fait sentir. Les cases "[ ]" rendent la ligne "validable" sur Nextcloud Notes, ce qui est un bonus sympa.

Maintenant, il me faut un petit script. Ce que j'ai besoin c'est :

  • Pouvoir isoler facilement les tâches pour un contexte particulier
  • Pouvoir couper/coller une tâche terminée dans un autre fichier (pour le suivi des taches réalisées)

J'ai donc passé quelques heures sur un script et voilà le résultat actuel :

#!/bin/bash                                                           

set -euo pipefail

todoFile='/home/simon/Cloud/Notes/ToDo.md'               
doneFile='/home/simon/Cloud/Notes/Done.md'         

#S'il n'y a pas d'argument                                                     
if [ $# -eq 0 ]; then
  echo -e "Il manque un argument.                                              

  s = Simon                                                                    
  f = Famille                                                                  
  c = Mes Beaux Copeaux                                                        
  v = Vrac (pas urgent)                                                        
  d = Done (couper les trucs faits dans Done.md)"                              

  exit                                           
fi                              

#Liste à faire Simon                                                            
if [ $1 = 's' ]; then                     
  grep -e "\] \.S\." -e "\]R \.S\." $todoFile
elif [ $1 = 'f' ]; then                                                         
  grep -e "\] \.F\." -e "\]R \.F\." $todoFile
elif [ $1 = 'c' ]; then                                                         
  grep -e "\] \.C\." -e "\]R \.C\." $todoFile
elif [ $1 = 'v' ]; then                                                         
  grep -e "\] \.V\." -e "\]R \.V\." $todoFile
elif [ $1 = 'd' ]; then                                                         
  IFS=''                                                                        
  while read p;                                                                     
  do                                                                            
    if grep -q '\[x\]' <<<$p; then
      echo $p       
      echo `date "+%Y-%m-%d %H:%M"` $p >> $doneFile                             
    fi                                                                          
  done <$todoFile   
  sed -i 's/\[x\]R/\[\ \]R/g' $todoFile  
  sed -i '/\[x\]\ /d' $todoFile                                 
else
  echo "Mauvais argument"
fi

À ce stade, je peux donc :

  • Afficher les tâches pour un contexte choisi
  • Déplacer les tâches terminées dans un fichier à part
  • Copier et dé-valider les tâches récurentes dans un fichier à part

Pour me simplifier la vie, j'ai placé le script (todo.sh) dans ''/usr/bin/'' et j'ai créé quelques alias dans ''~/.bash_aliases'' :

  #todo
  alias todo='nvim /home/simon/Cloud/Notes/ToDo.md'
  alias td-s='todo.sh s'
  alias td-f='todo.sh f'
  alias td-c='todo.sh c'
  alias td-v='todo.sh v'
  alias td-d='todo.sh d'

Quelques exemples d'utilisations :

$ td-s #tâches pour Simon
- [ ] .S. Documenter script todo        
- [x] .S. Script ToDo à faire (v1)        
- [ ] .S. Script ToDo à faire (v2?)    
- [ ]R .S. Méditer (tous les jours)         
- [ ]R .S. Faire du sport (étirements, élliptique, quick&dirty, aïkido..) 

Quand il y a une ou plusieurs cases cochées, je peux lancer le script avec l'option "d" (Done"

$ td-d 
- [x] .S. Script ToDo à faire (v1)
```bash

La ou les tâches réalisées sont affichées et envoyées dans le fichier "Done.md" avec la date :
```bash
$ cat Cloud/Notes/Done.md
2024-09-18 13:36 - [x] .S. Script ToDo à faire (v1)

Les taches récurentes sont copiées dans "Done.md" et dé-validée dans "ToDo.md". Pas besoin de la re-créer le lendemain donc. C'est encore très basique mais ça me convient pour l'instant.Il n'y a plus qu'à jouer avec tout ça au quotidien et créer une nouvelle habitude.

Quelques idées d'améliorations : * Afficher toutes les tâches à faire (tous les contextes d'un coup!) * Afficher les taches réalisées qui n'ont pas encore été envoyées dans "Done.md"