Jak podpiąć znak pod klawisz

Wstęp

By ułatwić sobie wprowadzanie często używanych znaków jak np. polskich cudzysłowów "„”", czy też pauzy „—”, można je podpiąć pod dane kombinacje klawiszy.

Porada ta działa pod X-ami i wymaga polecenia xmodmap.

Ustawienia

Na początek warto jest poznać oryginalne mapowanie klawiatury. W tym celu należy użyć polecenia xmodmap z przełącznikiem -pke:

$ xmodmap -pke

Na wyjście powinniśmy dostać coś w tym rodzaju:

[…]
keycode  24 = q Q at Greek_OMEGA at Greek_OMEGA
keycode  25 = w W lstroke Lstroke lstroke Lstroke
keycode  26 = e E eogonek Eogonek eogonek Eogonek
keycode  27 = r R paragraph registered paragraph registered
[…]	

Linia jest zbudowana w następujący sposób:

keycode
Słowo kluczowe oznaczające, że przypisanie będzie do kodu znaku
24
Kod klawisza
=
Operator przypisania
q
Co ma się pojawić przy naciśnięciu samego klawisza
Q
Co ma się pojawić przy naciśnięciu klawisza wraz z „Shift”
at
Co ma się pojawić przy naciśnięciu klawisza wraz z „Mode_switch” (zazwyczaj prawy „Alt”)
Greek_OMEGA
Co ma się pojawić przy naciśnięciu klawisza wraz z „Shift” i „Mode_switch”
at
Co ma się pojawić przy naciśnięciu klawisza wraz z „Mode_switch” (zazwyczaj prawy „Alt”)
Greek_OMEGA
Co ma się pojawić przy naciśnięciu klawisza wraz z „Shift” i „Mode_switch”

Gdy chcemy poznać kod danego klawisza, wygodnie jest posłużyć się poleceniem xev:

$ xev

Po uruchomieniu pojawi się małe okienko z białym tłem oraz czarnym kwadratem wewnątrz, oraz na konsoli zostanie wypisane dużo tekstu. Teraz naciskamy klawisz którego kod chcemy poznać. Na konsolę powinno zostać wypisane coś w tym rodzaju:

KeyPress event, serial 26, synthetic NO, window 0x2200001,
root 0xcf, subw 0x0, time 20244051, (602,451), root:(607,522),
state 0x10, keycode 24 (keysym 0x71, q), same_screen YES,
XLookupString gives 1 bytes: (71) "q"
XmbLookupString gives 1 bytes: (71) "q"
XFilterEvent returns: False

Poszukiwanym fragmentem, jest w powyższym wypadku trzecia linia, a dokładniej napis keycode 24. Możemy go od razu użyć we fragmencie przed znakiem równości.

Listę kodów znaków (np. Greek_OMEGA, czy Eogonek) obsługiwanych przez xmodmap można znaleźć np. na Wiki serwisu LinuxQuestions.org.

A zatem, jeśli chcielibyśmy ustawić np. pod klawisz „-” pauzę i półpauzę, należałoby użyć linii:

keycode 20 = minus underline emdash endash emdash endash

Teraz najważniejsza sprawa — użycie. Możemy to zrobić na dwa sposoby: albo bezpośrednio w linii poleceń, bądź przez wpisanie jej do pliku i wywołanie xmodmap z argumentem, którym będzie ten właśnie plik.

Pierwszy sposób:

$ xmodmap -e "keycode 20 = minus underline emdash endash emdash endash"

Drugi sposób:

$ gvim ~/.Xmodmap
i
keycode 20 = minus underline emdash endash emdash endash
:wq
$ xmodmap ~/.Xmodmap

Drugi sposób na dłuższą metę jest o wiele wydajniejszy od pierwszego, gdyż w pliku można umieścić więcej niż tylko jedną linię z mapowaniem. Dany plik można też wielokrotnie wywoływać, bez konieczności każdorazowego wpisywania tej linii.

Gdy chcemy, by nasze ustawienia były automagicznie wczytywane przy każdym starcie iksów, należy w pliku ~/.xinitrc umieścić wywołanie xmodmap jak w ostatnim przykładzie powyżej.

Gdy plik ~/.xinitrc nie istnieje:

$ gvim ~/.xinitrc
i
#!/bin/sh
xmodmap ~/.Xmodmap
:wq

Gdy plik ~/.xinitrc istnieje:

$ gvim ~/.xinitrc
i
 Do pierwszej wolnej linii
xmodmap ~/.Xmodmap
:wq

I tyle.