«compose» на консоли позволяет набирать два символа, но выводить третий.
проблема в том, что в составных определениях используются байты как в качестве двух входных данных (то есть вы не можете определить compose в терминах типизированных ключей, но только в терминах типизированных символов), так и для выходных данных.
чтобы заставить его работать в UTF-8, который является многобайтовым (по крайней мере, от 1 до 4 байтов), потребуются значительные изменения в способе обработки ввода с консоли и замена простого массива char, используемого в настоящее время чем-то более сложным. Кажется, что нет планов сделать это (консенсус среди разработчиков ядра состоит в том, что консоль должна оставаться консолью, что-то простое, используемое только для последнего пересмотра; если вам действительно нужен юникод, то вам, вероятно, также нужны bidi, shaping и т. Д .; лучше запустить графический терминал (полноэкранный xterm на X11; но есть и другие возможности).
Так что, действительно, это не работает и не будет работать с многобайтовыми символами на консоли. НО, это все еще работает, если вы ограничиваете составные определения простым ASCII.
И я также обнаружил, что это также работает, если вывод находится в ISO-8859-1 (что соответствует значениям Unicode до 0x00ff); для этого вы можете вставить в некоторый стартовый скрипт строку:
loadkeys / somepath / somefile
и поместите в этот файл нужные вам составные определения (будьте осторожны, сохраняйте файл в кодировке ISO-8859-1 и используйте в качестве выходных данных символы больше 0x7f), синтаксис такого файла очень прост, такие строки:
составьте 'somechar' 'somotherchar' для 'требуемого выхода'
например:
составьте «а» «а» к «å»
составьте «а» «е» к «æ»
Апостроф должен быть спасен.
в этом файле также определяется действие мертвых диакритических ключей; для dead_acute + a вы определяете строку вроде:
составьте '\' '' a 'к' á '
dead_grave использует backtick (`), dead_diaeresis использует двойную кавычку ("), dead_circumflex использует roundflex (^), а dead_tilde использует тильду (~).