Je pense que bash trébuche sur certaines anomalies dans la façon dont les caractères accentués sont traités. Vous voudrez peut-être attraper du pop-corn, car cela va devenir technique un peu ...
Unicode permet à certains caractères accentués d'être représentés de plusieurs manières différentes: comme un "point de code" représentant le caractère accentué, ou comme une série de points de code représentant la version non accentuée du caractère, suivi par le ou les accent (s). Par exemple, "ä" pourrait être représenté soit précomposé en U + 00E4 (UTF-8 0xc3a4, minuscule latine 1 avec tréma) ou décomposé en U + 0061 U + 0308 (UTF-8 0x61cc88, minuscule latine a + tréma combinant ).
Le système de fichiers HFS + d'OS X nécessite que tous les noms de fichiers soient stockés dans la représentation UTF-8 de leur forme entièrement décomposée . Dans un nom de fichier HFS +, "ä" DOIT être codé en 0x61cc88 et "ö" DOIT être codé en 0x6fcc88.
Je suis sûr que ce qui se passe ici, c'est que lorsque vous tapez "Näyttökuva.png" sur la ligne de commande, c'est "taper" les caractères sous une forme précomposée. Lorsque le fichier est créé, le système de fichiers décompose les caractères pour le stockage. Tout va bien jusqu'à présent. Mais lorsque vous essayez d'utiliser la tabulation commençant par "Nä", je pense que bash ne parvient pas à décomposer le "ä" avant de rechercher des correspondances, et bien sûr il n'en trouve pas.
Pour illustrer la différence, voici un exemple de l'encodage utilisé lorsque je tape simplement "Näyttökuva.png" sur la ligne de commande, par rapport à ce qui est utilisé lorsque je le stocke en tant que nom de fichier et utilise la complétion de tabulation pour le remplir:
$ printf Näyttökuva.png | xxd # This time I pasted the it in from this web page
0000000: 4ec3 a479 7474 c3b6 6b75 7661 2e70 6e67 N..ytt..kuva.png
$ touch Näyttökuva.png # Also pasted from the web
$ printf Näyttökuva.png | xxd # This time I tab-completed it after N
0000000: 4e61 cc88 7974 746f cc88 6b75 7661 2e70 Na..ytto..kuva.p
0000010: 6e67 ng
Maintenant, en ce qui concerne la perte de personnages lors de la suppression et de la ré-tabulation, je suppose que c'est étroitement lié. Plus précisément, je pense que bash "supprime" un point de code par pression sur la touche Suppr, mais efface un caractère de la fenêtre Terminal par pression. Étant donné que l'un des caractères supprimés ("ö" cette fois) était composé de deux points de code, mais d'un seul caractère, l'affichage du terminal n'est plus synchronisé. Essayez de compléter le nom de fichier par tabulation, en le supprimant de nouveau à "Näytt", puis de compléter la tabulation: bash semble penser que seule la trame de combinaison a été supprimée, pas le "ö" entier, donc il ajoute à nouveau la tréma de combinaison , mais cette fois il s'attache au "t":
$ echo Näytẗkuva.png
Näyttökuva.png
Notez que lorsque j'appuie sur Entrée, bash contient en fait le nom de fichier entier; c'est juste l'affichage du terminal qui était confus.
TL; DR bash a quelques bugs qui gèrent les caractères accentués décomposables.
EDIT: après quelques réflexions, je pense que la seule solution complète est de corriger bash (/ attendre que ses développeurs le corrigent). Il pourrait également y avoir un moyen de saisir des caractères sous forme décomposée, mais je n'ai aucune idée de ce que ce serait. Mais j'ai trouvé quelques solutions de contournement partielles:
Glissez-déposez un fichier à partir des pâtes du Finder dans sa forme correcte. Étant donné que le Finder obtient le nom de fichier du système de fichiers, il est déjà décomposé, donc cela fonctionne.
Vous pouvez en fait compléter par tabulation le caractère accentué lui-même. Par exemple, si vous tapez "Na" puis tabulation, cela correspondra à "Näyttökuva.png" car la décomposition canonique de "ä" commence par "a". Mais si vous avez un fichier nommé "Narwal.gif" dans le même répertoire, cela ne sera pas très utile ...
Je n'ai pas testé cela, mais si vous liez tab à menu-complete au lieu de complete, cela devrait vous permettre de parcourir les correspondances possibles afin que vous puissiez sélectionner celle que vous voulez même si vous ne pouvez pas taper la lettre suivante. (Ou vous pouvez le lier à une frappe différente, vous ne pouvez donc l'utiliser que lorsque vous en avez besoin.)
Pour résoudre le problème de non-synchronisation de l'affichage du terminal, vous pouvez lier quelque chose à redessiner la ligne actuelle - cela n'empêchera pas le problème de se produire, mais cela vous donnera un moyen de resynchroniser l'affichage.
$ echo -e "N\xC3\xA4*" | ls
(l'écho donneNä*
) des résultatsNäyttökuva.png
. Le problème existe également avec les autres shells sous Mac OS; et avec par exemple zshls N
obtient l'auto-complétion pourls Na<0308>ytto<0308>kuva.png