Penso che bash stia inciampando su alcune anomalie nel modo in cui i personaggi accentati vengono gestiti. Potresti prendere dei popcorn, perché questo diventerà tecnico per un po '...
Unicode consente di rappresentare alcuni caratteri accentati in diversi modi: come "punto di codice" che rappresenta il carattere accentato o come una serie di punti di codice che rappresentano la versione non accentata del personaggio, seguita dall'accento / i. Ad esempio, "ä" potrebbe essere rappresentato sia precomposto come U + 00E4 (UTF-8 0xc3a4, latina piccola 1 con diaeresi) o decomposto come U + 0061 U + 0308 (UTF-8 0x61cc88, lettera latina piccola a + diateresi combinata ).
Il filesystem HFS + di OS X richiede che tutti i nomi di file siano memorizzati nella rappresentazione UTF-8 dei loro modulo completamente decomposto . In un nome file HFS +, "ä" DEVE essere codificato come 0x61cc88 e "ö" DEVE essere codificato come 0x6fcc88.
Sono abbastanza sicuro che quello che sta succedendo qui è che quando scrivi "Näyttökuva.png" alla riga di comando, è "digitando" i caratteri in forma precomposta. Quando il file viene creato, il filesystem decompone i caratteri per la memorizzazione. Tutto va bene finora. Ma quando provi a usare tab-completion che inizia con "Nä", penso che bash non riesca a decomporre il "ä" prima di cercare le corrispondenze, e ovviamente non ne trova.
Per illustrare la differenza, ecco un esempio di quale codifica viene utilizzata quando digito semplicemente "Näyttökuva.png" nella riga di comando, rispetto a cosa viene usato quando lo memorizzo come nome file e uso il completamento della tabulazione per riempirlo in:
$ 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
Ora, per quanto riguarda la questione dei personaggi che si perdono durante l'eliminazione e il completamento delle tabulazioni, sospetto che sia strettamente correlato. Nello specifico, penso che bash stia "cancellando" un punto di codice per ogni pressione del tasto di cancellazione, ma cancellando un carattere dalla finestra del terminale per ogni pressione. Poiché uno dei caratteri eliminati ("ö" questa volta) era costituito da due punti di codice, ma solo un carattere, il display del Terminale non è più sincronizzato. Prova la tabulazione-completando l'intero nome del file, cancellandolo di nuovo in "Näytt", quindi ri-tab-completando: bash sembra pensare che solo la diaeresi combinata è stata cancellata, non l'intero "ö", quindi riaggiunge la diaeresi combinatoria , ma questa volta si collega alla "t":
$ echo Näytẗkuva.png
Näyttökuva.png
Si noti che quando premo return, bash ha effettivamente l'intero nome del file lì; è solo il display del terminale che è stato confuso.
TL; DR bash ha alcuni bug che gestiscono caratteri accentati decomponibili.
EDIT: dopo un po 'di rimuginare, penso che l'unica soluzione completa sia quella di correggere bash (/ attendere che i suoi sviluppatori lo risolvano). Potrebbe anche esserci un modo per inserire caratteri in una forma scomposta, ma non ho idea di cosa sarebbe. Ma ho trovato alcuni rimedi parziali:
-
Trascina e rilascia un file dalle paste del Finder nella sua forma corretta. Dal momento che Finder ottiene il nome file dal filesystem, è già scomposto, quindi funziona.
-
In realtà puoi completare con schede il carattere accentato stesso. Ad esempio, se si digita "Na" e quindi scheda, corrisponderà "Näyttökuva.png" perché la decomposizione canonica di "ä" inizia con "a". Ma se hai un file chiamato "Narwal.gif" nella stessa directory, non sarà molto utile ...
-
Non l'ho testato, ma se si associa la scheda a menu-complete anziché completare, dovrebbe consentire di scorrere le possibili corrispondenze in modo da poter selezionare quello desiderato anche se non è possibile digitare la lettera successiva. (Oppure puoi associarlo a un altro tasto, quindi puoi usarlo solo quando è necessario.)
-
Per risolvere il problema con la visualizzazione del terminale che non è più sincronizzata, è possibile associare qualcosa a ridisegna-corrente-riga - non impedirà il verificarsi del problema, ma ti darà un modo per risincronizzare il display.