Salut,
Je vais regarder pour les sinogrammes ! Cela marchait avec des caractères avec 3 octets tels que et ⚴, mais je vais regarder ! Oui effectivement, j'ai rep{e,a}ré le bug pour les accents français (cela venait en fait du fait qu'ils sont mal gérés par le builtin printf)
Sinon, pour les séparateurs, je ne suis pas sûr de voir ce dont tu parles : tu parles bien du fichier contenant les signets ?
Si c'est le cas, j'utilise le séparateur tabulation entre les champs, qui est utilisé dans les fichiers .cvs par exemple. Un alias ne peut pas contenir de tabulations, et un chemin contenant une tabulation sera intercepté par cda donc le séparateur est fiable.
Le format du fichier est :
- première ligne : un # suivi d'un nombre (la dernière position de la flèche) puis de la fin de la ligne immédiatement.
- autres lignes : alias + tab + chemin associé
Tu aurais dû poster ton ancien fichier de signets, je l'aurais mis à jour avec le nouveau format, ça aurait été l'affaire d'une ligne de sed ! 🙂
Pas de bol, j'avais une idée pour optimiser cda avec une commande awk, mais il se trouve que j'ai découvert
un bug d'awk pile sur la chose que je voulais faire, et propre à Ubuntu !
Edit 3 : hum, ça m'a l'air assez chaud, cette histoire de 日. Le problème : en théorie, il y a deux manières de traiter les caractères :
- en fonction de leur nombre d'octets (comme le fait printf), ce qui fait que les caractères ayant deux ou trois octets (c'est-à-dire tout caractère non-ASCII) font un décalage.
- en utilisant les locales pour traiter chaque ensemble d'octets indépendants comme un seul caractère (comme le fait ${#VAR} )
Le problème ici, c'est qu'il faudrait une troisième manière : traiter les octets en fonction de la place qu'ils prennent sur l'écran, car effectivement les sinogrammes prennent toujours la place de deux caractères ASCII. Mais là, j'avoue n'avoir aucune idée de comment faire (pourtant je planche actuellement sur ce genre de sujet, parce que je voudrais faire une version chinoise d'un de mes logiciels). Je peux regarder la valeur hexa du caractère puis voir ainsi s'il fait partie des caractères CJK, mais ça risque de faire beaucoup ralentir le script. Je vais essayer de me creuser la tête. 🙂