Je pense que Bash se heurte à des anomalies dans la façon dont les caractères accentués sont traités. Vous devriez prendre du pop-corn, parce que ça va devenir technique pendant un moment...
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, suivie du ou des accents. Par exemple, "ä" pourrait être représenté soit pré-composé comme U+00E4 (UTF-8 0xc3a4, petite lettre latine 1 avec tréma), soit décomposé comme U+0061 U+0308 (UTF-8 0x61cc88, petite lettre latine a + combinant le tréma).
Le système de fichiers HFS+ d'OS X exige que tous les noms de fichiers soient stockés dans la représentation UTF-8 de leur nom. forme entièrement décomposée . Dans un nom de fichier HFS+, "ä" DOIT être codé comme 0x61cc88, et "ö" DOIT être codé comme 0x6fcc88.
Je suis presque sûr que ce qui se passe ici est que lorsque vous tapez "Näyttökuva.png" à la ligne de commande, cela "tape" 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 les stocker. Tout se passe bien jusqu'à présent. Mais lorsque vous essayez d'utiliser la complétion par tabulation en commençant par "Nä", je pense que bash ne décompose pas le "ä" avant de chercher 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" à la ligne de commande, par rapport à celui utilisé lorsque je le stocke comme nom de fichier et que j'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
Pour ce qui est de la perte de caractères lors de la suppression et du re-tab, je pense que c'est étroitement lié. Plus précisément, je pense que bash "supprime" un point de code par pression de la touche delete, mais efface un caractère de la fenêtre du terminal par pression. Comme 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 est désynchronisé. Essayez de compléter par tabulation le nom de fichier entier, de le supprimer à nouveau jusqu'à "Näytt", puis de le compléter à nouveau par tabulation : bash semble penser que seul le tréma de combinaison a été supprimé, et non le "ö" entier, donc il ajoute à nouveau le tréma de combinaison, mais cette fois-ci il s'attache au "t" :
$ echo Näyttkuva.png
Näyttökuva.png
Notez que lorsque j'appuie sur la touche retour, bash contient en fait le nom de fichier complet ; c'est juste l'affichage du terminal qui est confus.
TL;DR bash a des bogues dans la gestion des caractères accentués décomposables.
EDIT : après avoir réfléchi, je pense que la seule solution complète est de corriger bash (/attendre que ses développeurs le fassent). Il pourrait aussi y avoir un moyen de saisir les caractères sous forme décomposée, mais je n'ai aucune idée de ce que cela pourrait être. Mais j'ai trouvé quelques solutions de contournement partielles :
-
Le glisser-déposer d'un fichier depuis le Finder colle sa forme correcte. Étant donné que le Finder obtient le nom du fichier à partir du système de fichiers, il est déjà décomposé, et cela fonctionne tout simplement.
-
Vous pouvez en fait compléter par une tabulation le caractère accentué lui-même. Par exemple, si vous tapez "Na" et ensuite tab, cela correspondra à "Näyttökuva.png" parce que 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 la tabulation à menu-complet au lieu de complète, elle devrait vous permettre de tabuler sur 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 pourriez le lier à une autre touche, afin de ne l'utiliser que lorsque vous en avez besoin).
-
Pour résoudre le problème de dé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.