
Я пишу новую пользовательскую раскладку клавиатуры для Xorg, но есть один конкретный глиф, которого нет в Unicode. Однако его легко создать, используя стандартную букву и объединяющий диакритический знак.
Например, если мне нужна буква v
с макроном внизу, последовательность U0073+U0331
создаст нужный мне символ.
В моем определении макета xkb я могу указать одну точку Unicode (здесь altgr+d
она привязана к ḏ и altgr+shift+d
к Ḏ):
key <AC03> { [ d, D, U1E0F, U1E0E ] }; // d with macron below
Но, похоже, я не могу указать «комбинированный» глиф Unicode для одной клавиши:
key <AB04> { [ v, V, U0076+U0331, U0056+U0331 ] }; // v with macron below
Возможно ли создать такое общесистемное определение xkb?
решение1
РЕДАКТИРОВАТЬ:
Все еще пытаюсь...
Тестирование показывает, что раскладка клавиатуры принимает ТОЛЬКО одну клавишу в каждой позиции.
НО, если вы используете редкую/никогда не используемую клавишу в определении раскладки клавиатуры, а затем глобальную Xmodmap, чтобы заставить ЭТУ клавишу выводить различные необходимые вам символы Unicode, это будет работать.
В раскладке:
key <AB04> { [ v, V, XF86LaunchA, XF86LaunchB ] };
В глобальном Xmodmap: (возможно, загруженном из /etc/profile.d ?)
keysym XF86LaunchA = U0056 U0331
keysym XF86LaunchB = U0076 U0331
Существует довольно много неиспользуемых/специальных клавишных символов, в качестве примера я выбрал LaunchA/B.
решение2
С другой стороны, вы можете прикрепить к данной клавише сам символ unicode combined diactityics, а затем вы можете ввести его после любого другого символа. Действительно, именно так должны работать символы unicode combined.
В X11 есть мертвые клавиши, мертвые клавиши работают наоборот: сначала мертвая клавиша, потом базовая буква. Есть <dead_belowmacron>
, можно прикрепить к какой-нибудь клавише.
Затем вам нужно отредактировать файл Compose для вашей локали (буду признателен, если кто-то знает, как добавлять определения в файл Compose из указанного пользователем расположения) и добавить строки вроде:
# when the output is a single unicode char, you put also the corresponding
# X11 symbol name
# <symbol> <symbol> : "one-char-string" <symbol>
<dead_belowmacron> <d> : "ḏ" U1E0F
<dead_tilde> <n> : "ñ" <ntilde>
# when the output is a multicharacter string, you put just the string
# <symbol> <symbol> : "string"
<dead_belowmacron> <v> : "v̱"
Используемый файл Compose определяется локалью в файле /usr/share/X11/locale/compose.dir (путь может отличаться).
решение3
Обновление на 2020 год
Этот вопрос был задан в 2012 году, а последний ответ (до этого) был дан в 2013 году. Долгое время лучшим ответом было просто перейти с xim
наuim
. Это более или менее простая замена, созданная для полной поддержки Unicode и многоязычного ввода. Среди многих других функций uim позволяет выводить символы с несколькими кодовыми точками, например, U0073+U0331
в результате нажатия клавиши или неиспользуемой комбинации клавиш.