Пользовательский макет xkb, в котором один ключ создает две кодовые точки Юникода

14

Я пишу новую пользовательскую раскладку клавиатуры для 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, как это?

SigueSigueBen
источник

Ответы:

11

РЕДАКТИРОВАТЬ:

Все еще пытаюсь...

Тестирование показывает, что раскладка ключей займет ТОЛЬКО один ключ в каждой позиции.

НО, если вы используете редкий / никогда не используемый keysym в определении раскладки клавиатуры, то глобальный Xmodmap для того, чтобы THAT keysym выводил различные нужные вам символы Юникода, это будет работать.

В карте ключей:

key <AB04>  { [ v, V, XF86LaunchA, XF86LaunchB ] };

В глобальном Xmodmap: (возможно, загружен из /etc/profile.d?)

keysym XF86LaunchA = U0056 U0331
keysym XF86LaunchB = U0076 U0331

Существует довольно много неиспользуемых / специальных ключей, я выбрал LaunchA / B в качестве примера.

lornix
источник
Спасибо за ответ. Один недостаток в том, что это будет настройка для каждого использования, верно? Выполнение этого с xkb сделает его общесистемным и означает, что его можно распространять в одном файле. Конечно, эти условия были в моем первоначальном вопросе!
SigueSigueBen
2
Я копался в исходном коде, кажется, что нет никакой поддержки для включения нескольких нажатий клавиш в определениях ключей в таблице ключей. Конечно, вы можете переписать его сами, чтобы реализовать эту способность!
lornix
Не тот ответ, который я хотел, но это, тем не менее, ответ. Я сам немного покопаюсь в исходном коде и посмотрю варианты, которые вы предложили. Благодарю.
SigueSigueBen
4

С другой стороны, вы можете прикрепить к данному ключу сам юникод, сочетающий в себе символ диатитики, а затем вы можете ввести его после любого другого символа. Действительно, именно так юникод, комбинирующий символы, должен работать.

В 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 (путь может отличаться).

Пабло Саратчага
источник