„komponuj” na konsoli pozwala wpisać dwa znaki, ale wypisać trzeci.
Problem polega na tym, że definicje tworzenia używają bajtów , zarówno jako dwóch danych wejściowych (to znaczy, nie można zdefiniować komponowania pod względem wpisywanych klawiszy, ale tylko pod względem wpisywanych symboli) i jako wynik.
aby działało w UTF-8, który jest wielobajtowy (przynajmniej 1 do 4 bajtów), wymagałoby wielkich zmian w sposobie obsługi danych wejściowych konsoli i zastąpiłby prostą tablicę char obecnie używaną przez coś bardziej złożonego. Wygląda na to, że nie ma takich planów (konsensus między deweloperami jądra jest taki, że konsola powinna pozostać konsolą, czymś prostym, używanym tylko do ostatniego ressortowania; jeśli rzeczywiście potrzebujesz Unicode, to prawdopodobnie potrzebujesz także bidi, kształtowania itp .; następnie lepiej jest uruchomić terminal graficzny (pełnoekranowy xterm na X11; ale są też inne możliwości).
Tak więc rzeczywiście nie działa i nie będzie działać ze znakami wielobajtowymi na konsoli. ALE to nadal działa, jeśli ograniczysz definicje tworzenia do zwykłego ASCII.
Dowiedziałem się również, że działa również, jeśli dane wyjściowe są w iso-8859-1 (które odpowiadają wartościom Unicode do 0x00ff); w tym celu możesz wstawić wiersz skryptu startowego:
loadkeys / somepath / somefile
i wstaw do tego pliku odpowiednie definicje tworzenia (pamiętaj o zapisaniu pliku w kodowaniu ISO-8859-1 i użyj znaków większych niż 0x7f jako samych danych wyjściowych) składnia takiego pliku jest bardzo prosta, takie wiersze:
skomponuj „somechar” „somotherchar” do „pożądanego wyjścia”
na przykład:
skomponuj „a” „a” do „å”
skomponuj „a” „e” do „æ”
apostrof musi zostać ocalony.
efekt martwych kluczy diakrytycznych jest również zdefiniowany w tym pliku; dla dead_acute + a definiujesz linię taką jak:
skomponuj „\” „a” do „á”
dead_grave używa backtick (`), dead_diaeresis używa doublequote ("), dead_circumflex używa circumflex (^), a dead_tilde używa tyldy (~).