Niestandardowy układ xkb, w którym jeden klucz tworzy dwa punkty kodu Unicode

14

Piszę nowy niestandardowy układ klawiatury dla Xorga, ale jest jeden szczególny glif, który nie istnieje w Unicode. Łatwo jest go jednak utworzyć za pomocą standardowej litery i łączącego znaku diakrytycznego.

Na przykład, jeśli chcę literę vz makrem poniżej, sekwencja U0073+U0331tworzy żądany znak.

W mojej definicji układu xkb mogę określić pojedynczy punkt Unicode (tutaj altgr+djest związany z ḏ i altgr+shift+dḎ):

key <AC03>  { [         d,          D,        U1E0F,        U1E0E ] }; // d with macron below

Ale wydaje mi się, że nie jestem w stanie określić „połączonego” glifu Unicode dla jednego klucza:

key <AB04>  { [         v,          V,  U0076+U0331,  U0056+U0331 ] }; // v with macron below

Czy można stworzyć taką systemową definicję xkb?

SigueSigueBen
źródło

Odpowiedzi:

11

EDYTOWAĆ:

Ciągle próbuje...

Testowanie pokazuje, że mapa klawiszy zajmie TYLKO jeden klawisz w każdej pozycji.

ALE, jeśli użyjesz rzadkiego / nigdy nieużywanego klawisza w definicji mapy klawiszy, a następnie globalnej Xmodmapy, aby WYKONAJ ten klawisz wypisywać różne potrzebne znaki Unicode, to zadziała.

W mapie klawiszy:

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

W globalnej Xmodmap: (być może załadowanej z /etc/profile.d?)

keysym XF86LaunchA = U0056 U0331
keysym XF86LaunchB = U0076 U0331

Jest wiele nieużywanych / specjalnych klawiszy, na przykład wybrałem LaunchA / B.

lornix
źródło
Dziękuję za odpowiedź. Wadą jest to, że byłoby to ustawienie dla poszczególnych zastosowań, prawda? Wykonanie tego z xkb sprawiłoby, że byłby ogólnosystemowy i oznaczałoby, że można go rozpowszechniać w jednym pliku. Oczywiście te warunki były w moim pierwotnym pytaniu!
SigueSigueBen
2
Przekopałem się przez kod źródłowy, wydaje się, że nie ma obsługi włączania wielu naciśnięć klawiszy w definicjach klawiszy mapy klawiszy. Oczywiście możesz przepisać go sam, aby wdrożyć tę umiejętność!
lornix,
Nie była to odpowiedź, której chciałem, ale mimo to jest to odpowiedź. Przeszukam trochę kod źródłowy i przyjrzę się opcjom, które zasugerowałeś. Dzięki.
SigueSigueBen,
4

Z drugiej strony możesz przypisać do danego klucza unikod łączący sam znak diaktyki, a następnie możesz wpisać go po dowolnym innym znaku. Rzeczywiście, w ten sposób powinny działać znaki Unicode łączące znaki.

W X11 są martwe klucze, martwe klucze działają w drugą stronę: najpierw martwy klucz, potem litera bazowa. Istnieje <dead_belowmacron>, możesz dołączyć go do jakiegoś klucza.

Następnie musisz edytować plik Compose dla swojego ustawienia narodowego (jeśli ktoś wie, jak dołączyć definicje do pliku Compose z lokalizacji zdefiniowanej przez użytkownika, doceniłbym) i dodać wiersze:

# 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̱"

Plik tworzenia do użycia jest zdefiniowany przez ustawienia regionalne w pliku /usr/share/X11/locale/compose.dir (ścieżka może się różnić).

Pablo Saratxaga
źródło