"compose" на консолі дозволяє набрати два символи, але вивести третій.
Проблема полягає в тому, що складені визначення використовують байти як у двох вхідних даних (тобто ви не можете визначити композицію в термінах набраних ключів, а лише в терміні набраних символів), так і для виводу.
щоб змусити його працювати в UTF-8, який є багатобайтовим (щонайменше від 1 до 4 байтів), знадобляться значні зміни у способі керування входом консолі та замінить простий масив char, який зараз використовується чим-небудь складнішим. Здається, цього не планують (консенсус серед розробників ядра полягає в тому, що консоль повинна залишатися консоллю, чимось простим, використовуваним лише для останнього перегляду; якщо вам потрібен unicode, то, ймовірно, вам також знадобиться bidi, shaping тощо); краще запустити графічний термінал (повноекранний xterm на X11; але є й інші можливості).
Тож справді це не працює і не працюватиме з багатобайтовими символами на консолі. АЛЕ, воно все ще працює, якщо обмежити визначення композицій простою ASCII.
І я також з’ясував, що він також працює, якщо вихід знаходиться в iso-8859-1 (які відповідають значенням unicode до 0x00ff); для цього ви можете ввести в стартовий сценарій рядок:
loadkeys / somepath / somefile
і введіть у цей файл потрібні вами визначення (будьте обережні, щоб зберегти файл у кодуванні ISO-8859-1; і використовувати символи, що перевищують лише 0x7f, лише як вихід), синтаксис такого файлу дуже простий, такі рядки:
скласти 'somechar' 'somthercharchar' до 'бажаний вихід'
наприклад:
скласти 'a' 'a' to 'å'
скласти 'a' 'e' to 'æ'
апострофа треба уникати.
у цьому файлі також визначено ефект мертвих ключів діакритики; для dead_acute + a ви визначаєте такий рядок:
скласти '\' '' a 'до' b '
dead_grave використовує backtick (`), dead_diaeresis використовує doublequote ("), dead_circumflex використовує circumflex (^), а dead_tilde використовує tilde (~).