sxhkd-rc

[fork] simple X hotkey daemon (but for the rc shell)
Log | Files | Refs | README | LICENSE

commit a832ccc5da3d317821eca49d3bce4bc6eb0042c0
parent 6dd6a8b1597917e0fefbd69aac990d072a1910f8
Author: Bastien Dejean <nihilhill@gmail.com>
Date:   Thu, 10 Jan 2013 12:03:49 +0100

Cosmetic improvements

Diffstat:
MMakefile | 2+-
Ahotkeys.c | 2691+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ahotkeys.h | 37+++++++++++++++++++++++++++++++++++++
Dkeys.c | 2691-------------------------------------------------------------------------------
Dkeys.h | 37-------------------------------------
Msxhkd.c | 2+-
6 files changed, 2730 insertions(+), 2730 deletions(-)

diff --git a/Makefile b/Makefile @@ -9,7 +9,7 @@ PREFIX ?= /usr/local BINPREFIX = $(PREFIX)/bin MANPREFIX = $(PREFIX)/share/man -SRC = sxhkd.c keys.c helpers.c +SRC = sxhkd.c hotkeys.c helpers.c OBJ = $(SRC:.c=.o) all: CFLAGS += -Os diff --git a/hotkeys.c b/hotkeys.c @@ -0,0 +1,2691 @@ +#include <X11/keysym.h> +#include <X11/XF86keysym.h> +#include <stdlib.h> +#include <string.h> +#include <stdbool.h> +#include "hotkeys.h" +#include "helpers.h" +#include "sxhkd.h" + +keysym_dict_t nks_dict[] = {/*{{{*/ +#define NKS(x) { #x, XK_ ## x } + NKS(VoidSymbol), +#ifdef XK_MISCELLANY + NKS(BackSpace), + NKS(Tab), + NKS(Linefeed), + NKS(Clear), + NKS(Return), + NKS(Pause), + NKS(Scroll_Lock), + NKS(Sys_Req), + NKS(Escape), + NKS(Delete), + NKS(Multi_key), + NKS(Codeinput), + NKS(SingleCandidate), + NKS(MultipleCandidate), + NKS(PreviousCandidate), + NKS(Kanji), + NKS(Muhenkan), + NKS(Henkan_Mode), + NKS(Henkan), + NKS(Romaji), + NKS(Hiragana), + NKS(Katakana), + NKS(Hiragana_Katakana), + NKS(Zenkaku), + NKS(Hankaku), + NKS(Zenkaku_Hankaku), + NKS(Touroku), + NKS(Massyo), + NKS(Kana_Lock), + NKS(Kana_Shift), + NKS(Eisu_Shift), + NKS(Eisu_toggle), + NKS(Kanji_Bangou), + NKS(Zen_Koho), + NKS(Mae_Koho), + NKS(Home), + NKS(Left), + NKS(Up), + NKS(Right), + NKS(Down), + NKS(Prior), + NKS(Page_Up), + NKS(Next), + NKS(Page_Down), + NKS(End), + NKS(Begin), + NKS(Select), + NKS(Print), + NKS(Execute), + NKS(Insert), + NKS(Undo), + NKS(Redo), + NKS(Menu), + NKS(Find), + NKS(Cancel), + NKS(Help), + NKS(Break), + NKS(Mode_switch), + NKS(script_switch), + NKS(Num_Lock), + NKS(KP_Space), + NKS(KP_Tab), + NKS(KP_Enter), + NKS(KP_F1), + NKS(KP_F2), + NKS(KP_F3), + NKS(KP_F4), + NKS(KP_Home), + NKS(KP_Left), + NKS(KP_Up), + NKS(KP_Right), + NKS(KP_Down), + NKS(KP_Prior), + NKS(KP_Page_Up), + NKS(KP_Next), + NKS(KP_Page_Down), + NKS(KP_End), + NKS(KP_Begin), + NKS(KP_Insert), + NKS(KP_Delete), + NKS(KP_Equal), + NKS(KP_Multiply), + NKS(KP_Add), + NKS(KP_Separator), + NKS(KP_Subtract), + NKS(KP_Decimal), + NKS(KP_Divide), + NKS(KP_0), + NKS(KP_1), + NKS(KP_2), + NKS(KP_3), + NKS(KP_4), + NKS(KP_5), + NKS(KP_6), + NKS(KP_7), + NKS(KP_8), + NKS(KP_9), + NKS(F1), + NKS(F2), + NKS(F3), + NKS(F4), + NKS(F5), + NKS(F6), + NKS(F7), + NKS(F8), + NKS(F9), + NKS(F10), + NKS(F11), + NKS(L1), + NKS(F12), + NKS(L2), + NKS(F13), + NKS(L3), + NKS(F14), + NKS(L4), + NKS(F15), + NKS(L5), + NKS(F16), + NKS(L6), + NKS(F17), + NKS(L7), + NKS(F18), + NKS(L8), + NKS(F19), + NKS(L9), + NKS(F20), + NKS(L10), + NKS(F21), + NKS(R1), + NKS(F22), + NKS(R2), + NKS(F23), + NKS(R3), + NKS(F24), + NKS(R4), + NKS(F25), + NKS(R5), + NKS(F26), + NKS(R6), + NKS(F27), + NKS(R7), + NKS(F28), + NKS(R8), + NKS(F29), + NKS(R9), + NKS(F30), + NKS(R10), + NKS(F31), + NKS(R11), + NKS(F32), + NKS(R12), + NKS(F33), + NKS(R13), + NKS(F34), + NKS(R14), + NKS(F35), + NKS(R15), + NKS(Shift_L), + NKS(Shift_R), + NKS(Control_L), + NKS(Control_R), + NKS(Caps_Lock), + NKS(Shift_Lock), + NKS(Meta_L), + NKS(Meta_R), + NKS(Alt_L), + NKS(Alt_R), + NKS(Super_L), + NKS(Super_R), + NKS(Hyper_L), + NKS(Hyper_R), +#endif /* XK_MISCELLANY */ +#ifdef XK_XKB_KEYS + NKS(ISO_Lock), + NKS(ISO_Level2_Latch), + NKS(ISO_Level3_Shift), + NKS(ISO_Level3_Latch), + NKS(ISO_Level3_Lock), + NKS(ISO_Level5_Shift), + NKS(ISO_Level5_Latch), + NKS(ISO_Level5_Lock), + NKS(ISO_Group_Shift), + NKS(ISO_Group_Latch), + NKS(ISO_Group_Lock), + NKS(ISO_Next_Group), + NKS(ISO_Next_Group_Lock), + NKS(ISO_Prev_Group), + NKS(ISO_Prev_Group_Lock), + NKS(ISO_First_Group), + NKS(ISO_First_Group_Lock), + NKS(ISO_Last_Group), + NKS(ISO_Last_Group_Lock), + NKS(ISO_Left_Tab), + NKS(ISO_Move_Line_Up), + NKS(ISO_Move_Line_Down), + NKS(ISO_Partial_Line_Up), + NKS(ISO_Partial_Line_Down), + NKS(ISO_Partial_Space_Left), + NKS(ISO_Partial_Space_Right), + NKS(ISO_Set_Margin_Left), + NKS(ISO_Set_Margin_Right), + NKS(ISO_Release_Margin_Left), + NKS(ISO_Release_Margin_Right), + NKS(ISO_Release_Both_Margins), + NKS(ISO_Fast_Cursor_Left), + NKS(ISO_Fast_Cursor_Right), + NKS(ISO_Fast_Cursor_Up), + NKS(ISO_Fast_Cursor_Down), + NKS(ISO_Continuous_Underline), + NKS(ISO_Discontinuous_Underline), + NKS(ISO_Emphasize), + NKS(ISO_Center_Object), + NKS(ISO_Enter), + NKS(dead_grave), + NKS(dead_acute), + NKS(dead_circumflex), + NKS(dead_tilde), + NKS(dead_perispomeni), + NKS(dead_macron), + NKS(dead_breve), + NKS(dead_abovedot), + NKS(dead_diaeresis), + NKS(dead_abovering), + NKS(dead_doubleacute), + NKS(dead_caron), + NKS(dead_cedilla), + NKS(dead_ogonek), + NKS(dead_iota), + NKS(dead_voiced_sound), + NKS(dead_semivoiced_sound), + NKS(dead_belowdot), + NKS(dead_hook), + NKS(dead_horn), + NKS(dead_stroke), + NKS(dead_abovecomma), + NKS(dead_psili), + NKS(dead_abovereversedcomma), + NKS(dead_dasia), + NKS(dead_doublegrave), + NKS(dead_belowring), + NKS(dead_belowmacron), + NKS(dead_belowcircumflex), + NKS(dead_belowtilde), + NKS(dead_belowbreve), + NKS(dead_belowdiaeresis), + NKS(dead_invertedbreve), + NKS(dead_belowcomma), + NKS(dead_currency), + NKS(dead_a), + NKS(dead_A), + NKS(dead_e), + NKS(dead_E), + NKS(dead_i), + NKS(dead_I), + NKS(dead_o), + NKS(dead_O), + NKS(dead_u), + NKS(dead_U), + NKS(dead_small_schwa), + NKS(dead_capital_schwa), + NKS(dead_greek), + NKS(First_Virtual_Screen), + NKS(Prev_Virtual_Screen), + NKS(Next_Virtual_Screen), + NKS(Last_Virtual_Screen), + NKS(Terminate_Server), + NKS(AccessX_Enable), + NKS(AccessX_Feedback_Enable), + NKS(RepeatKeys_Enable), + NKS(SlowKeys_Enable), + NKS(BounceKeys_Enable), + NKS(StickyKeys_Enable), + NKS(MouseKeys_Enable), + NKS(MouseKeys_Accel_Enable), + NKS(Overlay1_Enable), + NKS(Overlay2_Enable), + NKS(AudibleBell_Enable), + NKS(Pointer_Left), + NKS(Pointer_Right), + NKS(Pointer_Up), + NKS(Pointer_Down), + NKS(Pointer_UpLeft), + NKS(Pointer_UpRight), + NKS(Pointer_DownLeft), + NKS(Pointer_DownRight), + NKS(Pointer_Button_Dflt), + NKS(Pointer_Button1), + NKS(Pointer_Button2), + NKS(Pointer_Button3), + NKS(Pointer_Button4), + NKS(Pointer_Button5), + NKS(Pointer_DblClick_Dflt), + NKS(Pointer_DblClick1), + NKS(Pointer_DblClick2), + NKS(Pointer_DblClick3), + NKS(Pointer_DblClick4), + NKS(Pointer_DblClick5), + NKS(Pointer_Drag_Dflt), + NKS(Pointer_Drag1), + NKS(Pointer_Drag2), + NKS(Pointer_Drag3), + NKS(Pointer_Drag4), + NKS(Pointer_Drag5), + NKS(Pointer_EnableKeys), + NKS(Pointer_Accelerate), + NKS(Pointer_DfltBtnNext), + NKS(Pointer_DfltBtnPrev), + NKS(ch), + NKS(Ch), + NKS(CH), + NKS(c_h), + NKS(C_h), + NKS(C_H), +#endif /* XK_XKB_KEYS */ +#ifdef XK_3270 + NKS(3270_Duplicate), + NKS(3270_FieldMark), + NKS(3270_Right2), + NKS(3270_Left2), + NKS(3270_BackTab), + NKS(3270_EraseEOF), + NKS(3270_EraseInput), + NKS(3270_Reset), + NKS(3270_Quit), + NKS(3270_PA1), + NKS(3270_PA2), + NKS(3270_PA3), + NKS(3270_Test), + NKS(3270_Attn), + NKS(3270_CursorBlink), + NKS(3270_AltCursor), + NKS(3270_KeyClick), + NKS(3270_Jump), + NKS(3270_Ident), + NKS(3270_Rule), + NKS(3270_Copy), + NKS(3270_Play), + NKS(3270_Setup), + NKS(3270_Record), + NKS(3270_ChangeScreen), + NKS(3270_DeleteWord), + NKS(3270_ExSelect), + NKS(3270_CursorSelect), + NKS(3270_PrintScreen), + NKS(3270_Enter), +#endif /* XK_3270 */ +#ifdef XK_LATIN1 + NKS(space), + NKS(exclam), + NKS(quotedbl), + NKS(numbersign), + NKS(dollar), + NKS(percent), + NKS(ampersand), + NKS(apostrophe), + NKS(quoteright), + NKS(parenleft), + NKS(parenright), + NKS(asterisk), + NKS(plus), + NKS(comma), + NKS(minus), + NKS(period), + NKS(slash), + NKS(0), + NKS(1), + NKS(2), + NKS(3), + NKS(4), + NKS(5), + NKS(6), + NKS(7), + NKS(8), + NKS(9), + NKS(colon), + NKS(semicolon), + NKS(less), + NKS(equal), + NKS(greater), + NKS(question), + NKS(at), + NKS(A), + NKS(B), + NKS(C), + NKS(D), + NKS(E), + NKS(F), + NKS(G), + NKS(H), + NKS(I), + NKS(J), + NKS(K), + NKS(L), + NKS(M), + NKS(N), + NKS(O), + NKS(P), + NKS(Q), + NKS(R), + NKS(S), + NKS(T), + NKS(U), + NKS(V), + NKS(W), + NKS(X), + NKS(Y), + NKS(Z), + NKS(bracketleft), + NKS(backslash), + NKS(bracketright), + NKS(asciicircum), + NKS(underscore), + NKS(grave), + NKS(quoteleft), + NKS(a), + NKS(b), + NKS(c), + NKS(d), + NKS(e), + NKS(f), + NKS(g), + NKS(h), + NKS(i), + NKS(j), + NKS(k), + NKS(l), + NKS(m), + NKS(n), + NKS(o), + NKS(p), + NKS(q), + NKS(r), + NKS(s), + NKS(t), + NKS(u), + NKS(v), + NKS(w), + NKS(x), + NKS(y), + NKS(z), + NKS(braceleft), + NKS(bar), + NKS(braceright), + NKS(asciitilde), + NKS(nobreakspace), + NKS(exclamdown), + NKS(cent), + NKS(sterling), + NKS(currency), + NKS(yen), + NKS(brokenbar), + NKS(section), + NKS(diaeresis), + NKS(copyright), + NKS(ordfeminine), + NKS(guillemotleft), + NKS(notsign), + NKS(hyphen), + NKS(registered), + NKS(macron), + NKS(degree), + NKS(plusminus), + NKS(twosuperior), + NKS(threesuperior), + NKS(acute), + NKS(mu), + NKS(paragraph), + NKS(periodcentered), + NKS(cedilla), + NKS(onesuperior), + NKS(masculine), + NKS(guillemotright), + NKS(onequarter), + NKS(onehalf), + NKS(threequarters), + NKS(questiondown), + NKS(Agrave), + NKS(Aacute), + NKS(Acircumflex), + NKS(Atilde), + NKS(Adiaeresis), + NKS(Aring), + NKS(AE), + NKS(Ccedilla), + NKS(Egrave), + NKS(Eacute), + NKS(Ecircumflex), + NKS(Ediaeresis), + NKS(Igrave), + NKS(Iacute), + NKS(Icircumflex), + NKS(Idiaeresis), + NKS(ETH), + NKS(Eth), + NKS(Ntilde), + NKS(Ograve), + NKS(Oacute), + NKS(Ocircumflex), + NKS(Otilde), + NKS(Odiaeresis), + NKS(multiply), + NKS(Oslash), + NKS(Ooblique), + NKS(Ugrave), + NKS(Uacute), + NKS(Ucircumflex), + NKS(Udiaeresis), + NKS(Yacute), + NKS(THORN), + NKS(Thorn), + NKS(ssharp), + NKS(agrave), + NKS(aacute), + NKS(acircumflex), + NKS(atilde), + NKS(adiaeresis), + NKS(aring), + NKS(ae), + NKS(ccedilla), + NKS(egrave), + NKS(eacute), + NKS(ecircumflex), + NKS(ediaeresis), + NKS(igrave), + NKS(iacute), + NKS(icircumflex), + NKS(idiaeresis), + NKS(eth), + NKS(ntilde), + NKS(ograve), + NKS(oacute), + NKS(ocircumflex), + NKS(otilde), + NKS(odiaeresis), + NKS(division), + NKS(oslash), + NKS(ooblique), + NKS(ugrave), + NKS(uacute), + NKS(ucircumflex), + NKS(udiaeresis), + NKS(yacute), + NKS(thorn), + NKS(ydiaeresis), +#endif /* XK_LATIN1 */ +#ifdef XK_LATIN2 + NKS(Aogonek), + NKS(breve), + NKS(Lstroke), + NKS(Lcaron), + NKS(Sacute), + NKS(Scaron), + NKS(Scedilla), + NKS(Tcaron), + NKS(Zacute), + NKS(Zcaron), + NKS(Zabovedot), + NKS(aogonek), + NKS(ogonek), + NKS(lstroke), + NKS(lcaron), + NKS(sacute), + NKS(caron), + NKS(scaron), + NKS(scedilla), + NKS(tcaron), + NKS(zacute), + NKS(doubleacute), + NKS(zcaron), + NKS(zabovedot), + NKS(Racute), + NKS(Abreve), + NKS(Lacute), + NKS(Cacute), + NKS(Ccaron), + NKS(Eogonek), + NKS(Ecaron), + NKS(Dcaron), + NKS(Dstroke), + NKS(Nacute), + NKS(Ncaron), + NKS(Odoubleacute), + NKS(Rcaron), + NKS(Uring), + NKS(Udoubleacute), + NKS(Tcedilla), + NKS(racute), + NKS(abreve), + NKS(lacute), + NKS(cacute), + NKS(ccaron), + NKS(eogonek), + NKS(ecaron), + NKS(dcaron), + NKS(dstroke), + NKS(nacute), + NKS(ncaron), + NKS(odoubleacute), + NKS(rcaron), + NKS(uring), + NKS(udoubleacute), + NKS(tcedilla), + NKS(abovedot), +#endif /* XK_LATIN2 */ +#ifdef XK_LATIN3 + NKS(Hstroke), + NKS(Hcircumflex), + NKS(Iabovedot), + NKS(Gbreve), + NKS(Jcircumflex), + NKS(hstroke), + NKS(hcircumflex), + NKS(idotless), + NKS(gbreve), + NKS(jcircumflex), + NKS(Cabovedot), + NKS(Ccircumflex), + NKS(Gabovedot), + NKS(Gcircumflex), + NKS(Ubreve), + NKS(Scircumflex), + NKS(cabovedot), + NKS(ccircumflex), + NKS(gabovedot), + NKS(gcircumflex), + NKS(ubreve), + NKS(scircumflex), +#endif /* XK_LATIN3 */ +#ifdef XK_LATIN4 + NKS(kra), + NKS(kappa), + NKS(Rcedilla), + NKS(Itilde), + NKS(Lcedilla), + NKS(Emacron), + NKS(Gcedilla), + NKS(Tslash), + NKS(rcedilla), + NKS(itilde), + NKS(lcedilla), + NKS(emacron), + NKS(gcedilla), + NKS(tslash), + NKS(ENG), + NKS(eng), + NKS(Amacron), + NKS(Iogonek), + NKS(Eabovedot), + NKS(Imacron), + NKS(Ncedilla), + NKS(Omacron), + NKS(Kcedilla), + NKS(Uogonek), + NKS(Utilde), + NKS(Umacron), + NKS(amacron), + NKS(iogonek), + NKS(eabovedot), + NKS(imacron), + NKS(ncedilla), + NKS(omacron), + NKS(kcedilla), + NKS(uogonek), + NKS(utilde), + NKS(umacron), +#endif /* XK_LATIN4 */ +#ifdef XK_LATIN8 + NKS(Wcircumflex), + NKS(wcircumflex), + NKS(Ycircumflex), + NKS(ycircumflex), + NKS(Babovedot), + NKS(babovedot), + NKS(Dabovedot), + NKS(dabovedot), + NKS(Fabovedot), + NKS(fabovedot), + NKS(Mabovedot), + NKS(mabovedot), + NKS(Pabovedot), + NKS(pabovedot), + NKS(Sabovedot), + NKS(sabovedot), + NKS(Tabovedot), + NKS(tabovedot), + NKS(Wgrave), + NKS(wgrave), + NKS(Wacute), + NKS(wacute), + NKS(Wdiaeresis), + NKS(wdiaeresis), + NKS(Ygrave), + NKS(ygrave), +#endif /* XK_LATIN8 */ +#ifdef XK_LATIN9 + NKS(OE), + NKS(oe), + NKS(Ydiaeresis), +#endif /* XK_LATIN9 */ +#ifdef XK_KATAKANA + NKS(overline), + NKS(kana_fullstop), + NKS(kana_openingbracket), + NKS(kana_closingbracket), + NKS(kana_comma), + NKS(kana_conjunctive), + NKS(kana_middledot), + NKS(kana_WO), + NKS(kana_a), + NKS(kana_i), + NKS(kana_u), + NKS(kana_e), + NKS(kana_o), + NKS(kana_ya), + NKS(kana_yu), + NKS(kana_yo), + NKS(kana_tsu), + NKS(kana_tu), + NKS(prolongedsound), + NKS(kana_A), + NKS(kana_I), + NKS(kana_U), + NKS(kana_E), + NKS(kana_O), + NKS(kana_KA), + NKS(kana_KI), + NKS(kana_KU), + NKS(kana_KE), + NKS(kana_KO), + NKS(kana_SA), + NKS(kana_SHI), + NKS(kana_SU), + NKS(kana_SE), + NKS(kana_SO), + NKS(kana_TA), + NKS(kana_CHI), + NKS(kana_TI), + NKS(kana_TSU), + NKS(kana_TU), + NKS(kana_TE), + NKS(kana_TO), + NKS(kana_NA), + NKS(kana_NI), + NKS(kana_NU), + NKS(kana_NE), + NKS(kana_NO), + NKS(kana_HA), + NKS(kana_HI), + NKS(kana_FU), + NKS(kana_HU), + NKS(kana_HE), + NKS(kana_HO), + NKS(kana_MA), + NKS(kana_MI), + NKS(kana_MU), + NKS(kana_ME), + NKS(kana_MO), + NKS(kana_YA), + NKS(kana_YU), + NKS(kana_YO), + NKS(kana_RA), + NKS(kana_RI), + NKS(kana_RU), + NKS(kana_RE), + NKS(kana_RO), + NKS(kana_WA), + NKS(kana_N), + NKS(voicedsound), + NKS(semivoicedsound), + NKS(kana_switch), +#endif /* XK_KATAKANA */ +#ifdef XK_ARABIC + NKS(Farsi_0), + NKS(Farsi_1), + NKS(Farsi_2), + NKS(Farsi_3), + NKS(Farsi_4), + NKS(Farsi_5), + NKS(Farsi_6), + NKS(Farsi_7), + NKS(Farsi_8), + NKS(Farsi_9), + NKS(Arabic_percent), + NKS(Arabic_superscript_alef), + NKS(Arabic_tteh), + NKS(Arabic_peh), + NKS(Arabic_tcheh), + NKS(Arabic_ddal), + NKS(Arabic_rreh), + NKS(Arabic_comma), + NKS(Arabic_fullstop), + NKS(Arabic_0), + NKS(Arabic_1), + NKS(Arabic_2), + NKS(Arabic_3), + NKS(Arabic_4), + NKS(Arabic_5), + NKS(Arabic_6), + NKS(Arabic_7), + NKS(Arabic_8), + NKS(Arabic_9), + NKS(Arabic_semicolon), + NKS(Arabic_question_mark), + NKS(Arabic_hamza), + NKS(Arabic_maddaonalef), + NKS(Arabic_hamzaonalef), + NKS(Arabic_hamzaonwaw), + NKS(Arabic_hamzaunderalef), + NKS(Arabic_hamzaonyeh), + NKS(Arabic_alef), + NKS(Arabic_beh), + NKS(Arabic_tehmarbuta), + NKS(Arabic_teh), + NKS(Arabic_theh), + NKS(Arabic_jeem), + NKS(Arabic_hah), + NKS(Arabic_khah), + NKS(Arabic_dal), + NKS(Arabic_thal), + NKS(Arabic_ra), + NKS(Arabic_zain), + NKS(Arabic_seen), + NKS(Arabic_sheen), + NKS(Arabic_sad), + NKS(Arabic_dad), + NKS(Arabic_tah), + NKS(Arabic_zah), + NKS(Arabic_ain), + NKS(Arabic_ghain), + NKS(Arabic_tatweel), + NKS(Arabic_feh), + NKS(Arabic_qaf), + NKS(Arabic_kaf), + NKS(Arabic_lam), + NKS(Arabic_meem), + NKS(Arabic_noon), + NKS(Arabic_ha), + NKS(Arabic_heh), + NKS(Arabic_waw), + NKS(Arabic_alefmaksura), + NKS(Arabic_yeh), + NKS(Arabic_fathatan), + NKS(Arabic_dammatan), + NKS(Arabic_kasratan), + NKS(Arabic_fatha), + NKS(Arabic_damma), + NKS(Arabic_kasra), + NKS(Arabic_shadda), + NKS(Arabic_sukun), + NKS(Arabic_madda_above), + NKS(Arabic_hamza_above), + NKS(Arabic_hamza_below), + NKS(Arabic_jeh), + NKS(Arabic_veh), + NKS(Arabic_keheh), + NKS(Arabic_gaf), + NKS(Arabic_noon_ghunna), + NKS(Arabic_heh_doachashmee), + NKS(Farsi_yeh), + NKS(Arabic_farsi_yeh), + NKS(Arabic_yeh_baree), + NKS(Arabic_heh_goal), + NKS(Arabic_switch), +#endif /* XK_ARABIC */ +#ifdef XK_CYRILLIC + NKS(Cyrillic_GHE_bar), + NKS(Cyrillic_ghe_bar), + NKS(Cyrillic_ZHE_descender), + NKS(Cyrillic_zhe_descender), + NKS(Cyrillic_KA_descender), + NKS(Cyrillic_ka_descender), + NKS(Cyrillic_KA_vertstroke), + NKS(Cyrillic_ka_vertstroke), + NKS(Cyrillic_EN_descender), + NKS(Cyrillic_en_descender), + NKS(Cyrillic_U_straight), + NKS(Cyrillic_u_straight), + NKS(Cyrillic_U_straight_bar), + NKS(Cyrillic_u_straight_bar), + NKS(Cyrillic_HA_descender), + NKS(Cyrillic_ha_descender), + NKS(Cyrillic_CHE_descender), + NKS(Cyrillic_che_descender), + NKS(Cyrillic_CHE_vertstroke), + NKS(Cyrillic_che_vertstroke), + NKS(Cyrillic_SHHA), + NKS(Cyrillic_shha), + NKS(Cyrillic_SCHWA), + NKS(Cyrillic_schwa), + NKS(Cyrillic_I_macron), + NKS(Cyrillic_i_macron), + NKS(Cyrillic_O_bar), + NKS(Cyrillic_o_bar), + NKS(Cyrillic_U_macron), + NKS(Cyrillic_u_macron), + NKS(Serbian_dje), + NKS(Macedonia_gje), + NKS(Cyrillic_io), + NKS(Ukrainian_ie), + NKS(Ukranian_je), + NKS(Macedonia_dse), + NKS(Ukrainian_i), + NKS(Ukranian_i), + NKS(Ukrainian_yi), + NKS(Ukranian_yi), + NKS(Cyrillic_je), + NKS(Serbian_je), + NKS(Cyrillic_lje), + NKS(Serbian_lje), + NKS(Cyrillic_nje), + NKS(Serbian_nje), + NKS(Serbian_tshe), + NKS(Macedonia_kje), + NKS(Ukrainian_ghe_with_upturn), + NKS(Byelorussian_shortu), + NKS(Cyrillic_dzhe), + NKS(Serbian_dze), + NKS(numerosign), + NKS(Serbian_DJE), + NKS(Macedonia_GJE), + NKS(Cyrillic_IO), + NKS(Ukrainian_IE), + NKS(Ukranian_JE), + NKS(Macedonia_DSE), + NKS(Ukrainian_I), + NKS(Ukranian_I), + NKS(Ukrainian_YI), + NKS(Ukranian_YI), + NKS(Cyrillic_JE), + NKS(Serbian_JE), + NKS(Cyrillic_LJE), + NKS(Serbian_LJE), + NKS(Cyrillic_NJE), + NKS(Serbian_NJE), + NKS(Serbian_TSHE), + NKS(Macedonia_KJE), + NKS(Ukrainian_GHE_WITH_UPTURN), + NKS(Byelorussian_SHORTU), + NKS(Cyrillic_DZHE), + NKS(Serbian_DZE), + NKS(Cyrillic_yu), + NKS(Cyrillic_a), + NKS(Cyrillic_be), + NKS(Cyrillic_tse), + NKS(Cyrillic_de), + NKS(Cyrillic_ie), + NKS(Cyrillic_ef), + NKS(Cyrillic_ghe), + NKS(Cyrillic_ha), + NKS(Cyrillic_i), + NKS(Cyrillic_shorti), + NKS(Cyrillic_ka), + NKS(Cyrillic_el), + NKS(Cyrillic_em), + NKS(Cyrillic_en), + NKS(Cyrillic_o), + NKS(Cyrillic_pe), + NKS(Cyrillic_ya), + NKS(Cyrillic_er), + NKS(Cyrillic_es), + NKS(Cyrillic_te), + NKS(Cyrillic_u), + NKS(Cyrillic_zhe), + NKS(Cyrillic_ve), + NKS(Cyrillic_softsign), + NKS(Cyrillic_yeru), + NKS(Cyrillic_ze), + NKS(Cyrillic_sha), + NKS(Cyrillic_e), + NKS(Cyrillic_shcha), + NKS(Cyrillic_che), + NKS(Cyrillic_hardsign), + NKS(Cyrillic_YU), + NKS(Cyrillic_A), + NKS(Cyrillic_BE), + NKS(Cyrillic_TSE), + NKS(Cyrillic_DE), + NKS(Cyrillic_IE), + NKS(Cyrillic_EF), + NKS(Cyrillic_GHE), + NKS(Cyrillic_HA), + NKS(Cyrillic_I), + NKS(Cyrillic_SHORTI), + NKS(Cyrillic_KA), + NKS(Cyrillic_EL), + NKS(Cyrillic_EM), + NKS(Cyrillic_EN), + NKS(Cyrillic_O), + NKS(Cyrillic_PE), + NKS(Cyrillic_YA), + NKS(Cyrillic_ER), + NKS(Cyrillic_ES), + NKS(Cyrillic_TE), + NKS(Cyrillic_U), + NKS(Cyrillic_ZHE), + NKS(Cyrillic_VE), + NKS(Cyrillic_SOFTSIGN), + NKS(Cyrillic_YERU), + NKS(Cyrillic_ZE), + NKS(Cyrillic_SHA), + NKS(Cyrillic_E), + NKS(Cyrillic_SHCHA), + NKS(Cyrillic_CHE), + NKS(Cyrillic_HARDSIGN), +#endif /* XK_CYRILLIC */ +#ifdef XK_GREEK + NKS(Greek_ALPHAaccent), + NKS(Greek_EPSILONaccent), + NKS(Greek_ETAaccent), + NKS(Greek_IOTAaccent), + NKS(Greek_IOTAdieresis), + NKS(Greek_IOTAdiaeresis), + NKS(Greek_OMICRONaccent), + NKS(Greek_UPSILONaccent), + NKS(Greek_UPSILONdieresis), + NKS(Greek_OMEGAaccent), + NKS(Greek_accentdieresis), + NKS(Greek_horizbar), + NKS(Greek_alphaaccent), + NKS(Greek_epsilonaccent), + NKS(Greek_etaaccent), + NKS(Greek_iotaaccent), + NKS(Greek_iotadieresis), + NKS(Greek_iotaaccentdieresis), + NKS(Greek_omicronaccent), + NKS(Greek_upsilonaccent), + NKS(Greek_upsilondieresis), + NKS(Greek_upsilonaccentdieresis), + NKS(Greek_omegaaccent), + NKS(Greek_ALPHA), + NKS(Greek_BETA), + NKS(Greek_GAMMA), + NKS(Greek_DELTA), + NKS(Greek_EPSILON), + NKS(Greek_ZETA), + NKS(Greek_ETA), + NKS(Greek_THETA), + NKS(Greek_IOTA), + NKS(Greek_KAPPA), + NKS(Greek_LAMDA), + NKS(Greek_LAMBDA), + NKS(Greek_MU), + NKS(Greek_NU), + NKS(Greek_XI), + NKS(Greek_OMICRON), + NKS(Greek_PI), + NKS(Greek_RHO), + NKS(Greek_SIGMA), + NKS(Greek_TAU), + NKS(Greek_UPSILON), + NKS(Greek_PHI), + NKS(Greek_CHI), + NKS(Greek_PSI), + NKS(Greek_OMEGA), + NKS(Greek_alpha), + NKS(Greek_beta), + NKS(Greek_gamma), + NKS(Greek_delta), + NKS(Greek_epsilon), + NKS(Greek_zeta), + NKS(Greek_eta), + NKS(Greek_theta), + NKS(Greek_iota), + NKS(Greek_kappa), + NKS(Greek_lamda), + NKS(Greek_lambda), + NKS(Greek_mu), + NKS(Greek_nu), + NKS(Greek_xi), + NKS(Greek_omicron), + NKS(Greek_pi), + NKS(Greek_rho), + NKS(Greek_sigma), + NKS(Greek_finalsmallsigma), + NKS(Greek_tau), + NKS(Greek_upsilon), + NKS(Greek_phi), + NKS(Greek_chi), + NKS(Greek_psi), + NKS(Greek_omega), + NKS(Greek_switch), +#endif /* XK_GREEK */ +#ifdef XK_TECHNICAL + NKS(leftradical), + NKS(topleftradical), + NKS(horizconnector), + NKS(topintegral), + NKS(botintegral), + NKS(vertconnector), + NKS(topleftsqbracket), + NKS(botleftsqbracket), + NKS(toprightsqbracket), + NKS(botrightsqbracket), + NKS(topleftparens), + NKS(botleftparens), + NKS(toprightparens), + NKS(botrightparens), + NKS(leftmiddlecurlybrace), + NKS(rightmiddlecurlybrace), + NKS(topleftsummation), + NKS(botleftsummation), + NKS(topvertsummationconnector), + NKS(botvertsummationconnector), + NKS(toprightsummation), + NKS(botrightsummation), + NKS(rightmiddlesummation), + NKS(lessthanequal), + NKS(notequal), + NKS(greaterthanequal), + NKS(integral), + NKS(therefore), + NKS(variation), + NKS(infinity), + NKS(nabla), + NKS(approximate), + NKS(similarequal), + NKS(ifonlyif), + NKS(implies), + NKS(identical), + NKS(radical), + NKS(includedin), + NKS(includes), + NKS(intersection), + NKS(union), + NKS(logicaland), + NKS(logicalor), + NKS(partialderivative), + NKS(function), + NKS(leftarrow), + NKS(uparrow), + NKS(rightarrow), + NKS(downarrow), +#endif /* XK_TECHNICAL */ +#ifdef XK_SPECIAL + NKS(blank), + NKS(soliddiamond), + NKS(checkerboard), + NKS(ht), + NKS(ff), + NKS(cr), + NKS(lf), + NKS(nl), + NKS(vt), + NKS(lowrightcorner), + NKS(uprightcorner), + NKS(upleftcorner), + NKS(lowleftcorner), + NKS(crossinglines), + NKS(horizlinescan1), + NKS(horizlinescan3), + NKS(horizlinescan5), + NKS(horizlinescan7), + NKS(horizlinescan9), + NKS(leftt), + NKS(rightt), + NKS(bott), + NKS(topt), + NKS(vertbar), +#endif /* XK_SPECIAL */ +#ifdef XK_PUBLISHING + NKS(emspace), + NKS(enspace), + NKS(em3space), + NKS(em4space), + NKS(digitspace), + NKS(punctspace), + NKS(thinspace), + NKS(hairspace), + NKS(emdash), + NKS(endash), + NKS(signifblank), + NKS(ellipsis), + NKS(doubbaselinedot), + NKS(onethird), + NKS(twothirds), + NKS(onefifth), + NKS(twofifths), + NKS(threefifths), + NKS(fourfifths), + NKS(onesixth), + NKS(fivesixths), + NKS(careof), + NKS(figdash), + NKS(leftanglebracket), + NKS(decimalpoint), + NKS(rightanglebracket), + NKS(marker), + NKS(oneeighth), + NKS(threeeighths), + NKS(fiveeighths), + NKS(seveneighths), + NKS(trademark), + NKS(signaturemark), + NKS(trademarkincircle), + NKS(leftopentriangle), + NKS(rightopentriangle), + NKS(emopencircle), + NKS(emopenrectangle), + NKS(leftsinglequotemark), + NKS(rightsinglequotemark), + NKS(leftdoublequotemark), + NKS(rightdoublequotemark), + NKS(prescription), + NKS(permille), + NKS(minutes), + NKS(seconds), + NKS(latincross), + NKS(hexagram), + NKS(filledrectbullet), + NKS(filledlefttribullet), + NKS(filledrighttribullet), + NKS(emfilledcircle), + NKS(emfilledrect), + NKS(enopencircbullet), + NKS(enopensquarebullet), + NKS(openrectbullet), + NKS(opentribulletup), + NKS(opentribulletdown), + NKS(openstar), + NKS(enfilledcircbullet), + NKS(enfilledsqbullet), + NKS(filledtribulletup), + NKS(filledtribulletdown), + NKS(leftpointer), + NKS(rightpointer), + NKS(club), + NKS(diamond), + NKS(heart), + NKS(maltesecross), + NKS(dagger), + NKS(doubledagger), + NKS(checkmark), + NKS(ballotcross), + NKS(musicalsharp), + NKS(musicalflat), + NKS(malesymbol), + NKS(femalesymbol), + NKS(telephone), + NKS(telephonerecorder), + NKS(phonographcopyright), + NKS(caret), + NKS(singlelowquotemark), + NKS(doublelowquotemark), + NKS(cursor), +#endif /* XK_PUBLISHING */ +#ifdef XK_APL + NKS(leftcaret), + NKS(rightcaret), + NKS(downcaret), + NKS(upcaret), + NKS(overbar), + NKS(downtack), + NKS(upshoe), + NKS(downstile), + NKS(underbar), + NKS(jot), + NKS(quad), + NKS(uptack), + NKS(circle), + NKS(upstile), + NKS(downshoe), + NKS(rightshoe), + NKS(leftshoe), + NKS(lefttack), + NKS(righttack), +#endif /* XK_APL */ +#ifdef XK_HEBREW + NKS(hebrew_doublelowline), + NKS(hebrew_aleph), + NKS(hebrew_bet), + NKS(hebrew_beth), + NKS(hebrew_gimel), + NKS(hebrew_gimmel), + NKS(hebrew_dalet), + NKS(hebrew_daleth), + NKS(hebrew_he), + NKS(hebrew_waw), + NKS(hebrew_zain), + NKS(hebrew_zayin), + NKS(hebrew_chet), + NKS(hebrew_het), + NKS(hebrew_tet), + NKS(hebrew_teth), + NKS(hebrew_yod), + NKS(hebrew_finalkaph), + NKS(hebrew_kaph), + NKS(hebrew_lamed), + NKS(hebrew_finalmem), + NKS(hebrew_mem), + NKS(hebrew_finalnun), + NKS(hebrew_nun), + NKS(hebrew_samech), + NKS(hebrew_samekh), + NKS(hebrew_ayin), + NKS(hebrew_finalpe), + NKS(hebrew_pe), + NKS(hebrew_finalzade), + NKS(hebrew_finalzadi), + NKS(hebrew_zade), + NKS(hebrew_zadi), + NKS(hebrew_qoph), + NKS(hebrew_kuf), + NKS(hebrew_resh), + NKS(hebrew_shin), + NKS(hebrew_taw), + NKS(hebrew_taf), + NKS(Hebrew_switch), +#endif /* XK_HEBREW */ +#ifdef XK_THAI + NKS(Thai_kokai), + NKS(Thai_khokhai), + NKS(Thai_khokhuat), + NKS(Thai_khokhwai), + NKS(Thai_khokhon), + NKS(Thai_khorakhang), + NKS(Thai_ngongu), + NKS(Thai_chochan), + NKS(Thai_choching), + NKS(Thai_chochang), + NKS(Thai_soso), + NKS(Thai_chochoe), + NKS(Thai_yoying), + NKS(Thai_dochada), + NKS(Thai_topatak), + NKS(Thai_thothan), + NKS(Thai_thonangmontho), + NKS(Thai_thophuthao), + NKS(Thai_nonen), + NKS(Thai_dodek), + NKS(Thai_totao), + NKS(Thai_thothung), + NKS(Thai_thothahan), + NKS(Thai_thothong), + NKS(Thai_nonu), + NKS(Thai_bobaimai), + NKS(Thai_popla), + NKS(Thai_phophung), + NKS(Thai_fofa), + NKS(Thai_phophan), + NKS(Thai_fofan), + NKS(Thai_phosamphao), + NKS(Thai_moma), + NKS(Thai_yoyak), + NKS(Thai_rorua), + NKS(Thai_ru), + NKS(Thai_loling), + NKS(Thai_lu), + NKS(Thai_wowaen), + NKS(Thai_sosala), + NKS(Thai_sorusi), + NKS(Thai_sosua), + NKS(Thai_hohip), + NKS(Thai_lochula), + NKS(Thai_oang), + NKS(Thai_honokhuk), + NKS(Thai_paiyannoi), + NKS(Thai_saraa), + NKS(Thai_maihanakat), + NKS(Thai_saraaa), + NKS(Thai_saraam), + NKS(Thai_sarai), + NKS(Thai_saraii), + NKS(Thai_saraue), + NKS(Thai_sarauee), + NKS(Thai_sarau), + NKS(Thai_sarauu), + NKS(Thai_phinthu), + NKS(Thai_maihanakat_maitho), + NKS(Thai_baht), + NKS(Thai_sarae), + NKS(Thai_saraae), + NKS(Thai_sarao), + NKS(Thai_saraaimaimuan), + NKS(Thai_saraaimaimalai), + NKS(Thai_lakkhangyao), + NKS(Thai_maiyamok), + NKS(Thai_maitaikhu), + NKS(Thai_maiek), + NKS(Thai_maitho), + NKS(Thai_maitri), + NKS(Thai_maichattawa), + NKS(Thai_thanthakhat), + NKS(Thai_nikhahit), + NKS(Thai_leksun), + NKS(Thai_leknung), + NKS(Thai_leksong), + NKS(Thai_leksam), + NKS(Thai_leksi), + NKS(Thai_lekha), + NKS(Thai_lekhok), + NKS(Thai_lekchet), + NKS(Thai_lekpaet), + NKS(Thai_lekkao), +#endif /* XK_THAI */ +#ifdef XK_KOREAN + NKS(Hangul), + NKS(Hangul_Start), + NKS(Hangul_End), + NKS(Hangul_Hanja), + NKS(Hangul_Jamo), + NKS(Hangul_Romaja), + NKS(Hangul_Codeinput), + NKS(Hangul_Jeonja), + NKS(Hangul_Banja), + NKS(Hangul_PreHanja), + NKS(Hangul_PostHanja), + NKS(Hangul_SingleCandidate), + NKS(Hangul_MultipleCandidate), + NKS(Hangul_PreviousCandidate), + NKS(Hangul_Special), + NKS(Hangul_switch), + NKS(Hangul_Kiyeog), + NKS(Hangul_SsangKiyeog), + NKS(Hangul_KiyeogSios), + NKS(Hangul_Nieun), + NKS(Hangul_NieunJieuj), + NKS(Hangul_NieunHieuh), + NKS(Hangul_Dikeud), + NKS(Hangul_SsangDikeud), + NKS(Hangul_Rieul), + NKS(Hangul_RieulKiyeog), + NKS(Hangul_RieulMieum), + NKS(Hangul_RieulPieub), + NKS(Hangul_RieulSios), + NKS(Hangul_RieulTieut), + NKS(Hangul_RieulPhieuf), + NKS(Hangul_RieulHieuh), + NKS(Hangul_Mieum), + NKS(Hangul_Pieub), + NKS(Hangul_SsangPieub), + NKS(Hangul_PieubSios), + NKS(Hangul_Sios), + NKS(Hangul_SsangSios), + NKS(Hangul_Ieung), + NKS(Hangul_Jieuj), + NKS(Hangul_SsangJieuj), + NKS(Hangul_Cieuc), + NKS(Hangul_Khieuq), + NKS(Hangul_Tieut), + NKS(Hangul_Phieuf), + NKS(Hangul_Hieuh), + NKS(Hangul_A), + NKS(Hangul_AE), + NKS(Hangul_YA), + NKS(Hangul_YAE), + NKS(Hangul_EO), + NKS(Hangul_E), + NKS(Hangul_YEO), + NKS(Hangul_YE), + NKS(Hangul_O), + NKS(Hangul_WA), + NKS(Hangul_WAE), + NKS(Hangul_OE), + NKS(Hangul_YO), + NKS(Hangul_U), + NKS(Hangul_WEO), + NKS(Hangul_WE), + NKS(Hangul_WI), + NKS(Hangul_YU), + NKS(Hangul_EU), + NKS(Hangul_YI), + NKS(Hangul_I), + NKS(Hangul_J_Kiyeog), + NKS(Hangul_J_SsangKiyeog), + NKS(Hangul_J_KiyeogSios), + NKS(Hangul_J_Nieun), + NKS(Hangul_J_NieunJieuj), + NKS(Hangul_J_NieunHieuh), + NKS(Hangul_J_Dikeud), + NKS(Hangul_J_Rieul), + NKS(Hangul_J_RieulKiyeog), + NKS(Hangul_J_RieulMieum), + NKS(Hangul_J_RieulPieub), + NKS(Hangul_J_RieulSios), + NKS(Hangul_J_RieulTieut), + NKS(Hangul_J_RieulPhieuf), + NKS(Hangul_J_RieulHieuh), + NKS(Hangul_J_Mieum), + NKS(Hangul_J_Pieub), + NKS(Hangul_J_PieubSios), + NKS(Hangul_J_Sios), + NKS(Hangul_J_SsangSios), + NKS(Hangul_J_Ieung), + NKS(Hangul_J_Jieuj), + NKS(Hangul_J_Cieuc), + NKS(Hangul_J_Khieuq), + NKS(Hangul_J_Tieut), + NKS(Hangul_J_Phieuf), + NKS(Hangul_J_Hieuh), + NKS(Hangul_RieulYeorinHieuh), + NKS(Hangul_SunkyeongeumMieum), + NKS(Hangul_SunkyeongeumPieub), + NKS(Hangul_PanSios), + NKS(Hangul_KkogjiDalrinIeung), + NKS(Hangul_SunkyeongeumPhieuf), + NKS(Hangul_YeorinHieuh), + NKS(Hangul_AraeA), + NKS(Hangul_AraeAE), + NKS(Hangul_J_PanSios), + NKS(Hangul_J_KkogjiDalrinIeung), + NKS(Hangul_J_YeorinHieuh), + NKS(Korean_Won), +#endif /* XK_KOREAN */ +#ifdef XK_ARMENIAN + NKS(Armenian_ligature_ew), + NKS(Armenian_full_stop), + NKS(Armenian_verjaket), + NKS(Armenian_separation_mark), + NKS(Armenian_but), + NKS(Armenian_hyphen), + NKS(Armenian_yentamna), + NKS(Armenian_exclam), + NKS(Armenian_amanak), + NKS(Armenian_accent), + NKS(Armenian_shesht), + NKS(Armenian_question), + NKS(Armenian_paruyk), + NKS(Armenian_AYB), + NKS(Armenian_ayb), + NKS(Armenian_BEN), + NKS(Armenian_ben), + NKS(Armenian_GIM), + NKS(Armenian_gim), + NKS(Armenian_DA), + NKS(Armenian_da), + NKS(Armenian_YECH), + NKS(Armenian_yech), + NKS(Armenian_ZA), + NKS(Armenian_za), + NKS(Armenian_E), + NKS(Armenian_e), + NKS(Armenian_AT), + NKS(Armenian_at), + NKS(Armenian_TO), + NKS(Armenian_to), + NKS(Armenian_ZHE), + NKS(Armenian_zhe), + NKS(Armenian_INI), + NKS(Armenian_ini), + NKS(Armenian_LYUN), + NKS(Armenian_lyun), + NKS(Armenian_KHE), + NKS(Armenian_khe), + NKS(Armenian_TSA), + NKS(Armenian_tsa), + NKS(Armenian_KEN), + NKS(Armenian_ken), + NKS(Armenian_HO), + NKS(Armenian_ho), + NKS(Armenian_DZA), + NKS(Armenian_dza), + NKS(Armenian_GHAT), + NKS(Armenian_ghat), + NKS(Armenian_TCHE), + NKS(Armenian_tche), + NKS(Armenian_MEN), + NKS(Armenian_men), + NKS(Armenian_HI), + NKS(Armenian_hi), + NKS(Armenian_NU), + NKS(Armenian_nu), + NKS(Armenian_SHA), + NKS(Armenian_sha), + NKS(Armenian_VO), + NKS(Armenian_vo), + NKS(Armenian_CHA), + NKS(Armenian_cha), + NKS(Armenian_PE), + NKS(Armenian_pe), + NKS(Armenian_JE), + NKS(Armenian_je), + NKS(Armenian_RA), + NKS(Armenian_ra), + NKS(Armenian_SE), + NKS(Armenian_se), + NKS(Armenian_VEV), + NKS(Armenian_vev), + NKS(Armenian_TYUN), + NKS(Armenian_tyun), + NKS(Armenian_RE), + NKS(Armenian_re), + NKS(Armenian_TSO), + NKS(Armenian_tso), + NKS(Armenian_VYUN), + NKS(Armenian_vyun), + NKS(Armenian_PYUR), + NKS(Armenian_pyur), + NKS(Armenian_KE), + NKS(Armenian_ke), + NKS(Armenian_O), + NKS(Armenian_o), + NKS(Armenian_FE), + NKS(Armenian_fe), + NKS(Armenian_apostrophe), +#endif /* XK_ARMENIAN */ +#ifdef XK_GEORGIAN + NKS(Georgian_an), + NKS(Georgian_ban), + NKS(Georgian_gan), + NKS(Georgian_don), + NKS(Georgian_en), + NKS(Georgian_vin), + NKS(Georgian_zen), + NKS(Georgian_tan), + NKS(Georgian_in), + NKS(Georgian_kan), + NKS(Georgian_las), + NKS(Georgian_man), + NKS(Georgian_nar), + NKS(Georgian_on), + NKS(Georgian_par), + NKS(Georgian_zhar), + NKS(Georgian_rae), + NKS(Georgian_san), + NKS(Georgian_tar), + NKS(Georgian_un), + NKS(Georgian_phar), + NKS(Georgian_khar), + NKS(Georgian_ghan), + NKS(Georgian_qar), + NKS(Georgian_shin), + NKS(Georgian_chin), + NKS(Georgian_can), + NKS(Georgian_jil), + NKS(Georgian_cil), + NKS(Georgian_char), + NKS(Georgian_xan), + NKS(Georgian_jhan), + NKS(Georgian_hae), + NKS(Georgian_he), + NKS(Georgian_hie), + NKS(Georgian_we), + NKS(Georgian_har), + NKS(Georgian_hoe), + NKS(Georgian_fi), +#endif /* XK_GEORGIAN */ +#ifdef XK_CAUCASUS + NKS(Xabovedot), + NKS(Ibreve), + NKS(Zstroke), + NKS(Gcaron), + NKS(Ocaron), + NKS(Obarred), + NKS(xabovedot), + NKS(ibreve), + NKS(zstroke), + NKS(gcaron), + NKS(ocaron), + NKS(obarred), + NKS(SCHWA), + NKS(schwa), + NKS(EZH), + NKS(ezh), + NKS(Lbelowdot), + NKS(lbelowdot), +#endif /* XK_CAUCASUS */ +#ifdef XK_VIETNAMESE + NKS(Abelowdot), + NKS(abelowdot), + NKS(Ahook), + NKS(ahook), + NKS(Acircumflexacute), + NKS(acircumflexacute), + NKS(Acircumflexgrave), + NKS(acircumflexgrave), + NKS(Acircumflexhook), + NKS(acircumflexhook), + NKS(Acircumflextilde), + NKS(acircumflextilde), + NKS(Acircumflexbelowdot), + NKS(acircumflexbelowdot), + NKS(Abreveacute), + NKS(abreveacute), + NKS(Abrevegrave), + NKS(abrevegrave), + NKS(Abrevehook), + NKS(abrevehook), + NKS(Abrevetilde), + NKS(abrevetilde), + NKS(Abrevebelowdot), + NKS(abrevebelowdot), + NKS(Ebelowdot), + NKS(ebelowdot), + NKS(Ehook), + NKS(ehook), + NKS(Etilde), + NKS(etilde), + NKS(Ecircumflexacute), + NKS(ecircumflexacute), + NKS(Ecircumflexgrave), + NKS(ecircumflexgrave), + NKS(Ecircumflexhook), + NKS(ecircumflexhook), + NKS(Ecircumflextilde), + NKS(ecircumflextilde), + NKS(Ecircumflexbelowdot), + NKS(ecircumflexbelowdot), + NKS(Ihook), + NKS(ihook), + NKS(Ibelowdot), + NKS(ibelowdot), + NKS(Obelowdot), + NKS(obelowdot), + NKS(Ohook), + NKS(ohook), + NKS(Ocircumflexacute), + NKS(ocircumflexacute), + NKS(Ocircumflexgrave), + NKS(ocircumflexgrave), + NKS(Ocircumflexhook), + NKS(ocircumflexhook), + NKS(Ocircumflextilde), + NKS(ocircumflextilde), + NKS(Ocircumflexbelowdot), + NKS(ocircumflexbelowdot), + NKS(Ohornacute), + NKS(ohornacute), + NKS(Ohorngrave), + NKS(ohorngrave), + NKS(Ohornhook), + NKS(ohornhook), + NKS(Ohorntilde), + NKS(ohorntilde), + NKS(Ohornbelowdot), + NKS(ohornbelowdot), + NKS(Ubelowdot), + NKS(ubelowdot), + NKS(Uhook), + NKS(uhook), + NKS(Uhornacute), + NKS(uhornacute), + NKS(Uhorngrave), + NKS(uhorngrave), + NKS(Uhornhook), + NKS(uhornhook), + NKS(Uhorntilde), + NKS(uhorntilde), + NKS(Uhornbelowdot), + NKS(uhornbelowdot), + NKS(Ybelowdot), + NKS(ybelowdot), + NKS(Yhook), + NKS(yhook), + NKS(Ytilde), + NKS(ytilde), + NKS(Ohorn), + NKS(ohorn), + NKS(Uhorn), + NKS(uhorn), +#endif /* XK_VIETNAMESE */ +#ifdef XK_CURRENCY + NKS(EcuSign), + NKS(ColonSign), + NKS(CruzeiroSign), + NKS(FFrancSign), + NKS(LiraSign), + NKS(MillSign), + NKS(NairaSign), + NKS(PesetaSign), + NKS(RupeeSign), + NKS(WonSign), + NKS(NewSheqelSign), + NKS(DongSign), + NKS(EuroSign), +#endif /* XK_CURRENCY */ +#ifdef XK_MATHEMATICAL + NKS(zerosuperior), + NKS(foursuperior), + NKS(fivesuperior), + NKS(sixsuperior), + NKS(sevensuperior), + NKS(eightsuperior), + NKS(ninesuperior), + NKS(zerosubscript), + NKS(onesubscript), + NKS(twosubscript), + NKS(threesubscript), + NKS(foursubscript), + NKS(fivesubscript), + NKS(sixsubscript), + NKS(sevensubscript), + NKS(eightsubscript), + NKS(ninesubscript), + NKS(partdifferential), + NKS(emptyset), + NKS(elementof), + NKS(notelementof), + NKS(containsas), + NKS(squareroot), + NKS(cuberoot), + NKS(fourthroot), + NKS(dintegral), + NKS(tintegral), + NKS(because), + NKS(approxeq), + NKS(notapproxeq), + NKS(notidentical), + NKS(stricteq), +#endif /* XK_MATHEMATICAL */ +#ifdef XK_BRAILLE + NKS(braille_dot_1), + NKS(braille_dot_2), + NKS(braille_dot_3), + NKS(braille_dot_4), + NKS(braille_dot_5), + NKS(braille_dot_6), + NKS(braille_dot_7), + NKS(braille_dot_8), + NKS(braille_dot_9), + NKS(braille_dot_10), + NKS(braille_blank), + NKS(braille_dots_1), + NKS(braille_dots_2), + NKS(braille_dots_12), + NKS(braille_dots_3), + NKS(braille_dots_13), + NKS(braille_dots_23), + NKS(braille_dots_123), + NKS(braille_dots_4), + NKS(braille_dots_14), + NKS(braille_dots_24), + NKS(braille_dots_124), + NKS(braille_dots_34), + NKS(braille_dots_134), + NKS(braille_dots_234), + NKS(braille_dots_1234), + NKS(braille_dots_5), + NKS(braille_dots_15), + NKS(braille_dots_25), + NKS(braille_dots_125), + NKS(braille_dots_35), + NKS(braille_dots_135), + NKS(braille_dots_235), + NKS(braille_dots_1235), + NKS(braille_dots_45), + NKS(braille_dots_145), + NKS(braille_dots_245), + NKS(braille_dots_1245), + NKS(braille_dots_345), + NKS(braille_dots_1345), + NKS(braille_dots_2345), + NKS(braille_dots_12345), + NKS(braille_dots_6), + NKS(braille_dots_16), + NKS(braille_dots_26), + NKS(braille_dots_126), + NKS(braille_dots_36), + NKS(braille_dots_136), + NKS(braille_dots_236), + NKS(braille_dots_1236), + NKS(braille_dots_46), + NKS(braille_dots_146), + NKS(braille_dots_246), + NKS(braille_dots_1246), + NKS(braille_dots_346), + NKS(braille_dots_1346), + NKS(braille_dots_2346), + NKS(braille_dots_12346), + NKS(braille_dots_56), + NKS(braille_dots_156), + NKS(braille_dots_256), + NKS(braille_dots_1256), + NKS(braille_dots_356), + NKS(braille_dots_1356), + NKS(braille_dots_2356), + NKS(braille_dots_12356), + NKS(braille_dots_456), + NKS(braille_dots_1456), + NKS(braille_dots_2456), + NKS(braille_dots_12456), + NKS(braille_dots_3456), + NKS(braille_dots_13456), + NKS(braille_dots_23456), + NKS(braille_dots_123456), + NKS(braille_dots_7), + NKS(braille_dots_17), + NKS(braille_dots_27), + NKS(braille_dots_127), + NKS(braille_dots_37), + NKS(braille_dots_137), + NKS(braille_dots_237), + NKS(braille_dots_1237), + NKS(braille_dots_47), + NKS(braille_dots_147), + NKS(braille_dots_247), + NKS(braille_dots_1247), + NKS(braille_dots_347), + NKS(braille_dots_1347), + NKS(braille_dots_2347), + NKS(braille_dots_12347), + NKS(braille_dots_57), + NKS(braille_dots_157), + NKS(braille_dots_257), + NKS(braille_dots_1257), + NKS(braille_dots_357), + NKS(braille_dots_1357), + NKS(braille_dots_2357), + NKS(braille_dots_12357), + NKS(braille_dots_457), + NKS(braille_dots_1457), + NKS(braille_dots_2457), + NKS(braille_dots_12457), + NKS(braille_dots_3457), + NKS(braille_dots_13457), + NKS(braille_dots_23457), + NKS(braille_dots_123457), + NKS(braille_dots_67), + NKS(braille_dots_167), + NKS(braille_dots_267), + NKS(braille_dots_1267), + NKS(braille_dots_367), + NKS(braille_dots_1367), + NKS(braille_dots_2367), + NKS(braille_dots_12367), + NKS(braille_dots_467), + NKS(braille_dots_1467), + NKS(braille_dots_2467), + NKS(braille_dots_12467), + NKS(braille_dots_3467), + NKS(braille_dots_13467), + NKS(braille_dots_23467), + NKS(braille_dots_123467), + NKS(braille_dots_567), + NKS(braille_dots_1567), + NKS(braille_dots_2567), + NKS(braille_dots_12567), + NKS(braille_dots_3567), + NKS(braille_dots_13567), + NKS(braille_dots_23567), + NKS(braille_dots_123567), + NKS(braille_dots_4567), + NKS(braille_dots_14567), + NKS(braille_dots_24567), + NKS(braille_dots_124567), + NKS(braille_dots_34567), + NKS(braille_dots_134567), + NKS(braille_dots_234567), + NKS(braille_dots_1234567), + NKS(braille_dots_8), + NKS(braille_dots_18), + NKS(braille_dots_28), + NKS(braille_dots_128), + NKS(braille_dots_38), + NKS(braille_dots_138), + NKS(braille_dots_238), + NKS(braille_dots_1238), + NKS(braille_dots_48), + NKS(braille_dots_148), + NKS(braille_dots_248), + NKS(braille_dots_1248), + NKS(braille_dots_348), + NKS(braille_dots_1348), + NKS(braille_dots_2348), + NKS(braille_dots_12348), + NKS(braille_dots_58), + NKS(braille_dots_158), + NKS(braille_dots_258), + NKS(braille_dots_1258), + NKS(braille_dots_358), + NKS(braille_dots_1358), + NKS(braille_dots_2358), + NKS(braille_dots_12358), + NKS(braille_dots_458), + NKS(braille_dots_1458), + NKS(braille_dots_2458), + NKS(braille_dots_12458), + NKS(braille_dots_3458), + NKS(braille_dots_13458), + NKS(braille_dots_23458), + NKS(braille_dots_123458), + NKS(braille_dots_68), + NKS(braille_dots_168), + NKS(braille_dots_268), + NKS(braille_dots_1268), + NKS(braille_dots_368), + NKS(braille_dots_1368), + NKS(braille_dots_2368), + NKS(braille_dots_12368), + NKS(braille_dots_468), + NKS(braille_dots_1468), + NKS(braille_dots_2468), + NKS(braille_dots_12468), + NKS(braille_dots_3468), + NKS(braille_dots_13468), + NKS(braille_dots_23468), + NKS(braille_dots_123468), + NKS(braille_dots_568), + NKS(braille_dots_1568), + NKS(braille_dots_2568), + NKS(braille_dots_12568), + NKS(braille_dots_3568), + NKS(braille_dots_13568), + NKS(braille_dots_23568), + NKS(braille_dots_123568), + NKS(braille_dots_4568), + NKS(braille_dots_14568), + NKS(braille_dots_24568), + NKS(braille_dots_124568), + NKS(braille_dots_34568), + NKS(braille_dots_134568), + NKS(braille_dots_234568), + NKS(braille_dots_1234568), + NKS(braille_dots_78), + NKS(braille_dots_178), + NKS(braille_dots_278), + NKS(braille_dots_1278), + NKS(braille_dots_378), + NKS(braille_dots_1378), + NKS(braille_dots_2378), + NKS(braille_dots_12378), + NKS(braille_dots_478), + NKS(braille_dots_1478), + NKS(braille_dots_2478), + NKS(braille_dots_12478), + NKS(braille_dots_3478), + NKS(braille_dots_13478), + NKS(braille_dots_23478), + NKS(braille_dots_123478), + NKS(braille_dots_578), + NKS(braille_dots_1578), + NKS(braille_dots_2578), + NKS(braille_dots_12578), + NKS(braille_dots_3578), + NKS(braille_dots_13578), + NKS(braille_dots_23578), + NKS(braille_dots_123578), + NKS(braille_dots_4578), + NKS(braille_dots_14578), + NKS(braille_dots_24578), + NKS(braille_dots_124578), + NKS(braille_dots_34578), + NKS(braille_dots_134578), + NKS(braille_dots_234578), + NKS(braille_dots_1234578), + NKS(braille_dots_678), + NKS(braille_dots_1678), + NKS(braille_dots_2678), + NKS(braille_dots_12678), + NKS(braille_dots_3678), + NKS(braille_dots_13678), + NKS(braille_dots_23678), + NKS(braille_dots_123678), + NKS(braille_dots_4678), + NKS(braille_dots_14678), + NKS(braille_dots_24678), + NKS(braille_dots_124678), + NKS(braille_dots_34678), + NKS(braille_dots_134678), + NKS(braille_dots_234678), + NKS(braille_dots_1234678), + NKS(braille_dots_5678), + NKS(braille_dots_15678), + NKS(braille_dots_25678), + NKS(braille_dots_125678), + NKS(braille_dots_35678), + NKS(braille_dots_135678), + NKS(braille_dots_235678), + NKS(braille_dots_1235678), + NKS(braille_dots_45678), + NKS(braille_dots_145678), + NKS(braille_dots_245678), + NKS(braille_dots_1245678), + NKS(braille_dots_345678), + NKS(braille_dots_1345678), + NKS(braille_dots_2345678), + NKS(braille_dots_12345678), +#endif /* XK_BRAILLE */ +#ifdef XK_SINHALA + NKS(Sinh_ng), + NKS(Sinh_h2), + NKS(Sinh_a), + NKS(Sinh_aa), + NKS(Sinh_ae), + NKS(Sinh_aee), + NKS(Sinh_i), + NKS(Sinh_ii), + NKS(Sinh_u), + NKS(Sinh_uu), + NKS(Sinh_ri), + NKS(Sinh_rii), + NKS(Sinh_lu), + NKS(Sinh_luu), + NKS(Sinh_e), + NKS(Sinh_ee), + NKS(Sinh_ai), + NKS(Sinh_o), + NKS(Sinh_oo), + NKS(Sinh_au), + NKS(Sinh_ka), + NKS(Sinh_kha), + NKS(Sinh_ga), + NKS(Sinh_gha), + NKS(Sinh_ng2), + NKS(Sinh_nga), + NKS(Sinh_ca), + NKS(Sinh_cha), + NKS(Sinh_ja), + NKS(Sinh_jha), + NKS(Sinh_nya), + NKS(Sinh_jnya), + NKS(Sinh_nja), + NKS(Sinh_tta), + NKS(Sinh_ttha), + NKS(Sinh_dda), + NKS(Sinh_ddha), + NKS(Sinh_nna), + NKS(Sinh_ndda), + NKS(Sinh_tha), + NKS(Sinh_thha), + NKS(Sinh_dha), + NKS(Sinh_dhha), + NKS(Sinh_na), + NKS(Sinh_ndha), + NKS(Sinh_pa), + NKS(Sinh_pha), + NKS(Sinh_ba), + NKS(Sinh_bha), + NKS(Sinh_ma), + NKS(Sinh_mba), + NKS(Sinh_ya), + NKS(Sinh_ra), + NKS(Sinh_la), + NKS(Sinh_va), + NKS(Sinh_sha), + NKS(Sinh_ssha), + NKS(Sinh_sa), + NKS(Sinh_ha), + NKS(Sinh_lla), + NKS(Sinh_fa), + NKS(Sinh_al), + NKS(Sinh_aa2), + NKS(Sinh_ae2), + NKS(Sinh_aee2), + NKS(Sinh_i2), + NKS(Sinh_ii2), + NKS(Sinh_u2), + NKS(Sinh_uu2), + NKS(Sinh_ru2), + NKS(Sinh_e2), + NKS(Sinh_ee2), + NKS(Sinh_ai2), + NKS(Sinh_o2), + NKS(Sinh_oo2), + NKS(Sinh_au2), + NKS(Sinh_lu2), + NKS(Sinh_ruu2), + NKS(Sinh_luu2), + NKS(Sinh_kunddaliya), +#endif /* XK_SINHALA */ +#undef NKS +#define NKS(x) { #x, XF86XK_ ## x } + NKS(ModeLock), + NKS(MonBrightnessUp), + NKS(MonBrightnessDown), + NKS(KbdLightOnOff), + NKS(KbdBrightnessUp), + NKS(KbdBrightnessDown), + NKS(Standby), + NKS(AudioLowerVolume), + NKS(AudioMute), + NKS(AudioRaiseVolume), + NKS(AudioPlay), + NKS(AudioStop), + NKS(AudioPrev), + NKS(AudioNext), + NKS(HomePage), + NKS(Mail), + NKS(Start), + NKS(Search), + NKS(AudioRecord), + NKS(Calculator), + NKS(Memo), + NKS(ToDoList), + NKS(Calendar), + NKS(PowerDown), + NKS(ContrastAdjust), + NKS(RockerUp), + NKS(RockerDown), + NKS(RockerEnter), + NKS(Back), + NKS(Forward), + NKS(Stop), + NKS(Refresh), + NKS(PowerOff), + NKS(WakeUp), + NKS(Eject), + NKS(ScreenSaver), + NKS(WWW), + NKS(Sleep), + NKS(Favorites), + NKS(AudioPause), + NKS(AudioMedia), + NKS(MyComputer), + NKS(VendorHome), + NKS(LightBulb), + NKS(Shop), + NKS(History), + NKS(OpenURL), + NKS(AddFavorite), + NKS(HotLinks), + NKS(BrightnessAdjust), + NKS(Finance), + NKS(Community), + NKS(AudioRewind), + NKS(BackForward), + NKS(Launch0), + NKS(Launch1), + NKS(Launch2), + NKS(Launch3), + NKS(Launch4), + NKS(Launch5), + NKS(Launch6), + NKS(Launch7), + NKS(Launch8), + NKS(Launch9), + NKS(LaunchA), + NKS(LaunchB), + NKS(LaunchC), + NKS(LaunchD), + NKS(LaunchE), + NKS(LaunchF), + NKS(ApplicationLeft), + NKS(ApplicationRight), + NKS(Book), + NKS(CD), + NKS(Calculater), + NKS(Clear), + NKS(Close), + NKS(Copy), + NKS(Cut), + NKS(Display), + NKS(DOS), + NKS(Documents), + NKS(Excel), + NKS(Explorer), + NKS(Game), + NKS(Go), + NKS(iTouch), + NKS(LogOff), + NKS(Market), + NKS(Meeting), + NKS(MenuKB), + NKS(MenuPB), + NKS(MySites), + NKS(New), + NKS(News), + NKS(OfficeHome), + NKS(Open), + NKS(Option), + NKS(Paste), + NKS(Phone), + NKS(Q), + NKS(Reply), + NKS(Reload), + NKS(RotateWindows), + NKS(RotationPB), + NKS(RotationKB), + NKS(Save), + NKS(ScrollUp), + NKS(ScrollDown), + NKS(ScrollClick), + NKS(Send), + NKS(Spell), + NKS(SplitScreen), + NKS(Support), + NKS(TaskPane), + NKS(Terminal), + NKS(Tools), + NKS(Travel), + NKS(UserPB), + NKS(User1KB), + NKS(User2KB), + NKS(Video), + NKS(WheelButton), + NKS(Word), + NKS(Xfer), + NKS(ZoomIn), + NKS(ZoomOut), + NKS(Away), + NKS(Messenger), + NKS(WebCam), + NKS(MailForward), + NKS(Pictures), + NKS(Music), + NKS(Battery), + NKS(Bluetooth), + NKS(WLAN), + NKS(UWB), + NKS(AudioForward), + NKS(AudioRepeat), + NKS(AudioRandomPlay), + NKS(Subtitle), + NKS(AudioCycleTrack), + NKS(CycleAngle), + NKS(FrameBack), + NKS(FrameForward), + NKS(Time), + NKS(Select), + NKS(View), + NKS(TopMenu), + NKS(Red), + NKS(Green), + NKS(Yellow), + NKS(Blue), + NKS(Suspend), + NKS(Hibernate), + NKS(TouchpadToggle), + NKS(TouchpadOn), + NKS(TouchpadOff), + NKS(Switch_VT_1), + NKS(Switch_VT_2), + NKS(Switch_VT_3), + NKS(Switch_VT_4), + NKS(Switch_VT_5), + NKS(Switch_VT_6), + NKS(Switch_VT_7), + NKS(Switch_VT_8), + NKS(Switch_VT_9), + NKS(Switch_VT_10), + NKS(Switch_VT_11), + NKS(Switch_VT_12), + NKS(Ungrab), + NKS(ClearGrab), + NKS(Next_VMode), + NKS(Prev_VMode), + NKS(LogWindowTree), + NKS(LogGrabInfo), +#undef NKS +};/*}}}*/ + +void grab(void) +{ + PUTS("grab"); + for (hotkey_t *hk = hotkeys; hk != NULL; hk = hk->next) { + if (hk->button == XCB_NONE) { + xcb_keycode_t *keycodes = keycodes_from_keysym(hk->keysym); + if (keycodes != NULL) + for (xcb_keycode_t *kc = keycodes; *kc != XCB_NO_SYMBOL; kc++) + if (hk->keysym == xcb_key_symbols_get_keysym(symbols, *kc, 0)) { + PRINTF("keycode for %u is %u\n", hk->keysym, *kc); + grab_key_button(*kc, hk->button, hk->modfield); + } + free(keycodes); + } else { + grab_key_button(XCB_NONE, hk->button, hk->modfield); + } + } +} + +void grab_key_button(xcb_keycode_t keycode, xcb_button_t button, uint16_t modfield) +{ + for (uint8_t i = 0; i < 8; i++) { + uint16_t lockfield = (i & 1 ? num_lock : 0) | (i & 2 ? caps_lock : 0) | (i & 4 ? scroll_lock : 0); + grab_key_button_checked(keycode, button, modfield | lockfield); + } +} + +void grab_key_button_checked(xcb_keycode_t keycode, xcb_button_t button, uint16_t modfield) +{ + xcb_generic_error_t *err; + if (button == XCB_NONE) + err = xcb_request_check(dpy, xcb_grab_key_checked(dpy, false, root, modfield, keycode, XCB_GRAB_MODE_ASYNC, XCB_GRAB_MODE_ASYNC)); + else + err = xcb_request_check(dpy, xcb_grab_button_checked(dpy, false, root, XCB_EVENT_MASK_BUTTON_PRESS | XCB_EVENT_MASK_BUTTON_RELEASE | XCB_EVENT_MASK_POINTER_MOTION, XCB_GRAB_MODE_ASYNC, XCB_GRAB_MODE_ASYNC, XCB_NONE, XCB_NONE, button, modfield)); + unsigned int value = (button == XCB_NONE ? keycode : button); + char *type = (button == XCB_NONE ? "key" : "button"); + if (err != NULL) { + warn("Could not grab %s %u with modfield %u: ", type, value, modfield); + if (err->error_code == XCB_ACCESS) + warn("the combination is already grabbed.\n"); + else + warn("error no %u encountered.\n", err->error_code); + free(err); + } else { + PRINTF("grab %s %u %u\n", type, value, modfield); + } +} + +void ungrab(void) +{ + PUTS("ungrab"); + xcb_ungrab_key(dpy, XCB_GRAB_ANY, root, XCB_BUTTON_MASK_ANY); + xcb_ungrab_button(dpy, XCB_BUTTON_INDEX_ANY, root, XCB_MOD_MASK_ANY); +} + +int16_t modfield_from_keysym(xcb_keysym_t keysym) +{ + uint16_t modfield = 0; + xcb_keycode_t *keycodes = NULL, *mod_keycodes = NULL; + xcb_get_modifier_mapping_reply_t *reply = NULL; + if ((keycodes = keycodes_from_keysym(keysym)) != NULL) { + if ((reply = xcb_get_modifier_mapping_reply(dpy, xcb_get_modifier_mapping(dpy), NULL)) != NULL) { + if ((mod_keycodes = xcb_get_modifier_mapping_keycodes(reply)) != NULL) { + unsigned int num_mod = xcb_get_modifier_mapping_keycodes_length(reply) / reply->keycodes_per_modifier; + for (unsigned int i = 0; i < num_mod; i++) { + for (unsigned int j = 0; j < reply->keycodes_per_modifier; j++) { + xcb_keycode_t mk = mod_keycodes[i * reply->keycodes_per_modifier + j]; + if (mk == XCB_NO_SYMBOL) + continue; + for (xcb_keycode_t *k = keycodes; *k != XCB_NO_SYMBOL; k++) + if (*k == mk) + modfield |= (1 << i); + } + } + + } + } + } + free(keycodes); + free(reply); + return modfield; +} + +xcb_keycode_t *keycodes_from_keysym(xcb_keysym_t keysym) +{ + xcb_setup_t const *setup; + unsigned int num = 0; + xcb_keycode_t *result = NULL, *result_np = NULL; + + if ((setup = xcb_get_setup(dpy)) != NULL) { + xcb_keycode_t min_kc = setup->min_keycode; + xcb_keycode_t max_kc = setup->max_keycode; + /* We must choose a type for kc other than xcb_keycode_t whose size is 1, otherwise, since max_kc will most likely be 255, if kc == 255, kc++ would be 0 and the outer loop would start over ad infinitum */ + for(unsigned int kc = min_kc; kc <= max_kc; kc++) + for(unsigned int col = 0; col < KEYSYMS_PER_KEYCODE; col++) { + xcb_keysym_t ks = xcb_key_symbols_get_keysym(symbols, kc, col); + if (ks == keysym) { + num++; + result_np = realloc(result, sizeof(xcb_keycode_t) * (num + 1)); + if (result_np == NULL) { + free(result); + return NULL; + } + result = result_np; + result[num - 1] = kc; + result[num] = XCB_NO_SYMBOL; + break; + } + } + } + return result; +} + +bool parse_hotkey(char *string, xcb_keysym_t *keysym, xcb_button_t *button, uint16_t *modfield, uint8_t *event_type) { + char backup[MAXLEN]; + strncpy(backup, string, sizeof(backup)); + backup[strlen(string)] = '\0'; + for (char *name = strtok(string, TOK_SEP); name != NULL; name = strtok(NULL, TOK_SEP)) { + if (name[0] == RELEASE_PREFIX) { + *event_type = XCB_KEY_RELEASE; + name++; + } else if (name[0] == MOTION_PREFIX) { + *event_type = XCB_MOTION_NOTIFY; + name++; + } + if (!parse_modifier(name, modfield) && !parse_key(name, keysym) && !parse_button(name, button)) { + warn("Unrecognized key name: '%s'.\n", name); + } + } + if (*keysym == XCB_NO_SYMBOL && *button == XCB_NONE) { + warn("Invalid hotkey: '%s'.\n", backup); + return false; + } + return true; +} + +bool parse_key(char *name, xcb_keysym_t *keysym) +{ + for (unsigned int i = 0; i < LENGTH(nks_dict); i++) { + keysym_dict_t nks = nks_dict[i]; + if (strcmp(name, nks.name) == 0) { + *keysym = nks.keysym; + return true; + } + } + return false; +} + +bool parse_button(char *name, xcb_button_t *butidx) +{ + /* X handles up to 24 buttons */ + return (sscanf(name, "button%hhu", butidx) == 1); +} + +bool parse_modifier(char *name, uint16_t *modfield) +{ + if (strcmp(name, "shift") == 0) { + *modfield |= XCB_MOD_MASK_SHIFT; + return true; + } else if (strcmp(name, "control") == 0 || strcmp(name, "ctrl") == 0) { + *modfield |= XCB_MOD_MASK_CONTROL; + return true; + } else if (strcmp(name, "alt") == 0) { + *modfield |= (modfield_from_keysym(XK_Alt_L) | modfield_from_keysym(XK_Alt_R)); + return true; + } else if (strcmp(name, "super") == 0) { + *modfield |= (modfield_from_keysym(XK_Super_L) | modfield_from_keysym(XK_Super_R)); + return true; + } else if (strcmp(name, "hyper") == 0) { + *modfield |= (modfield_from_keysym(XK_Hyper_L) | modfield_from_keysym(XK_Hyper_R)); + return true; + } else if (strcmp(name, "meta") == 0) { + *modfield |= (modfield_from_keysym(XK_Meta_L) | modfield_from_keysym(XK_Meta_R)); + return true; + } else if (strcmp(name, "mode_switch") == 0) { + *modfield |= modfield_from_keysym(XK_Mode_switch); + return true; + } else if (strcmp(name, "mod1") == 0) { + *modfield |= XCB_MOD_MASK_1; + return true; + } else if (strcmp(name, "mod2") == 0) { + *modfield |= XCB_MOD_MASK_2; + return true; + } else if (strcmp(name, "mod3") == 0) { + *modfield |= XCB_MOD_MASK_3; + return true; + } else if (strcmp(name, "mod4") == 0) { + *modfield |= XCB_MOD_MASK_4; + return true; + } else if (strcmp(name, "mod5") == 0) { + *modfield |= XCB_MOD_MASK_5; + return true; + } else if (strcmp(name, "lock") == 0) { + *modfield |= XCB_MOD_MASK_LOCK; + return true; + } + return false; +} + +bool parse_fold(char *string, char *folded_string) +{ + if (strchr(string, SEQ_BEGIN) != NULL && strrchr(string, SEQ_END) != NULL) { + strncpy(folded_string, string, strlen(string)); + folded_string[strlen(string)] = '\0'; + return true; + } + return false; +} + +uint8_t key_to_button(uint8_t event_type) +{ + if (event_type == XCB_KEY_PRESS) + return XCB_BUTTON_PRESS; + else if (event_type == XCB_KEY_RELEASE) + return XCB_BUTTON_RELEASE; + return event_type; +} + +void get_lock_fields(void) +{ + num_lock = modfield_from_keysym(XK_Num_Lock); + caps_lock = XCB_MOD_MASK_LOCK; + scroll_lock = modfield_from_keysym(XK_Scroll_Lock); + PRINTF("lock fields %u %u %u\n", num_lock, caps_lock, scroll_lock); +} + +bool extract_sequence(char *string, char *prefix, char *sequence, char *suffix) +{ + char *begin = strchr(string, SEQ_BEGIN); + char *end = strrchr(string, SEQ_END); + if (begin == NULL || end == NULL || ((end - begin - 1) < SEQ_MIN_LEN)) + return false; + strncpy(sequence, begin + 1, end - begin - 1); + strncpy(prefix, string, begin - string); + strncpy(suffix, end + 1, strlen(string) - (1 + end - string)); + sequence[end - begin - 1] = '\0'; + prefix[begin - string] = '\0'; + suffix[strlen(string) - (1 + end - string)] = '\0'; + return true; +} + +void unfold_hotkeys(char *folded_hotkey, char *folded_command) +{ + char hotkey_sequence[MAXLEN]; + char hotkey_prefix[MAXLEN]; + char hotkey_suffix[MAXLEN]; + char command_sequence[MAXLEN]; + char command_prefix[MAXLEN]; + char command_suffix[MAXLEN]; + if (!extract_sequence(folded_hotkey, hotkey_prefix, hotkey_sequence, hotkey_suffix) || !extract_sequence(folded_command, command_prefix, command_sequence, command_suffix)) { + warn("Couldn't extract sequence from '%s' or '%s'.\n", folded_hotkey, folded_command); + return; + } + char unfolded_hotkey[MAXLEN], unfolded_command[MAXLEN]; + xcb_keysym_t keysym = XCB_NO_SYMBOL; + xcb_button_t button = XCB_NONE; + uint16_t modfield = 0; + uint8_t event_type = XCB_KEY_PRESS; + char *hk_ptr, *cmd_ptr; + char hk_a = 1, hk_z = 0, cmd_a = 1, cmd_z = 0; + char *hk_item = strtok_r(hotkey_sequence, SEQ_SEP, &hk_ptr); + char *cmd_item = strtok_r(command_sequence, SEQ_SEP, &cmd_ptr); + + while ((hk_item != NULL || hk_a <= hk_z) && (cmd_item != NULL || cmd_a <= cmd_z)) { +#define PREGEN(elt, ra, rz, prefix, suffix, unf) \ + if (ra > rz && strlen(elt) == 3 && sscanf(elt, "%c-%c", &ra, &rz) == 2 && ra >= rz) \ + ra = 1, rz = 0; \ + if (ra <= rz) \ + snprintf(unf, sizeof(unf), "%s%c%s", prefix, ra, suffix); \ + else \ + snprintf(unf, sizeof(unf), "%s%s%s", prefix, elt, suffix); + PREGEN(hk_item, hk_a, hk_z, hotkey_prefix, hotkey_suffix, unfolded_hotkey); + PREGEN(cmd_item, cmd_a, cmd_z, command_prefix, command_suffix, unfolded_command); +#undef PREGEN + + if (parse_hotkey(unfolded_hotkey, &keysym, &button, &modfield, &event_type)) + generate_hotkeys(keysym, button, modfield, event_type, unfolded_command); + + keysym = XCB_NO_SYMBOL; + button = XCB_NONE; + modfield = 0; + event_type = XCB_KEY_PRESS; + +#define POSTGEN(elt, ra, rz, ptr) \ + if (ra >= rz) \ + elt = strtok_r(NULL, SEQ_SEP, &ptr), ra = 1, rz = 0; \ + else \ + ra++; + POSTGEN(hk_item, hk_a, hk_z, hk_ptr); + POSTGEN(cmd_item, cmd_a, cmd_z, cmd_ptr); +#undef POSTGEN + } +} + +void generate_hotkeys(xcb_keysym_t keysym, xcb_button_t button, uint16_t modfield, uint8_t event_type, char *command) +{ + if (button == XCB_NONE) { + xcb_keycode_t *keycodes = keycodes_from_keysym(keysym); + if (keycodes != NULL) + for (xcb_keycode_t *kc = keycodes; *kc != XCB_NO_SYMBOL; kc++) { + xcb_keysym_t natural_keysym = xcb_key_symbols_get_keysym(symbols, *kc, 0); + for (unsigned char col = 0; col < KEYSYMS_PER_KEYCODE; col++) { + xcb_keysym_t ks = xcb_key_symbols_get_keysym(symbols, *kc, col); + if (ks == keysym) { + uint16_t implicit_modfield = (col & 1 ? XCB_MOD_MASK_SHIFT : 0) | (col & 2 ? modfield_from_keysym(XK_Mode_switch) : 0); + uint16_t explicit_modfield = modfield | implicit_modfield; + hotkey_t *hk = make_hotkey(natural_keysym, button, explicit_modfield, event_type, command); + add_hotkey(hk); + break; + } + } + } + free(keycodes); + } else { + hotkey_t *hk = make_hotkey(keysym, button, modfield, event_type, command); + add_hotkey(hk); + } +} + +hotkey_t *make_hotkey(xcb_keysym_t keysym, xcb_button_t button, uint16_t modfield, uint8_t event_type, char *command) +{ + PRINTF("hotkey %u %u %u %u %s\n", keysym, button, modfield, event_type, command); + hotkey_t *hk = malloc(sizeof(hotkey_t)); + hk->keysym = keysym; + hk->button = button; + hk->modfield = modfield; + if (button != XCB_NONE) + hk->event_type = key_to_button(event_type); + else + hk->event_type = event_type; + strncpy(hk->command, command, sizeof(hk->command)); + hk->next = NULL; + return hk; +} + +hotkey_t *find_hotkey(xcb_keysym_t keysym, xcb_button_t button, uint16_t modfield, uint8_t event_type) +{ + for (hotkey_t *hk = hotkeys; hk != NULL; hk = hk->next) + if (hk->event_type == event_type && hk->keysym == keysym && hk->button == button && hk->modfield == modfield) + return hk; + return NULL; +} + +void add_hotkey(hotkey_t *hk) +{ + hk->next = hotkeys; + hotkeys = hk; +} diff --git a/hotkeys.h b/hotkeys.h @@ -0,0 +1,37 @@ +#ifndef _HOTKEYS_H +#define _HOTKEYS_H + +#include "sxhkd.h" + +#define KEYSYMS_PER_KEYCODE 4 +#define MOD_STATE_FIELD 255 +#define NUM_MOD 8 +#define SEQ_MIN_LEN 3 +#define RELEASE_PREFIX '@' +#define MOTION_PREFIX '!' +#define START_COMMENT '#' +#define TOK_SEP "+ \n" +#define SEQ_SEP "," +#define SEQ_BEGIN '{' +#define SEQ_END '}' + +void grab(void); +void grab_key_button(xcb_keycode_t, xcb_button_t, uint16_t); +void grab_key_button_checked(xcb_keycode_t, xcb_button_t, uint16_t); +void ungrab(void); +int16_t modfield_from_keysym(xcb_keysym_t); +xcb_keycode_t *keycodes_from_keysym(xcb_keysym_t); +bool parse_hotkey(char *, xcb_keysym_t *, xcb_button_t *, uint16_t *, uint8_t *); +bool parse_key(char *, xcb_keysym_t *); +bool parse_button(char *, xcb_button_t *); +bool parse_modifier(char *, uint16_t *); +bool parse_fold(char *, char *); +uint8_t key_to_button(uint8_t); +void get_lock_fields(void); +void unfold_hotkeys(char *, char *); +void generate_hotkeys(xcb_keysym_t, xcb_button_t, uint16_t, uint8_t, char *); +hotkey_t *make_hotkey(xcb_keysym_t, xcb_button_t, uint16_t, uint8_t, char *); +hotkey_t *find_hotkey(xcb_keysym_t, xcb_button_t, uint16_t, uint8_t); +void add_hotkey(hotkey_t *); + +#endif diff --git a/keys.c b/keys.c @@ -1,2691 +0,0 @@ -#include <X11/keysym.h> -#include <X11/XF86keysym.h> -#include <stdlib.h> -#include <string.h> -#include <stdbool.h> -#include "keys.h" -#include "helpers.h" -#include "sxhkd.h" - -keysym_dict_t nks_dict[] = { -#define NKS(x) { #x, XK_ ## x } - NKS(VoidSymbol), -#ifdef XK_MISCELLANY - NKS(BackSpace), - NKS(Tab), - NKS(Linefeed), - NKS(Clear), - NKS(Return), - NKS(Pause), - NKS(Scroll_Lock), - NKS(Sys_Req), - NKS(Escape), - NKS(Delete), - NKS(Multi_key), - NKS(Codeinput), - NKS(SingleCandidate), - NKS(MultipleCandidate), - NKS(PreviousCandidate), - NKS(Kanji), - NKS(Muhenkan), - NKS(Henkan_Mode), - NKS(Henkan), - NKS(Romaji), - NKS(Hiragana), - NKS(Katakana), - NKS(Hiragana_Katakana), - NKS(Zenkaku), - NKS(Hankaku), - NKS(Zenkaku_Hankaku), - NKS(Touroku), - NKS(Massyo), - NKS(Kana_Lock), - NKS(Kana_Shift), - NKS(Eisu_Shift), - NKS(Eisu_toggle), - NKS(Kanji_Bangou), - NKS(Zen_Koho), - NKS(Mae_Koho), - NKS(Home), - NKS(Left), - NKS(Up), - NKS(Right), - NKS(Down), - NKS(Prior), - NKS(Page_Up), - NKS(Next), - NKS(Page_Down), - NKS(End), - NKS(Begin), - NKS(Select), - NKS(Print), - NKS(Execute), - NKS(Insert), - NKS(Undo), - NKS(Redo), - NKS(Menu), - NKS(Find), - NKS(Cancel), - NKS(Help), - NKS(Break), - NKS(Mode_switch), - NKS(script_switch), - NKS(Num_Lock), - NKS(KP_Space), - NKS(KP_Tab), - NKS(KP_Enter), - NKS(KP_F1), - NKS(KP_F2), - NKS(KP_F3), - NKS(KP_F4), - NKS(KP_Home), - NKS(KP_Left), - NKS(KP_Up), - NKS(KP_Right), - NKS(KP_Down), - NKS(KP_Prior), - NKS(KP_Page_Up), - NKS(KP_Next), - NKS(KP_Page_Down), - NKS(KP_End), - NKS(KP_Begin), - NKS(KP_Insert), - NKS(KP_Delete), - NKS(KP_Equal), - NKS(KP_Multiply), - NKS(KP_Add), - NKS(KP_Separator), - NKS(KP_Subtract), - NKS(KP_Decimal), - NKS(KP_Divide), - NKS(KP_0), - NKS(KP_1), - NKS(KP_2), - NKS(KP_3), - NKS(KP_4), - NKS(KP_5), - NKS(KP_6), - NKS(KP_7), - NKS(KP_8), - NKS(KP_9), - NKS(F1), - NKS(F2), - NKS(F3), - NKS(F4), - NKS(F5), - NKS(F6), - NKS(F7), - NKS(F8), - NKS(F9), - NKS(F10), - NKS(F11), - NKS(L1), - NKS(F12), - NKS(L2), - NKS(F13), - NKS(L3), - NKS(F14), - NKS(L4), - NKS(F15), - NKS(L5), - NKS(F16), - NKS(L6), - NKS(F17), - NKS(L7), - NKS(F18), - NKS(L8), - NKS(F19), - NKS(L9), - NKS(F20), - NKS(L10), - NKS(F21), - NKS(R1), - NKS(F22), - NKS(R2), - NKS(F23), - NKS(R3), - NKS(F24), - NKS(R4), - NKS(F25), - NKS(R5), - NKS(F26), - NKS(R6), - NKS(F27), - NKS(R7), - NKS(F28), - NKS(R8), - NKS(F29), - NKS(R9), - NKS(F30), - NKS(R10), - NKS(F31), - NKS(R11), - NKS(F32), - NKS(R12), - NKS(F33), - NKS(R13), - NKS(F34), - NKS(R14), - NKS(F35), - NKS(R15), - NKS(Shift_L), - NKS(Shift_R), - NKS(Control_L), - NKS(Control_R), - NKS(Caps_Lock), - NKS(Shift_Lock), - NKS(Meta_L), - NKS(Meta_R), - NKS(Alt_L), - NKS(Alt_R), - NKS(Super_L), - NKS(Super_R), - NKS(Hyper_L), - NKS(Hyper_R), -#endif /* XK_MISCELLANY */ -#ifdef XK_XKB_KEYS - NKS(ISO_Lock), - NKS(ISO_Level2_Latch), - NKS(ISO_Level3_Shift), - NKS(ISO_Level3_Latch), - NKS(ISO_Level3_Lock), - NKS(ISO_Level5_Shift), - NKS(ISO_Level5_Latch), - NKS(ISO_Level5_Lock), - NKS(ISO_Group_Shift), - NKS(ISO_Group_Latch), - NKS(ISO_Group_Lock), - NKS(ISO_Next_Group), - NKS(ISO_Next_Group_Lock), - NKS(ISO_Prev_Group), - NKS(ISO_Prev_Group_Lock), - NKS(ISO_First_Group), - NKS(ISO_First_Group_Lock), - NKS(ISO_Last_Group), - NKS(ISO_Last_Group_Lock), - NKS(ISO_Left_Tab), - NKS(ISO_Move_Line_Up), - NKS(ISO_Move_Line_Down), - NKS(ISO_Partial_Line_Up), - NKS(ISO_Partial_Line_Down), - NKS(ISO_Partial_Space_Left), - NKS(ISO_Partial_Space_Right), - NKS(ISO_Set_Margin_Left), - NKS(ISO_Set_Margin_Right), - NKS(ISO_Release_Margin_Left), - NKS(ISO_Release_Margin_Right), - NKS(ISO_Release_Both_Margins), - NKS(ISO_Fast_Cursor_Left), - NKS(ISO_Fast_Cursor_Right), - NKS(ISO_Fast_Cursor_Up), - NKS(ISO_Fast_Cursor_Down), - NKS(ISO_Continuous_Underline), - NKS(ISO_Discontinuous_Underline), - NKS(ISO_Emphasize), - NKS(ISO_Center_Object), - NKS(ISO_Enter), - NKS(dead_grave), - NKS(dead_acute), - NKS(dead_circumflex), - NKS(dead_tilde), - NKS(dead_perispomeni), - NKS(dead_macron), - NKS(dead_breve), - NKS(dead_abovedot), - NKS(dead_diaeresis), - NKS(dead_abovering), - NKS(dead_doubleacute), - NKS(dead_caron), - NKS(dead_cedilla), - NKS(dead_ogonek), - NKS(dead_iota), - NKS(dead_voiced_sound), - NKS(dead_semivoiced_sound), - NKS(dead_belowdot), - NKS(dead_hook), - NKS(dead_horn), - NKS(dead_stroke), - NKS(dead_abovecomma), - NKS(dead_psili), - NKS(dead_abovereversedcomma), - NKS(dead_dasia), - NKS(dead_doublegrave), - NKS(dead_belowring), - NKS(dead_belowmacron), - NKS(dead_belowcircumflex), - NKS(dead_belowtilde), - NKS(dead_belowbreve), - NKS(dead_belowdiaeresis), - NKS(dead_invertedbreve), - NKS(dead_belowcomma), - NKS(dead_currency), - NKS(dead_a), - NKS(dead_A), - NKS(dead_e), - NKS(dead_E), - NKS(dead_i), - NKS(dead_I), - NKS(dead_o), - NKS(dead_O), - NKS(dead_u), - NKS(dead_U), - NKS(dead_small_schwa), - NKS(dead_capital_schwa), - NKS(dead_greek), - NKS(First_Virtual_Screen), - NKS(Prev_Virtual_Screen), - NKS(Next_Virtual_Screen), - NKS(Last_Virtual_Screen), - NKS(Terminate_Server), - NKS(AccessX_Enable), - NKS(AccessX_Feedback_Enable), - NKS(RepeatKeys_Enable), - NKS(SlowKeys_Enable), - NKS(BounceKeys_Enable), - NKS(StickyKeys_Enable), - NKS(MouseKeys_Enable), - NKS(MouseKeys_Accel_Enable), - NKS(Overlay1_Enable), - NKS(Overlay2_Enable), - NKS(AudibleBell_Enable), - NKS(Pointer_Left), - NKS(Pointer_Right), - NKS(Pointer_Up), - NKS(Pointer_Down), - NKS(Pointer_UpLeft), - NKS(Pointer_UpRight), - NKS(Pointer_DownLeft), - NKS(Pointer_DownRight), - NKS(Pointer_Button_Dflt), - NKS(Pointer_Button1), - NKS(Pointer_Button2), - NKS(Pointer_Button3), - NKS(Pointer_Button4), - NKS(Pointer_Button5), - NKS(Pointer_DblClick_Dflt), - NKS(Pointer_DblClick1), - NKS(Pointer_DblClick2), - NKS(Pointer_DblClick3), - NKS(Pointer_DblClick4), - NKS(Pointer_DblClick5), - NKS(Pointer_Drag_Dflt), - NKS(Pointer_Drag1), - NKS(Pointer_Drag2), - NKS(Pointer_Drag3), - NKS(Pointer_Drag4), - NKS(Pointer_Drag5), - NKS(Pointer_EnableKeys), - NKS(Pointer_Accelerate), - NKS(Pointer_DfltBtnNext), - NKS(Pointer_DfltBtnPrev), - NKS(ch), - NKS(Ch), - NKS(CH), - NKS(c_h), - NKS(C_h), - NKS(C_H), -#endif /* XK_XKB_KEYS */ -#ifdef XK_3270 - NKS(3270_Duplicate), - NKS(3270_FieldMark), - NKS(3270_Right2), - NKS(3270_Left2), - NKS(3270_BackTab), - NKS(3270_EraseEOF), - NKS(3270_EraseInput), - NKS(3270_Reset), - NKS(3270_Quit), - NKS(3270_PA1), - NKS(3270_PA2), - NKS(3270_PA3), - NKS(3270_Test), - NKS(3270_Attn), - NKS(3270_CursorBlink), - NKS(3270_AltCursor), - NKS(3270_KeyClick), - NKS(3270_Jump), - NKS(3270_Ident), - NKS(3270_Rule), - NKS(3270_Copy), - NKS(3270_Play), - NKS(3270_Setup), - NKS(3270_Record), - NKS(3270_ChangeScreen), - NKS(3270_DeleteWord), - NKS(3270_ExSelect), - NKS(3270_CursorSelect), - NKS(3270_PrintScreen), - NKS(3270_Enter), -#endif /* XK_3270 */ -#ifdef XK_LATIN1 - NKS(space), - NKS(exclam), - NKS(quotedbl), - NKS(numbersign), - NKS(dollar), - NKS(percent), - NKS(ampersand), - NKS(apostrophe), - NKS(quoteright), - NKS(parenleft), - NKS(parenright), - NKS(asterisk), - NKS(plus), - NKS(comma), - NKS(minus), - NKS(period), - NKS(slash), - NKS(0), - NKS(1), - NKS(2), - NKS(3), - NKS(4), - NKS(5), - NKS(6), - NKS(7), - NKS(8), - NKS(9), - NKS(colon), - NKS(semicolon), - NKS(less), - NKS(equal), - NKS(greater), - NKS(question), - NKS(at), - NKS(A), - NKS(B), - NKS(C), - NKS(D), - NKS(E), - NKS(F), - NKS(G), - NKS(H), - NKS(I), - NKS(J), - NKS(K), - NKS(L), - NKS(M), - NKS(N), - NKS(O), - NKS(P), - NKS(Q), - NKS(R), - NKS(S), - NKS(T), - NKS(U), - NKS(V), - NKS(W), - NKS(X), - NKS(Y), - NKS(Z), - NKS(bracketleft), - NKS(backslash), - NKS(bracketright), - NKS(asciicircum), - NKS(underscore), - NKS(grave), - NKS(quoteleft), - NKS(a), - NKS(b), - NKS(c), - NKS(d), - NKS(e), - NKS(f), - NKS(g), - NKS(h), - NKS(i), - NKS(j), - NKS(k), - NKS(l), - NKS(m), - NKS(n), - NKS(o), - NKS(p), - NKS(q), - NKS(r), - NKS(s), - NKS(t), - NKS(u), - NKS(v), - NKS(w), - NKS(x), - NKS(y), - NKS(z), - NKS(braceleft), - NKS(bar), - NKS(braceright), - NKS(asciitilde), - NKS(nobreakspace), - NKS(exclamdown), - NKS(cent), - NKS(sterling), - NKS(currency), - NKS(yen), - NKS(brokenbar), - NKS(section), - NKS(diaeresis), - NKS(copyright), - NKS(ordfeminine), - NKS(guillemotleft), - NKS(notsign), - NKS(hyphen), - NKS(registered), - NKS(macron), - NKS(degree), - NKS(plusminus), - NKS(twosuperior), - NKS(threesuperior), - NKS(acute), - NKS(mu), - NKS(paragraph), - NKS(periodcentered), - NKS(cedilla), - NKS(onesuperior), - NKS(masculine), - NKS(guillemotright), - NKS(onequarter), - NKS(onehalf), - NKS(threequarters), - NKS(questiondown), - NKS(Agrave), - NKS(Aacute), - NKS(Acircumflex), - NKS(Atilde), - NKS(Adiaeresis), - NKS(Aring), - NKS(AE), - NKS(Ccedilla), - NKS(Egrave), - NKS(Eacute), - NKS(Ecircumflex), - NKS(Ediaeresis), - NKS(Igrave), - NKS(Iacute), - NKS(Icircumflex), - NKS(Idiaeresis), - NKS(ETH), - NKS(Eth), - NKS(Ntilde), - NKS(Ograve), - NKS(Oacute), - NKS(Ocircumflex), - NKS(Otilde), - NKS(Odiaeresis), - NKS(multiply), - NKS(Oslash), - NKS(Ooblique), - NKS(Ugrave), - NKS(Uacute), - NKS(Ucircumflex), - NKS(Udiaeresis), - NKS(Yacute), - NKS(THORN), - NKS(Thorn), - NKS(ssharp), - NKS(agrave), - NKS(aacute), - NKS(acircumflex), - NKS(atilde), - NKS(adiaeresis), - NKS(aring), - NKS(ae), - NKS(ccedilla), - NKS(egrave), - NKS(eacute), - NKS(ecircumflex), - NKS(ediaeresis), - NKS(igrave), - NKS(iacute), - NKS(icircumflex), - NKS(idiaeresis), - NKS(eth), - NKS(ntilde), - NKS(ograve), - NKS(oacute), - NKS(ocircumflex), - NKS(otilde), - NKS(odiaeresis), - NKS(division), - NKS(oslash), - NKS(ooblique), - NKS(ugrave), - NKS(uacute), - NKS(ucircumflex), - NKS(udiaeresis), - NKS(yacute), - NKS(thorn), - NKS(ydiaeresis), -#endif /* XK_LATIN1 */ -#ifdef XK_LATIN2 - NKS(Aogonek), - NKS(breve), - NKS(Lstroke), - NKS(Lcaron), - NKS(Sacute), - NKS(Scaron), - NKS(Scedilla), - NKS(Tcaron), - NKS(Zacute), - NKS(Zcaron), - NKS(Zabovedot), - NKS(aogonek), - NKS(ogonek), - NKS(lstroke), - NKS(lcaron), - NKS(sacute), - NKS(caron), - NKS(scaron), - NKS(scedilla), - NKS(tcaron), - NKS(zacute), - NKS(doubleacute), - NKS(zcaron), - NKS(zabovedot), - NKS(Racute), - NKS(Abreve), - NKS(Lacute), - NKS(Cacute), - NKS(Ccaron), - NKS(Eogonek), - NKS(Ecaron), - NKS(Dcaron), - NKS(Dstroke), - NKS(Nacute), - NKS(Ncaron), - NKS(Odoubleacute), - NKS(Rcaron), - NKS(Uring), - NKS(Udoubleacute), - NKS(Tcedilla), - NKS(racute), - NKS(abreve), - NKS(lacute), - NKS(cacute), - NKS(ccaron), - NKS(eogonek), - NKS(ecaron), - NKS(dcaron), - NKS(dstroke), - NKS(nacute), - NKS(ncaron), - NKS(odoubleacute), - NKS(rcaron), - NKS(uring), - NKS(udoubleacute), - NKS(tcedilla), - NKS(abovedot), -#endif /* XK_LATIN2 */ -#ifdef XK_LATIN3 - NKS(Hstroke), - NKS(Hcircumflex), - NKS(Iabovedot), - NKS(Gbreve), - NKS(Jcircumflex), - NKS(hstroke), - NKS(hcircumflex), - NKS(idotless), - NKS(gbreve), - NKS(jcircumflex), - NKS(Cabovedot), - NKS(Ccircumflex), - NKS(Gabovedot), - NKS(Gcircumflex), - NKS(Ubreve), - NKS(Scircumflex), - NKS(cabovedot), - NKS(ccircumflex), - NKS(gabovedot), - NKS(gcircumflex), - NKS(ubreve), - NKS(scircumflex), -#endif /* XK_LATIN3 */ -#ifdef XK_LATIN4 - NKS(kra), - NKS(kappa), - NKS(Rcedilla), - NKS(Itilde), - NKS(Lcedilla), - NKS(Emacron), - NKS(Gcedilla), - NKS(Tslash), - NKS(rcedilla), - NKS(itilde), - NKS(lcedilla), - NKS(emacron), - NKS(gcedilla), - NKS(tslash), - NKS(ENG), - NKS(eng), - NKS(Amacron), - NKS(Iogonek), - NKS(Eabovedot), - NKS(Imacron), - NKS(Ncedilla), - NKS(Omacron), - NKS(Kcedilla), - NKS(Uogonek), - NKS(Utilde), - NKS(Umacron), - NKS(amacron), - NKS(iogonek), - NKS(eabovedot), - NKS(imacron), - NKS(ncedilla), - NKS(omacron), - NKS(kcedilla), - NKS(uogonek), - NKS(utilde), - NKS(umacron), -#endif /* XK_LATIN4 */ -#ifdef XK_LATIN8 - NKS(Wcircumflex), - NKS(wcircumflex), - NKS(Ycircumflex), - NKS(ycircumflex), - NKS(Babovedot), - NKS(babovedot), - NKS(Dabovedot), - NKS(dabovedot), - NKS(Fabovedot), - NKS(fabovedot), - NKS(Mabovedot), - NKS(mabovedot), - NKS(Pabovedot), - NKS(pabovedot), - NKS(Sabovedot), - NKS(sabovedot), - NKS(Tabovedot), - NKS(tabovedot), - NKS(Wgrave), - NKS(wgrave), - NKS(Wacute), - NKS(wacute), - NKS(Wdiaeresis), - NKS(wdiaeresis), - NKS(Ygrave), - NKS(ygrave), -#endif /* XK_LATIN8 */ -#ifdef XK_LATIN9 - NKS(OE), - NKS(oe), - NKS(Ydiaeresis), -#endif /* XK_LATIN9 */ -#ifdef XK_KATAKANA - NKS(overline), - NKS(kana_fullstop), - NKS(kana_openingbracket), - NKS(kana_closingbracket), - NKS(kana_comma), - NKS(kana_conjunctive), - NKS(kana_middledot), - NKS(kana_WO), - NKS(kana_a), - NKS(kana_i), - NKS(kana_u), - NKS(kana_e), - NKS(kana_o), - NKS(kana_ya), - NKS(kana_yu), - NKS(kana_yo), - NKS(kana_tsu), - NKS(kana_tu), - NKS(prolongedsound), - NKS(kana_A), - NKS(kana_I), - NKS(kana_U), - NKS(kana_E), - NKS(kana_O), - NKS(kana_KA), - NKS(kana_KI), - NKS(kana_KU), - NKS(kana_KE), - NKS(kana_KO), - NKS(kana_SA), - NKS(kana_SHI), - NKS(kana_SU), - NKS(kana_SE), - NKS(kana_SO), - NKS(kana_TA), - NKS(kana_CHI), - NKS(kana_TI), - NKS(kana_TSU), - NKS(kana_TU), - NKS(kana_TE), - NKS(kana_TO), - NKS(kana_NA), - NKS(kana_NI), - NKS(kana_NU), - NKS(kana_NE), - NKS(kana_NO), - NKS(kana_HA), - NKS(kana_HI), - NKS(kana_FU), - NKS(kana_HU), - NKS(kana_HE), - NKS(kana_HO), - NKS(kana_MA), - NKS(kana_MI), - NKS(kana_MU), - NKS(kana_ME), - NKS(kana_MO), - NKS(kana_YA), - NKS(kana_YU), - NKS(kana_YO), - NKS(kana_RA), - NKS(kana_RI), - NKS(kana_RU), - NKS(kana_RE), - NKS(kana_RO), - NKS(kana_WA), - NKS(kana_N), - NKS(voicedsound), - NKS(semivoicedsound), - NKS(kana_switch), -#endif /* XK_KATAKANA */ -#ifdef XK_ARABIC - NKS(Farsi_0), - NKS(Farsi_1), - NKS(Farsi_2), - NKS(Farsi_3), - NKS(Farsi_4), - NKS(Farsi_5), - NKS(Farsi_6), - NKS(Farsi_7), - NKS(Farsi_8), - NKS(Farsi_9), - NKS(Arabic_percent), - NKS(Arabic_superscript_alef), - NKS(Arabic_tteh), - NKS(Arabic_peh), - NKS(Arabic_tcheh), - NKS(Arabic_ddal), - NKS(Arabic_rreh), - NKS(Arabic_comma), - NKS(Arabic_fullstop), - NKS(Arabic_0), - NKS(Arabic_1), - NKS(Arabic_2), - NKS(Arabic_3), - NKS(Arabic_4), - NKS(Arabic_5), - NKS(Arabic_6), - NKS(Arabic_7), - NKS(Arabic_8), - NKS(Arabic_9), - NKS(Arabic_semicolon), - NKS(Arabic_question_mark), - NKS(Arabic_hamza), - NKS(Arabic_maddaonalef), - NKS(Arabic_hamzaonalef), - NKS(Arabic_hamzaonwaw), - NKS(Arabic_hamzaunderalef), - NKS(Arabic_hamzaonyeh), - NKS(Arabic_alef), - NKS(Arabic_beh), - NKS(Arabic_tehmarbuta), - NKS(Arabic_teh), - NKS(Arabic_theh), - NKS(Arabic_jeem), - NKS(Arabic_hah), - NKS(Arabic_khah), - NKS(Arabic_dal), - NKS(Arabic_thal), - NKS(Arabic_ra), - NKS(Arabic_zain), - NKS(Arabic_seen), - NKS(Arabic_sheen), - NKS(Arabic_sad), - NKS(Arabic_dad), - NKS(Arabic_tah), - NKS(Arabic_zah), - NKS(Arabic_ain), - NKS(Arabic_ghain), - NKS(Arabic_tatweel), - NKS(Arabic_feh), - NKS(Arabic_qaf), - NKS(Arabic_kaf), - NKS(Arabic_lam), - NKS(Arabic_meem), - NKS(Arabic_noon), - NKS(Arabic_ha), - NKS(Arabic_heh), - NKS(Arabic_waw), - NKS(Arabic_alefmaksura), - NKS(Arabic_yeh), - NKS(Arabic_fathatan), - NKS(Arabic_dammatan), - NKS(Arabic_kasratan), - NKS(Arabic_fatha), - NKS(Arabic_damma), - NKS(Arabic_kasra), - NKS(Arabic_shadda), - NKS(Arabic_sukun), - NKS(Arabic_madda_above), - NKS(Arabic_hamza_above), - NKS(Arabic_hamza_below), - NKS(Arabic_jeh), - NKS(Arabic_veh), - NKS(Arabic_keheh), - NKS(Arabic_gaf), - NKS(Arabic_noon_ghunna), - NKS(Arabic_heh_doachashmee), - NKS(Farsi_yeh), - NKS(Arabic_farsi_yeh), - NKS(Arabic_yeh_baree), - NKS(Arabic_heh_goal), - NKS(Arabic_switch), -#endif /* XK_ARABIC */ -#ifdef XK_CYRILLIC - NKS(Cyrillic_GHE_bar), - NKS(Cyrillic_ghe_bar), - NKS(Cyrillic_ZHE_descender), - NKS(Cyrillic_zhe_descender), - NKS(Cyrillic_KA_descender), - NKS(Cyrillic_ka_descender), - NKS(Cyrillic_KA_vertstroke), - NKS(Cyrillic_ka_vertstroke), - NKS(Cyrillic_EN_descender), - NKS(Cyrillic_en_descender), - NKS(Cyrillic_U_straight), - NKS(Cyrillic_u_straight), - NKS(Cyrillic_U_straight_bar), - NKS(Cyrillic_u_straight_bar), - NKS(Cyrillic_HA_descender), - NKS(Cyrillic_ha_descender), - NKS(Cyrillic_CHE_descender), - NKS(Cyrillic_che_descender), - NKS(Cyrillic_CHE_vertstroke), - NKS(Cyrillic_che_vertstroke), - NKS(Cyrillic_SHHA), - NKS(Cyrillic_shha), - NKS(Cyrillic_SCHWA), - NKS(Cyrillic_schwa), - NKS(Cyrillic_I_macron), - NKS(Cyrillic_i_macron), - NKS(Cyrillic_O_bar), - NKS(Cyrillic_o_bar), - NKS(Cyrillic_U_macron), - NKS(Cyrillic_u_macron), - NKS(Serbian_dje), - NKS(Macedonia_gje), - NKS(Cyrillic_io), - NKS(Ukrainian_ie), - NKS(Ukranian_je), - NKS(Macedonia_dse), - NKS(Ukrainian_i), - NKS(Ukranian_i), - NKS(Ukrainian_yi), - NKS(Ukranian_yi), - NKS(Cyrillic_je), - NKS(Serbian_je), - NKS(Cyrillic_lje), - NKS(Serbian_lje), - NKS(Cyrillic_nje), - NKS(Serbian_nje), - NKS(Serbian_tshe), - NKS(Macedonia_kje), - NKS(Ukrainian_ghe_with_upturn), - NKS(Byelorussian_shortu), - NKS(Cyrillic_dzhe), - NKS(Serbian_dze), - NKS(numerosign), - NKS(Serbian_DJE), - NKS(Macedonia_GJE), - NKS(Cyrillic_IO), - NKS(Ukrainian_IE), - NKS(Ukranian_JE), - NKS(Macedonia_DSE), - NKS(Ukrainian_I), - NKS(Ukranian_I), - NKS(Ukrainian_YI), - NKS(Ukranian_YI), - NKS(Cyrillic_JE), - NKS(Serbian_JE), - NKS(Cyrillic_LJE), - NKS(Serbian_LJE), - NKS(Cyrillic_NJE), - NKS(Serbian_NJE), - NKS(Serbian_TSHE), - NKS(Macedonia_KJE), - NKS(Ukrainian_GHE_WITH_UPTURN), - NKS(Byelorussian_SHORTU), - NKS(Cyrillic_DZHE), - NKS(Serbian_DZE), - NKS(Cyrillic_yu), - NKS(Cyrillic_a), - NKS(Cyrillic_be), - NKS(Cyrillic_tse), - NKS(Cyrillic_de), - NKS(Cyrillic_ie), - NKS(Cyrillic_ef), - NKS(Cyrillic_ghe), - NKS(Cyrillic_ha), - NKS(Cyrillic_i), - NKS(Cyrillic_shorti), - NKS(Cyrillic_ka), - NKS(Cyrillic_el), - NKS(Cyrillic_em), - NKS(Cyrillic_en), - NKS(Cyrillic_o), - NKS(Cyrillic_pe), - NKS(Cyrillic_ya), - NKS(Cyrillic_er), - NKS(Cyrillic_es), - NKS(Cyrillic_te), - NKS(Cyrillic_u), - NKS(Cyrillic_zhe), - NKS(Cyrillic_ve), - NKS(Cyrillic_softsign), - NKS(Cyrillic_yeru), - NKS(Cyrillic_ze), - NKS(Cyrillic_sha), - NKS(Cyrillic_e), - NKS(Cyrillic_shcha), - NKS(Cyrillic_che), - NKS(Cyrillic_hardsign), - NKS(Cyrillic_YU), - NKS(Cyrillic_A), - NKS(Cyrillic_BE), - NKS(Cyrillic_TSE), - NKS(Cyrillic_DE), - NKS(Cyrillic_IE), - NKS(Cyrillic_EF), - NKS(Cyrillic_GHE), - NKS(Cyrillic_HA), - NKS(Cyrillic_I), - NKS(Cyrillic_SHORTI), - NKS(Cyrillic_KA), - NKS(Cyrillic_EL), - NKS(Cyrillic_EM), - NKS(Cyrillic_EN), - NKS(Cyrillic_O), - NKS(Cyrillic_PE), - NKS(Cyrillic_YA), - NKS(Cyrillic_ER), - NKS(Cyrillic_ES), - NKS(Cyrillic_TE), - NKS(Cyrillic_U), - NKS(Cyrillic_ZHE), - NKS(Cyrillic_VE), - NKS(Cyrillic_SOFTSIGN), - NKS(Cyrillic_YERU), - NKS(Cyrillic_ZE), - NKS(Cyrillic_SHA), - NKS(Cyrillic_E), - NKS(Cyrillic_SHCHA), - NKS(Cyrillic_CHE), - NKS(Cyrillic_HARDSIGN), -#endif /* XK_CYRILLIC */ -#ifdef XK_GREEK - NKS(Greek_ALPHAaccent), - NKS(Greek_EPSILONaccent), - NKS(Greek_ETAaccent), - NKS(Greek_IOTAaccent), - NKS(Greek_IOTAdieresis), - NKS(Greek_IOTAdiaeresis), - NKS(Greek_OMICRONaccent), - NKS(Greek_UPSILONaccent), - NKS(Greek_UPSILONdieresis), - NKS(Greek_OMEGAaccent), - NKS(Greek_accentdieresis), - NKS(Greek_horizbar), - NKS(Greek_alphaaccent), - NKS(Greek_epsilonaccent), - NKS(Greek_etaaccent), - NKS(Greek_iotaaccent), - NKS(Greek_iotadieresis), - NKS(Greek_iotaaccentdieresis), - NKS(Greek_omicronaccent), - NKS(Greek_upsilonaccent), - NKS(Greek_upsilondieresis), - NKS(Greek_upsilonaccentdieresis), - NKS(Greek_omegaaccent), - NKS(Greek_ALPHA), - NKS(Greek_BETA), - NKS(Greek_GAMMA), - NKS(Greek_DELTA), - NKS(Greek_EPSILON), - NKS(Greek_ZETA), - NKS(Greek_ETA), - NKS(Greek_THETA), - NKS(Greek_IOTA), - NKS(Greek_KAPPA), - NKS(Greek_LAMDA), - NKS(Greek_LAMBDA), - NKS(Greek_MU), - NKS(Greek_NU), - NKS(Greek_XI), - NKS(Greek_OMICRON), - NKS(Greek_PI), - NKS(Greek_RHO), - NKS(Greek_SIGMA), - NKS(Greek_TAU), - NKS(Greek_UPSILON), - NKS(Greek_PHI), - NKS(Greek_CHI), - NKS(Greek_PSI), - NKS(Greek_OMEGA), - NKS(Greek_alpha), - NKS(Greek_beta), - NKS(Greek_gamma), - NKS(Greek_delta), - NKS(Greek_epsilon), - NKS(Greek_zeta), - NKS(Greek_eta), - NKS(Greek_theta), - NKS(Greek_iota), - NKS(Greek_kappa), - NKS(Greek_lamda), - NKS(Greek_lambda), - NKS(Greek_mu), - NKS(Greek_nu), - NKS(Greek_xi), - NKS(Greek_omicron), - NKS(Greek_pi), - NKS(Greek_rho), - NKS(Greek_sigma), - NKS(Greek_finalsmallsigma), - NKS(Greek_tau), - NKS(Greek_upsilon), - NKS(Greek_phi), - NKS(Greek_chi), - NKS(Greek_psi), - NKS(Greek_omega), - NKS(Greek_switch), -#endif /* XK_GREEK */ -#ifdef XK_TECHNICAL - NKS(leftradical), - NKS(topleftradical), - NKS(horizconnector), - NKS(topintegral), - NKS(botintegral), - NKS(vertconnector), - NKS(topleftsqbracket), - NKS(botleftsqbracket), - NKS(toprightsqbracket), - NKS(botrightsqbracket), - NKS(topleftparens), - NKS(botleftparens), - NKS(toprightparens), - NKS(botrightparens), - NKS(leftmiddlecurlybrace), - NKS(rightmiddlecurlybrace), - NKS(topleftsummation), - NKS(botleftsummation), - NKS(topvertsummationconnector), - NKS(botvertsummationconnector), - NKS(toprightsummation), - NKS(botrightsummation), - NKS(rightmiddlesummation), - NKS(lessthanequal), - NKS(notequal), - NKS(greaterthanequal), - NKS(integral), - NKS(therefore), - NKS(variation), - NKS(infinity), - NKS(nabla), - NKS(approximate), - NKS(similarequal), - NKS(ifonlyif), - NKS(implies), - NKS(identical), - NKS(radical), - NKS(includedin), - NKS(includes), - NKS(intersection), - NKS(union), - NKS(logicaland), - NKS(logicalor), - NKS(partialderivative), - NKS(function), - NKS(leftarrow), - NKS(uparrow), - NKS(rightarrow), - NKS(downarrow), -#endif /* XK_TECHNICAL */ -#ifdef XK_SPECIAL - NKS(blank), - NKS(soliddiamond), - NKS(checkerboard), - NKS(ht), - NKS(ff), - NKS(cr), - NKS(lf), - NKS(nl), - NKS(vt), - NKS(lowrightcorner), - NKS(uprightcorner), - NKS(upleftcorner), - NKS(lowleftcorner), - NKS(crossinglines), - NKS(horizlinescan1), - NKS(horizlinescan3), - NKS(horizlinescan5), - NKS(horizlinescan7), - NKS(horizlinescan9), - NKS(leftt), - NKS(rightt), - NKS(bott), - NKS(topt), - NKS(vertbar), -#endif /* XK_SPECIAL */ -#ifdef XK_PUBLISHING - NKS(emspace), - NKS(enspace), - NKS(em3space), - NKS(em4space), - NKS(digitspace), - NKS(punctspace), - NKS(thinspace), - NKS(hairspace), - NKS(emdash), - NKS(endash), - NKS(signifblank), - NKS(ellipsis), - NKS(doubbaselinedot), - NKS(onethird), - NKS(twothirds), - NKS(onefifth), - NKS(twofifths), - NKS(threefifths), - NKS(fourfifths), - NKS(onesixth), - NKS(fivesixths), - NKS(careof), - NKS(figdash), - NKS(leftanglebracket), - NKS(decimalpoint), - NKS(rightanglebracket), - NKS(marker), - NKS(oneeighth), - NKS(threeeighths), - NKS(fiveeighths), - NKS(seveneighths), - NKS(trademark), - NKS(signaturemark), - NKS(trademarkincircle), - NKS(leftopentriangle), - NKS(rightopentriangle), - NKS(emopencircle), - NKS(emopenrectangle), - NKS(leftsinglequotemark), - NKS(rightsinglequotemark), - NKS(leftdoublequotemark), - NKS(rightdoublequotemark), - NKS(prescription), - NKS(permille), - NKS(minutes), - NKS(seconds), - NKS(latincross), - NKS(hexagram), - NKS(filledrectbullet), - NKS(filledlefttribullet), - NKS(filledrighttribullet), - NKS(emfilledcircle), - NKS(emfilledrect), - NKS(enopencircbullet), - NKS(enopensquarebullet), - NKS(openrectbullet), - NKS(opentribulletup), - NKS(opentribulletdown), - NKS(openstar), - NKS(enfilledcircbullet), - NKS(enfilledsqbullet), - NKS(filledtribulletup), - NKS(filledtribulletdown), - NKS(leftpointer), - NKS(rightpointer), - NKS(club), - NKS(diamond), - NKS(heart), - NKS(maltesecross), - NKS(dagger), - NKS(doubledagger), - NKS(checkmark), - NKS(ballotcross), - NKS(musicalsharp), - NKS(musicalflat), - NKS(malesymbol), - NKS(femalesymbol), - NKS(telephone), - NKS(telephonerecorder), - NKS(phonographcopyright), - NKS(caret), - NKS(singlelowquotemark), - NKS(doublelowquotemark), - NKS(cursor), -#endif /* XK_PUBLISHING */ -#ifdef XK_APL - NKS(leftcaret), - NKS(rightcaret), - NKS(downcaret), - NKS(upcaret), - NKS(overbar), - NKS(downtack), - NKS(upshoe), - NKS(downstile), - NKS(underbar), - NKS(jot), - NKS(quad), - NKS(uptack), - NKS(circle), - NKS(upstile), - NKS(downshoe), - NKS(rightshoe), - NKS(leftshoe), - NKS(lefttack), - NKS(righttack), -#endif /* XK_APL */ -#ifdef XK_HEBREW - NKS(hebrew_doublelowline), - NKS(hebrew_aleph), - NKS(hebrew_bet), - NKS(hebrew_beth), - NKS(hebrew_gimel), - NKS(hebrew_gimmel), - NKS(hebrew_dalet), - NKS(hebrew_daleth), - NKS(hebrew_he), - NKS(hebrew_waw), - NKS(hebrew_zain), - NKS(hebrew_zayin), - NKS(hebrew_chet), - NKS(hebrew_het), - NKS(hebrew_tet), - NKS(hebrew_teth), - NKS(hebrew_yod), - NKS(hebrew_finalkaph), - NKS(hebrew_kaph), - NKS(hebrew_lamed), - NKS(hebrew_finalmem), - NKS(hebrew_mem), - NKS(hebrew_finalnun), - NKS(hebrew_nun), - NKS(hebrew_samech), - NKS(hebrew_samekh), - NKS(hebrew_ayin), - NKS(hebrew_finalpe), - NKS(hebrew_pe), - NKS(hebrew_finalzade), - NKS(hebrew_finalzadi), - NKS(hebrew_zade), - NKS(hebrew_zadi), - NKS(hebrew_qoph), - NKS(hebrew_kuf), - NKS(hebrew_resh), - NKS(hebrew_shin), - NKS(hebrew_taw), - NKS(hebrew_taf), - NKS(Hebrew_switch), -#endif /* XK_HEBREW */ -#ifdef XK_THAI - NKS(Thai_kokai), - NKS(Thai_khokhai), - NKS(Thai_khokhuat), - NKS(Thai_khokhwai), - NKS(Thai_khokhon), - NKS(Thai_khorakhang), - NKS(Thai_ngongu), - NKS(Thai_chochan), - NKS(Thai_choching), - NKS(Thai_chochang), - NKS(Thai_soso), - NKS(Thai_chochoe), - NKS(Thai_yoying), - NKS(Thai_dochada), - NKS(Thai_topatak), - NKS(Thai_thothan), - NKS(Thai_thonangmontho), - NKS(Thai_thophuthao), - NKS(Thai_nonen), - NKS(Thai_dodek), - NKS(Thai_totao), - NKS(Thai_thothung), - NKS(Thai_thothahan), - NKS(Thai_thothong), - NKS(Thai_nonu), - NKS(Thai_bobaimai), - NKS(Thai_popla), - NKS(Thai_phophung), - NKS(Thai_fofa), - NKS(Thai_phophan), - NKS(Thai_fofan), - NKS(Thai_phosamphao), - NKS(Thai_moma), - NKS(Thai_yoyak), - NKS(Thai_rorua), - NKS(Thai_ru), - NKS(Thai_loling), - NKS(Thai_lu), - NKS(Thai_wowaen), - NKS(Thai_sosala), - NKS(Thai_sorusi), - NKS(Thai_sosua), - NKS(Thai_hohip), - NKS(Thai_lochula), - NKS(Thai_oang), - NKS(Thai_honokhuk), - NKS(Thai_paiyannoi), - NKS(Thai_saraa), - NKS(Thai_maihanakat), - NKS(Thai_saraaa), - NKS(Thai_saraam), - NKS(Thai_sarai), - NKS(Thai_saraii), - NKS(Thai_saraue), - NKS(Thai_sarauee), - NKS(Thai_sarau), - NKS(Thai_sarauu), - NKS(Thai_phinthu), - NKS(Thai_maihanakat_maitho), - NKS(Thai_baht), - NKS(Thai_sarae), - NKS(Thai_saraae), - NKS(Thai_sarao), - NKS(Thai_saraaimaimuan), - NKS(Thai_saraaimaimalai), - NKS(Thai_lakkhangyao), - NKS(Thai_maiyamok), - NKS(Thai_maitaikhu), - NKS(Thai_maiek), - NKS(Thai_maitho), - NKS(Thai_maitri), - NKS(Thai_maichattawa), - NKS(Thai_thanthakhat), - NKS(Thai_nikhahit), - NKS(Thai_leksun), - NKS(Thai_leknung), - NKS(Thai_leksong), - NKS(Thai_leksam), - NKS(Thai_leksi), - NKS(Thai_lekha), - NKS(Thai_lekhok), - NKS(Thai_lekchet), - NKS(Thai_lekpaet), - NKS(Thai_lekkao), -#endif /* XK_THAI */ -#ifdef XK_KOREAN - NKS(Hangul), - NKS(Hangul_Start), - NKS(Hangul_End), - NKS(Hangul_Hanja), - NKS(Hangul_Jamo), - NKS(Hangul_Romaja), - NKS(Hangul_Codeinput), - NKS(Hangul_Jeonja), - NKS(Hangul_Banja), - NKS(Hangul_PreHanja), - NKS(Hangul_PostHanja), - NKS(Hangul_SingleCandidate), - NKS(Hangul_MultipleCandidate), - NKS(Hangul_PreviousCandidate), - NKS(Hangul_Special), - NKS(Hangul_switch), - NKS(Hangul_Kiyeog), - NKS(Hangul_SsangKiyeog), - NKS(Hangul_KiyeogSios), - NKS(Hangul_Nieun), - NKS(Hangul_NieunJieuj), - NKS(Hangul_NieunHieuh), - NKS(Hangul_Dikeud), - NKS(Hangul_SsangDikeud), - NKS(Hangul_Rieul), - NKS(Hangul_RieulKiyeog), - NKS(Hangul_RieulMieum), - NKS(Hangul_RieulPieub), - NKS(Hangul_RieulSios), - NKS(Hangul_RieulTieut), - NKS(Hangul_RieulPhieuf), - NKS(Hangul_RieulHieuh), - NKS(Hangul_Mieum), - NKS(Hangul_Pieub), - NKS(Hangul_SsangPieub), - NKS(Hangul_PieubSios), - NKS(Hangul_Sios), - NKS(Hangul_SsangSios), - NKS(Hangul_Ieung), - NKS(Hangul_Jieuj), - NKS(Hangul_SsangJieuj), - NKS(Hangul_Cieuc), - NKS(Hangul_Khieuq), - NKS(Hangul_Tieut), - NKS(Hangul_Phieuf), - NKS(Hangul_Hieuh), - NKS(Hangul_A), - NKS(Hangul_AE), - NKS(Hangul_YA), - NKS(Hangul_YAE), - NKS(Hangul_EO), - NKS(Hangul_E), - NKS(Hangul_YEO), - NKS(Hangul_YE), - NKS(Hangul_O), - NKS(Hangul_WA), - NKS(Hangul_WAE), - NKS(Hangul_OE), - NKS(Hangul_YO), - NKS(Hangul_U), - NKS(Hangul_WEO), - NKS(Hangul_WE), - NKS(Hangul_WI), - NKS(Hangul_YU), - NKS(Hangul_EU), - NKS(Hangul_YI), - NKS(Hangul_I), - NKS(Hangul_J_Kiyeog), - NKS(Hangul_J_SsangKiyeog), - NKS(Hangul_J_KiyeogSios), - NKS(Hangul_J_Nieun), - NKS(Hangul_J_NieunJieuj), - NKS(Hangul_J_NieunHieuh), - NKS(Hangul_J_Dikeud), - NKS(Hangul_J_Rieul), - NKS(Hangul_J_RieulKiyeog), - NKS(Hangul_J_RieulMieum), - NKS(Hangul_J_RieulPieub), - NKS(Hangul_J_RieulSios), - NKS(Hangul_J_RieulTieut), - NKS(Hangul_J_RieulPhieuf), - NKS(Hangul_J_RieulHieuh), - NKS(Hangul_J_Mieum), - NKS(Hangul_J_Pieub), - NKS(Hangul_J_PieubSios), - NKS(Hangul_J_Sios), - NKS(Hangul_J_SsangSios), - NKS(Hangul_J_Ieung), - NKS(Hangul_J_Jieuj), - NKS(Hangul_J_Cieuc), - NKS(Hangul_J_Khieuq), - NKS(Hangul_J_Tieut), - NKS(Hangul_J_Phieuf), - NKS(Hangul_J_Hieuh), - NKS(Hangul_RieulYeorinHieuh), - NKS(Hangul_SunkyeongeumMieum), - NKS(Hangul_SunkyeongeumPieub), - NKS(Hangul_PanSios), - NKS(Hangul_KkogjiDalrinIeung), - NKS(Hangul_SunkyeongeumPhieuf), - NKS(Hangul_YeorinHieuh), - NKS(Hangul_AraeA), - NKS(Hangul_AraeAE), - NKS(Hangul_J_PanSios), - NKS(Hangul_J_KkogjiDalrinIeung), - NKS(Hangul_J_YeorinHieuh), - NKS(Korean_Won), -#endif /* XK_KOREAN */ -#ifdef XK_ARMENIAN - NKS(Armenian_ligature_ew), - NKS(Armenian_full_stop), - NKS(Armenian_verjaket), - NKS(Armenian_separation_mark), - NKS(Armenian_but), - NKS(Armenian_hyphen), - NKS(Armenian_yentamna), - NKS(Armenian_exclam), - NKS(Armenian_amanak), - NKS(Armenian_accent), - NKS(Armenian_shesht), - NKS(Armenian_question), - NKS(Armenian_paruyk), - NKS(Armenian_AYB), - NKS(Armenian_ayb), - NKS(Armenian_BEN), - NKS(Armenian_ben), - NKS(Armenian_GIM), - NKS(Armenian_gim), - NKS(Armenian_DA), - NKS(Armenian_da), - NKS(Armenian_YECH), - NKS(Armenian_yech), - NKS(Armenian_ZA), - NKS(Armenian_za), - NKS(Armenian_E), - NKS(Armenian_e), - NKS(Armenian_AT), - NKS(Armenian_at), - NKS(Armenian_TO), - NKS(Armenian_to), - NKS(Armenian_ZHE), - NKS(Armenian_zhe), - NKS(Armenian_INI), - NKS(Armenian_ini), - NKS(Armenian_LYUN), - NKS(Armenian_lyun), - NKS(Armenian_KHE), - NKS(Armenian_khe), - NKS(Armenian_TSA), - NKS(Armenian_tsa), - NKS(Armenian_KEN), - NKS(Armenian_ken), - NKS(Armenian_HO), - NKS(Armenian_ho), - NKS(Armenian_DZA), - NKS(Armenian_dza), - NKS(Armenian_GHAT), - NKS(Armenian_ghat), - NKS(Armenian_TCHE), - NKS(Armenian_tche), - NKS(Armenian_MEN), - NKS(Armenian_men), - NKS(Armenian_HI), - NKS(Armenian_hi), - NKS(Armenian_NU), - NKS(Armenian_nu), - NKS(Armenian_SHA), - NKS(Armenian_sha), - NKS(Armenian_VO), - NKS(Armenian_vo), - NKS(Armenian_CHA), - NKS(Armenian_cha), - NKS(Armenian_PE), - NKS(Armenian_pe), - NKS(Armenian_JE), - NKS(Armenian_je), - NKS(Armenian_RA), - NKS(Armenian_ra), - NKS(Armenian_SE), - NKS(Armenian_se), - NKS(Armenian_VEV), - NKS(Armenian_vev), - NKS(Armenian_TYUN), - NKS(Armenian_tyun), - NKS(Armenian_RE), - NKS(Armenian_re), - NKS(Armenian_TSO), - NKS(Armenian_tso), - NKS(Armenian_VYUN), - NKS(Armenian_vyun), - NKS(Armenian_PYUR), - NKS(Armenian_pyur), - NKS(Armenian_KE), - NKS(Armenian_ke), - NKS(Armenian_O), - NKS(Armenian_o), - NKS(Armenian_FE), - NKS(Armenian_fe), - NKS(Armenian_apostrophe), -#endif /* XK_ARMENIAN */ -#ifdef XK_GEORGIAN - NKS(Georgian_an), - NKS(Georgian_ban), - NKS(Georgian_gan), - NKS(Georgian_don), - NKS(Georgian_en), - NKS(Georgian_vin), - NKS(Georgian_zen), - NKS(Georgian_tan), - NKS(Georgian_in), - NKS(Georgian_kan), - NKS(Georgian_las), - NKS(Georgian_man), - NKS(Georgian_nar), - NKS(Georgian_on), - NKS(Georgian_par), - NKS(Georgian_zhar), - NKS(Georgian_rae), - NKS(Georgian_san), - NKS(Georgian_tar), - NKS(Georgian_un), - NKS(Georgian_phar), - NKS(Georgian_khar), - NKS(Georgian_ghan), - NKS(Georgian_qar), - NKS(Georgian_shin), - NKS(Georgian_chin), - NKS(Georgian_can), - NKS(Georgian_jil), - NKS(Georgian_cil), - NKS(Georgian_char), - NKS(Georgian_xan), - NKS(Georgian_jhan), - NKS(Georgian_hae), - NKS(Georgian_he), - NKS(Georgian_hie), - NKS(Georgian_we), - NKS(Georgian_har), - NKS(Georgian_hoe), - NKS(Georgian_fi), -#endif /* XK_GEORGIAN */ -#ifdef XK_CAUCASUS - NKS(Xabovedot), - NKS(Ibreve), - NKS(Zstroke), - NKS(Gcaron), - NKS(Ocaron), - NKS(Obarred), - NKS(xabovedot), - NKS(ibreve), - NKS(zstroke), - NKS(gcaron), - NKS(ocaron), - NKS(obarred), - NKS(SCHWA), - NKS(schwa), - NKS(EZH), - NKS(ezh), - NKS(Lbelowdot), - NKS(lbelowdot), -#endif /* XK_CAUCASUS */ -#ifdef XK_VIETNAMESE - NKS(Abelowdot), - NKS(abelowdot), - NKS(Ahook), - NKS(ahook), - NKS(Acircumflexacute), - NKS(acircumflexacute), - NKS(Acircumflexgrave), - NKS(acircumflexgrave), - NKS(Acircumflexhook), - NKS(acircumflexhook), - NKS(Acircumflextilde), - NKS(acircumflextilde), - NKS(Acircumflexbelowdot), - NKS(acircumflexbelowdot), - NKS(Abreveacute), - NKS(abreveacute), - NKS(Abrevegrave), - NKS(abrevegrave), - NKS(Abrevehook), - NKS(abrevehook), - NKS(Abrevetilde), - NKS(abrevetilde), - NKS(Abrevebelowdot), - NKS(abrevebelowdot), - NKS(Ebelowdot), - NKS(ebelowdot), - NKS(Ehook), - NKS(ehook), - NKS(Etilde), - NKS(etilde), - NKS(Ecircumflexacute), - NKS(ecircumflexacute), - NKS(Ecircumflexgrave), - NKS(ecircumflexgrave), - NKS(Ecircumflexhook), - NKS(ecircumflexhook), - NKS(Ecircumflextilde), - NKS(ecircumflextilde), - NKS(Ecircumflexbelowdot), - NKS(ecircumflexbelowdot), - NKS(Ihook), - NKS(ihook), - NKS(Ibelowdot), - NKS(ibelowdot), - NKS(Obelowdot), - NKS(obelowdot), - NKS(Ohook), - NKS(ohook), - NKS(Ocircumflexacute), - NKS(ocircumflexacute), - NKS(Ocircumflexgrave), - NKS(ocircumflexgrave), - NKS(Ocircumflexhook), - NKS(ocircumflexhook), - NKS(Ocircumflextilde), - NKS(ocircumflextilde), - NKS(Ocircumflexbelowdot), - NKS(ocircumflexbelowdot), - NKS(Ohornacute), - NKS(ohornacute), - NKS(Ohorngrave), - NKS(ohorngrave), - NKS(Ohornhook), - NKS(ohornhook), - NKS(Ohorntilde), - NKS(ohorntilde), - NKS(Ohornbelowdot), - NKS(ohornbelowdot), - NKS(Ubelowdot), - NKS(ubelowdot), - NKS(Uhook), - NKS(uhook), - NKS(Uhornacute), - NKS(uhornacute), - NKS(Uhorngrave), - NKS(uhorngrave), - NKS(Uhornhook), - NKS(uhornhook), - NKS(Uhorntilde), - NKS(uhorntilde), - NKS(Uhornbelowdot), - NKS(uhornbelowdot), - NKS(Ybelowdot), - NKS(ybelowdot), - NKS(Yhook), - NKS(yhook), - NKS(Ytilde), - NKS(ytilde), - NKS(Ohorn), - NKS(ohorn), - NKS(Uhorn), - NKS(uhorn), -#endif /* XK_VIETNAMESE */ -#ifdef XK_CURRENCY - NKS(EcuSign), - NKS(ColonSign), - NKS(CruzeiroSign), - NKS(FFrancSign), - NKS(LiraSign), - NKS(MillSign), - NKS(NairaSign), - NKS(PesetaSign), - NKS(RupeeSign), - NKS(WonSign), - NKS(NewSheqelSign), - NKS(DongSign), - NKS(EuroSign), -#endif /* XK_CURRENCY */ -#ifdef XK_MATHEMATICAL - NKS(zerosuperior), - NKS(foursuperior), - NKS(fivesuperior), - NKS(sixsuperior), - NKS(sevensuperior), - NKS(eightsuperior), - NKS(ninesuperior), - NKS(zerosubscript), - NKS(onesubscript), - NKS(twosubscript), - NKS(threesubscript), - NKS(foursubscript), - NKS(fivesubscript), - NKS(sixsubscript), - NKS(sevensubscript), - NKS(eightsubscript), - NKS(ninesubscript), - NKS(partdifferential), - NKS(emptyset), - NKS(elementof), - NKS(notelementof), - NKS(containsas), - NKS(squareroot), - NKS(cuberoot), - NKS(fourthroot), - NKS(dintegral), - NKS(tintegral), - NKS(because), - NKS(approxeq), - NKS(notapproxeq), - NKS(notidentical), - NKS(stricteq), -#endif /* XK_MATHEMATICAL */ -#ifdef XK_BRAILLE - NKS(braille_dot_1), - NKS(braille_dot_2), - NKS(braille_dot_3), - NKS(braille_dot_4), - NKS(braille_dot_5), - NKS(braille_dot_6), - NKS(braille_dot_7), - NKS(braille_dot_8), - NKS(braille_dot_9), - NKS(braille_dot_10), - NKS(braille_blank), - NKS(braille_dots_1), - NKS(braille_dots_2), - NKS(braille_dots_12), - NKS(braille_dots_3), - NKS(braille_dots_13), - NKS(braille_dots_23), - NKS(braille_dots_123), - NKS(braille_dots_4), - NKS(braille_dots_14), - NKS(braille_dots_24), - NKS(braille_dots_124), - NKS(braille_dots_34), - NKS(braille_dots_134), - NKS(braille_dots_234), - NKS(braille_dots_1234), - NKS(braille_dots_5), - NKS(braille_dots_15), - NKS(braille_dots_25), - NKS(braille_dots_125), - NKS(braille_dots_35), - NKS(braille_dots_135), - NKS(braille_dots_235), - NKS(braille_dots_1235), - NKS(braille_dots_45), - NKS(braille_dots_145), - NKS(braille_dots_245), - NKS(braille_dots_1245), - NKS(braille_dots_345), - NKS(braille_dots_1345), - NKS(braille_dots_2345), - NKS(braille_dots_12345), - NKS(braille_dots_6), - NKS(braille_dots_16), - NKS(braille_dots_26), - NKS(braille_dots_126), - NKS(braille_dots_36), - NKS(braille_dots_136), - NKS(braille_dots_236), - NKS(braille_dots_1236), - NKS(braille_dots_46), - NKS(braille_dots_146), - NKS(braille_dots_246), - NKS(braille_dots_1246), - NKS(braille_dots_346), - NKS(braille_dots_1346), - NKS(braille_dots_2346), - NKS(braille_dots_12346), - NKS(braille_dots_56), - NKS(braille_dots_156), - NKS(braille_dots_256), - NKS(braille_dots_1256), - NKS(braille_dots_356), - NKS(braille_dots_1356), - NKS(braille_dots_2356), - NKS(braille_dots_12356), - NKS(braille_dots_456), - NKS(braille_dots_1456), - NKS(braille_dots_2456), - NKS(braille_dots_12456), - NKS(braille_dots_3456), - NKS(braille_dots_13456), - NKS(braille_dots_23456), - NKS(braille_dots_123456), - NKS(braille_dots_7), - NKS(braille_dots_17), - NKS(braille_dots_27), - NKS(braille_dots_127), - NKS(braille_dots_37), - NKS(braille_dots_137), - NKS(braille_dots_237), - NKS(braille_dots_1237), - NKS(braille_dots_47), - NKS(braille_dots_147), - NKS(braille_dots_247), - NKS(braille_dots_1247), - NKS(braille_dots_347), - NKS(braille_dots_1347), - NKS(braille_dots_2347), - NKS(braille_dots_12347), - NKS(braille_dots_57), - NKS(braille_dots_157), - NKS(braille_dots_257), - NKS(braille_dots_1257), - NKS(braille_dots_357), - NKS(braille_dots_1357), - NKS(braille_dots_2357), - NKS(braille_dots_12357), - NKS(braille_dots_457), - NKS(braille_dots_1457), - NKS(braille_dots_2457), - NKS(braille_dots_12457), - NKS(braille_dots_3457), - NKS(braille_dots_13457), - NKS(braille_dots_23457), - NKS(braille_dots_123457), - NKS(braille_dots_67), - NKS(braille_dots_167), - NKS(braille_dots_267), - NKS(braille_dots_1267), - NKS(braille_dots_367), - NKS(braille_dots_1367), - NKS(braille_dots_2367), - NKS(braille_dots_12367), - NKS(braille_dots_467), - NKS(braille_dots_1467), - NKS(braille_dots_2467), - NKS(braille_dots_12467), - NKS(braille_dots_3467), - NKS(braille_dots_13467), - NKS(braille_dots_23467), - NKS(braille_dots_123467), - NKS(braille_dots_567), - NKS(braille_dots_1567), - NKS(braille_dots_2567), - NKS(braille_dots_12567), - NKS(braille_dots_3567), - NKS(braille_dots_13567), - NKS(braille_dots_23567), - NKS(braille_dots_123567), - NKS(braille_dots_4567), - NKS(braille_dots_14567), - NKS(braille_dots_24567), - NKS(braille_dots_124567), - NKS(braille_dots_34567), - NKS(braille_dots_134567), - NKS(braille_dots_234567), - NKS(braille_dots_1234567), - NKS(braille_dots_8), - NKS(braille_dots_18), - NKS(braille_dots_28), - NKS(braille_dots_128), - NKS(braille_dots_38), - NKS(braille_dots_138), - NKS(braille_dots_238), - NKS(braille_dots_1238), - NKS(braille_dots_48), - NKS(braille_dots_148), - NKS(braille_dots_248), - NKS(braille_dots_1248), - NKS(braille_dots_348), - NKS(braille_dots_1348), - NKS(braille_dots_2348), - NKS(braille_dots_12348), - NKS(braille_dots_58), - NKS(braille_dots_158), - NKS(braille_dots_258), - NKS(braille_dots_1258), - NKS(braille_dots_358), - NKS(braille_dots_1358), - NKS(braille_dots_2358), - NKS(braille_dots_12358), - NKS(braille_dots_458), - NKS(braille_dots_1458), - NKS(braille_dots_2458), - NKS(braille_dots_12458), - NKS(braille_dots_3458), - NKS(braille_dots_13458), - NKS(braille_dots_23458), - NKS(braille_dots_123458), - NKS(braille_dots_68), - NKS(braille_dots_168), - NKS(braille_dots_268), - NKS(braille_dots_1268), - NKS(braille_dots_368), - NKS(braille_dots_1368), - NKS(braille_dots_2368), - NKS(braille_dots_12368), - NKS(braille_dots_468), - NKS(braille_dots_1468), - NKS(braille_dots_2468), - NKS(braille_dots_12468), - NKS(braille_dots_3468), - NKS(braille_dots_13468), - NKS(braille_dots_23468), - NKS(braille_dots_123468), - NKS(braille_dots_568), - NKS(braille_dots_1568), - NKS(braille_dots_2568), - NKS(braille_dots_12568), - NKS(braille_dots_3568), - NKS(braille_dots_13568), - NKS(braille_dots_23568), - NKS(braille_dots_123568), - NKS(braille_dots_4568), - NKS(braille_dots_14568), - NKS(braille_dots_24568), - NKS(braille_dots_124568), - NKS(braille_dots_34568), - NKS(braille_dots_134568), - NKS(braille_dots_234568), - NKS(braille_dots_1234568), - NKS(braille_dots_78), - NKS(braille_dots_178), - NKS(braille_dots_278), - NKS(braille_dots_1278), - NKS(braille_dots_378), - NKS(braille_dots_1378), - NKS(braille_dots_2378), - NKS(braille_dots_12378), - NKS(braille_dots_478), - NKS(braille_dots_1478), - NKS(braille_dots_2478), - NKS(braille_dots_12478), - NKS(braille_dots_3478), - NKS(braille_dots_13478), - NKS(braille_dots_23478), - NKS(braille_dots_123478), - NKS(braille_dots_578), - NKS(braille_dots_1578), - NKS(braille_dots_2578), - NKS(braille_dots_12578), - NKS(braille_dots_3578), - NKS(braille_dots_13578), - NKS(braille_dots_23578), - NKS(braille_dots_123578), - NKS(braille_dots_4578), - NKS(braille_dots_14578), - NKS(braille_dots_24578), - NKS(braille_dots_124578), - NKS(braille_dots_34578), - NKS(braille_dots_134578), - NKS(braille_dots_234578), - NKS(braille_dots_1234578), - NKS(braille_dots_678), - NKS(braille_dots_1678), - NKS(braille_dots_2678), - NKS(braille_dots_12678), - NKS(braille_dots_3678), - NKS(braille_dots_13678), - NKS(braille_dots_23678), - NKS(braille_dots_123678), - NKS(braille_dots_4678), - NKS(braille_dots_14678), - NKS(braille_dots_24678), - NKS(braille_dots_124678), - NKS(braille_dots_34678), - NKS(braille_dots_134678), - NKS(braille_dots_234678), - NKS(braille_dots_1234678), - NKS(braille_dots_5678), - NKS(braille_dots_15678), - NKS(braille_dots_25678), - NKS(braille_dots_125678), - NKS(braille_dots_35678), - NKS(braille_dots_135678), - NKS(braille_dots_235678), - NKS(braille_dots_1235678), - NKS(braille_dots_45678), - NKS(braille_dots_145678), - NKS(braille_dots_245678), - NKS(braille_dots_1245678), - NKS(braille_dots_345678), - NKS(braille_dots_1345678), - NKS(braille_dots_2345678), - NKS(braille_dots_12345678), -#endif /* XK_BRAILLE */ -#ifdef XK_SINHALA - NKS(Sinh_ng), - NKS(Sinh_h2), - NKS(Sinh_a), - NKS(Sinh_aa), - NKS(Sinh_ae), - NKS(Sinh_aee), - NKS(Sinh_i), - NKS(Sinh_ii), - NKS(Sinh_u), - NKS(Sinh_uu), - NKS(Sinh_ri), - NKS(Sinh_rii), - NKS(Sinh_lu), - NKS(Sinh_luu), - NKS(Sinh_e), - NKS(Sinh_ee), - NKS(Sinh_ai), - NKS(Sinh_o), - NKS(Sinh_oo), - NKS(Sinh_au), - NKS(Sinh_ka), - NKS(Sinh_kha), - NKS(Sinh_ga), - NKS(Sinh_gha), - NKS(Sinh_ng2), - NKS(Sinh_nga), - NKS(Sinh_ca), - NKS(Sinh_cha), - NKS(Sinh_ja), - NKS(Sinh_jha), - NKS(Sinh_nya), - NKS(Sinh_jnya), - NKS(Sinh_nja), - NKS(Sinh_tta), - NKS(Sinh_ttha), - NKS(Sinh_dda), - NKS(Sinh_ddha), - NKS(Sinh_nna), - NKS(Sinh_ndda), - NKS(Sinh_tha), - NKS(Sinh_thha), - NKS(Sinh_dha), - NKS(Sinh_dhha), - NKS(Sinh_na), - NKS(Sinh_ndha), - NKS(Sinh_pa), - NKS(Sinh_pha), - NKS(Sinh_ba), - NKS(Sinh_bha), - NKS(Sinh_ma), - NKS(Sinh_mba), - NKS(Sinh_ya), - NKS(Sinh_ra), - NKS(Sinh_la), - NKS(Sinh_va), - NKS(Sinh_sha), - NKS(Sinh_ssha), - NKS(Sinh_sa), - NKS(Sinh_ha), - NKS(Sinh_lla), - NKS(Sinh_fa), - NKS(Sinh_al), - NKS(Sinh_aa2), - NKS(Sinh_ae2), - NKS(Sinh_aee2), - NKS(Sinh_i2), - NKS(Sinh_ii2), - NKS(Sinh_u2), - NKS(Sinh_uu2), - NKS(Sinh_ru2), - NKS(Sinh_e2), - NKS(Sinh_ee2), - NKS(Sinh_ai2), - NKS(Sinh_o2), - NKS(Sinh_oo2), - NKS(Sinh_au2), - NKS(Sinh_lu2), - NKS(Sinh_ruu2), - NKS(Sinh_luu2), - NKS(Sinh_kunddaliya), -#endif /* XK_SINHALA */ -#undef NKS -#define NKS(x) { #x, XF86XK_ ## x } - NKS(ModeLock), - NKS(MonBrightnessUp), - NKS(MonBrightnessDown), - NKS(KbdLightOnOff), - NKS(KbdBrightnessUp), - NKS(KbdBrightnessDown), - NKS(Standby), - NKS(AudioLowerVolume), - NKS(AudioMute), - NKS(AudioRaiseVolume), - NKS(AudioPlay), - NKS(AudioStop), - NKS(AudioPrev), - NKS(AudioNext), - NKS(HomePage), - NKS(Mail), - NKS(Start), - NKS(Search), - NKS(AudioRecord), - NKS(Calculator), - NKS(Memo), - NKS(ToDoList), - NKS(Calendar), - NKS(PowerDown), - NKS(ContrastAdjust), - NKS(RockerUp), - NKS(RockerDown), - NKS(RockerEnter), - NKS(Back), - NKS(Forward), - NKS(Stop), - NKS(Refresh), - NKS(PowerOff), - NKS(WakeUp), - NKS(Eject), - NKS(ScreenSaver), - NKS(WWW), - NKS(Sleep), - NKS(Favorites), - NKS(AudioPause), - NKS(AudioMedia), - NKS(MyComputer), - NKS(VendorHome), - NKS(LightBulb), - NKS(Shop), - NKS(History), - NKS(OpenURL), - NKS(AddFavorite), - NKS(HotLinks), - NKS(BrightnessAdjust), - NKS(Finance), - NKS(Community), - NKS(AudioRewind), - NKS(BackForward), - NKS(Launch0), - NKS(Launch1), - NKS(Launch2), - NKS(Launch3), - NKS(Launch4), - NKS(Launch5), - NKS(Launch6), - NKS(Launch7), - NKS(Launch8), - NKS(Launch9), - NKS(LaunchA), - NKS(LaunchB), - NKS(LaunchC), - NKS(LaunchD), - NKS(LaunchE), - NKS(LaunchF), - NKS(ApplicationLeft), - NKS(ApplicationRight), - NKS(Book), - NKS(CD), - NKS(Calculater), - NKS(Clear), - NKS(Close), - NKS(Copy), - NKS(Cut), - NKS(Display), - NKS(DOS), - NKS(Documents), - NKS(Excel), - NKS(Explorer), - NKS(Game), - NKS(Go), - NKS(iTouch), - NKS(LogOff), - NKS(Market), - NKS(Meeting), - NKS(MenuKB), - NKS(MenuPB), - NKS(MySites), - NKS(New), - NKS(News), - NKS(OfficeHome), - NKS(Open), - NKS(Option), - NKS(Paste), - NKS(Phone), - NKS(Q), - NKS(Reply), - NKS(Reload), - NKS(RotateWindows), - NKS(RotationPB), - NKS(RotationKB), - NKS(Save), - NKS(ScrollUp), - NKS(ScrollDown), - NKS(ScrollClick), - NKS(Send), - NKS(Spell), - NKS(SplitScreen), - NKS(Support), - NKS(TaskPane), - NKS(Terminal), - NKS(Tools), - NKS(Travel), - NKS(UserPB), - NKS(User1KB), - NKS(User2KB), - NKS(Video), - NKS(WheelButton), - NKS(Word), - NKS(Xfer), - NKS(ZoomIn), - NKS(ZoomOut), - NKS(Away), - NKS(Messenger), - NKS(WebCam), - NKS(MailForward), - NKS(Pictures), - NKS(Music), - NKS(Battery), - NKS(Bluetooth), - NKS(WLAN), - NKS(UWB), - NKS(AudioForward), - NKS(AudioRepeat), - NKS(AudioRandomPlay), - NKS(Subtitle), - NKS(AudioCycleTrack), - NKS(CycleAngle), - NKS(FrameBack), - NKS(FrameForward), - NKS(Time), - NKS(Select), - NKS(View), - NKS(TopMenu), - NKS(Red), - NKS(Green), - NKS(Yellow), - NKS(Blue), - NKS(Suspend), - NKS(Hibernate), - NKS(TouchpadToggle), - NKS(TouchpadOn), - NKS(TouchpadOff), - NKS(Switch_VT_1), - NKS(Switch_VT_2), - NKS(Switch_VT_3), - NKS(Switch_VT_4), - NKS(Switch_VT_5), - NKS(Switch_VT_6), - NKS(Switch_VT_7), - NKS(Switch_VT_8), - NKS(Switch_VT_9), - NKS(Switch_VT_10), - NKS(Switch_VT_11), - NKS(Switch_VT_12), - NKS(Ungrab), - NKS(ClearGrab), - NKS(Next_VMode), - NKS(Prev_VMode), - NKS(LogWindowTree), - NKS(LogGrabInfo), -#undef NKS -}; - -void grab(void) -{ - PUTS("grab"); - for (hotkey_t *hk = hotkeys; hk != NULL; hk = hk->next) { - if (hk->button == XCB_NONE) { - xcb_keycode_t *keycodes = keycodes_from_keysym(hk->keysym); - if (keycodes != NULL) - for (xcb_keycode_t *kc = keycodes; *kc != XCB_NO_SYMBOL; kc++) - if (hk->keysym == xcb_key_symbols_get_keysym(symbols, *kc, 0)) { - PRINTF("keycode for %u is %u\n", hk->keysym, *kc); - grab_key_button(*kc, hk->button, hk->modfield); - } - free(keycodes); - } else { - grab_key_button(XCB_NONE, hk->button, hk->modfield); - } - } -} - -void grab_key_button(xcb_keycode_t keycode, xcb_button_t button, uint16_t modfield) -{ - for (uint8_t i = 0; i < 8; i++) { - uint16_t lockfield = (i & 1 ? num_lock : 0) | (i & 2 ? caps_lock : 0) | (i & 4 ? scroll_lock : 0); - grab_key_button_checked(keycode, button, modfield | lockfield); - } -} - -void grab_key_button_checked(xcb_keycode_t keycode, xcb_button_t button, uint16_t modfield) -{ - xcb_generic_error_t *err; - if (button == XCB_NONE) - err = xcb_request_check(dpy, xcb_grab_key_checked(dpy, false, root, modfield, keycode, XCB_GRAB_MODE_ASYNC, XCB_GRAB_MODE_ASYNC)); - else - err = xcb_request_check(dpy, xcb_grab_button_checked(dpy, false, root, XCB_EVENT_MASK_BUTTON_PRESS | XCB_EVENT_MASK_BUTTON_RELEASE | XCB_EVENT_MASK_POINTER_MOTION, XCB_GRAB_MODE_ASYNC, XCB_GRAB_MODE_ASYNC, XCB_NONE, XCB_NONE, button, modfield)); - unsigned int value = (button == XCB_NONE ? keycode : button); - char *type = (button == XCB_NONE ? "key" : "button"); - if (err != NULL) { - warn("Could not grab %s %u with modfield %u: ", type, value, modfield); - if (err->error_code == XCB_ACCESS) - warn("the combination is already grabbed.\n"); - else - warn("error no %u encountered.\n", err->error_code); - free(err); - } else { - PRINTF("grab %s %u %u\n", type, value, modfield); - } -} - -void ungrab(void) -{ - PUTS("ungrab"); - xcb_ungrab_key(dpy, XCB_GRAB_ANY, root, XCB_BUTTON_MASK_ANY); - xcb_ungrab_button(dpy, XCB_BUTTON_INDEX_ANY, root, XCB_MOD_MASK_ANY); -} - -int16_t modfield_from_keysym(xcb_keysym_t keysym) -{ - uint16_t modfield = 0; - xcb_keycode_t *keycodes = NULL, *mod_keycodes = NULL; - xcb_get_modifier_mapping_reply_t *reply = NULL; - if ((keycodes = keycodes_from_keysym(keysym)) != NULL) { - if ((reply = xcb_get_modifier_mapping_reply(dpy, xcb_get_modifier_mapping(dpy), NULL)) != NULL) { - if ((mod_keycodes = xcb_get_modifier_mapping_keycodes(reply)) != NULL) { - unsigned int num_mod = xcb_get_modifier_mapping_keycodes_length(reply) / reply->keycodes_per_modifier; - for (unsigned int i = 0; i < num_mod; i++) { - for (unsigned int j = 0; j < reply->keycodes_per_modifier; j++) { - xcb_keycode_t mk = mod_keycodes[i * reply->keycodes_per_modifier + j]; - if (mk == XCB_NO_SYMBOL) - continue; - for (xcb_keycode_t *k = keycodes; *k != XCB_NO_SYMBOL; k++) - if (*k == mk) - modfield |= (1 << i); - } - } - - } - } - } - free(keycodes); - free(reply); - return modfield; -} - -xcb_keycode_t *keycodes_from_keysym(xcb_keysym_t keysym) -{ - xcb_setup_t const *setup; - unsigned int num = 0; - xcb_keycode_t *result = NULL, *result_np = NULL; - - if ((setup = xcb_get_setup(dpy)) != NULL) { - xcb_keycode_t min_kc = setup->min_keycode; - xcb_keycode_t max_kc = setup->max_keycode; - /* We must choose a type for kc other than xcb_keycode_t whose size is 1, otherwise, since max_kc will most likely be 255, if kc == 255, kc++ would be 0 and the outer loop would start over ad infinitum */ - for(unsigned int kc = min_kc; kc <= max_kc; kc++) - for(unsigned int col = 0; col < KEYSYMS_PER_KEYCODE; col++) { - xcb_keysym_t ks = xcb_key_symbols_get_keysym(symbols, kc, col); - if (ks == keysym) { - num++; - result_np = realloc(result, sizeof(xcb_keycode_t) * (num + 1)); - if (result_np == NULL) { - free(result); - return NULL; - } - result = result_np; - result[num - 1] = kc; - result[num] = XCB_NO_SYMBOL; - break; - } - } - } - return result; -} - -bool parse_hotkey(char *string, xcb_keysym_t *keysym, xcb_button_t *button, uint16_t *modfield, uint8_t *event_type) { - char backup[MAXLEN]; - strncpy(backup, string, sizeof(backup)); - backup[strlen(string)] = '\0'; - for (char *name = strtok(string, TOK_SEP); name != NULL; name = strtok(NULL, TOK_SEP)) { - if (name[0] == RELEASE_PREFIX) { - *event_type = XCB_KEY_RELEASE; - name++; - } else if (name[0] == MOTION_PREFIX) { - *event_type = XCB_MOTION_NOTIFY; - name++; - } - if (!parse_modifier(name, modfield) && !parse_key(name, keysym) && !parse_button(name, button)) { - warn("Unrecognized key name: '%s'.\n", name); - } - } - if (*keysym == XCB_NO_SYMBOL && *button == XCB_NONE) { - warn("Invalid hotkey: '%s'.\n", backup); - return false; - } - return true; -} - -bool parse_key(char *name, xcb_keysym_t *keysym) -{ - for (unsigned int i = 0; i < LENGTH(nks_dict); i++) { - keysym_dict_t nks = nks_dict[i]; - if (strcmp(name, nks.name) == 0) { - *keysym = nks.keysym; - return true; - } - } - return false; -} - -bool parse_button(char *name, xcb_button_t *butidx) -{ - /* X handles up to 24 buttons */ - return (sscanf(name, "button%hhu", butidx) == 1); -} - -bool parse_modifier(char *name, uint16_t *modfield) -{ - if (strcmp(name, "shift") == 0) { - *modfield |= XCB_MOD_MASK_SHIFT; - return true; - } else if (strcmp(name, "control") == 0 || strcmp(name, "ctrl") == 0) { - *modfield |= XCB_MOD_MASK_CONTROL; - return true; - } else if (strcmp(name, "alt") == 0) { - *modfield |= (modfield_from_keysym(XK_Alt_L) | modfield_from_keysym(XK_Alt_R)); - return true; - } else if (strcmp(name, "super") == 0) { - *modfield |= (modfield_from_keysym(XK_Super_L) | modfield_from_keysym(XK_Super_R)); - return true; - } else if (strcmp(name, "hyper") == 0) { - *modfield |= (modfield_from_keysym(XK_Hyper_L) | modfield_from_keysym(XK_Hyper_R)); - return true; - } else if (strcmp(name, "meta") == 0) { - *modfield |= (modfield_from_keysym(XK_Meta_L) | modfield_from_keysym(XK_Meta_R)); - return true; - } else if (strcmp(name, "mode_switch") == 0) { - *modfield |= modfield_from_keysym(XK_Mode_switch); - return true; - } else if (strcmp(name, "mod1") == 0) { - *modfield |= XCB_MOD_MASK_1; - return true; - } else if (strcmp(name, "mod2") == 0) { - *modfield |= XCB_MOD_MASK_2; - return true; - } else if (strcmp(name, "mod3") == 0) { - *modfield |= XCB_MOD_MASK_3; - return true; - } else if (strcmp(name, "mod4") == 0) { - *modfield |= XCB_MOD_MASK_4; - return true; - } else if (strcmp(name, "mod5") == 0) { - *modfield |= XCB_MOD_MASK_5; - return true; - } else if (strcmp(name, "lock") == 0) { - *modfield |= XCB_MOD_MASK_LOCK; - return true; - } - return false; -} - -bool parse_fold(char *string, char *folded_string) -{ - if (strchr(string, SEQ_BEGIN) != NULL && strrchr(string, SEQ_END) != NULL) { - strncpy(folded_string, string, strlen(string)); - folded_string[strlen(string)] = '\0'; - return true; - } - return false; -} - -uint8_t key_to_button(uint8_t event_type) -{ - if (event_type == XCB_KEY_PRESS) - return XCB_BUTTON_PRESS; - else if (event_type == XCB_KEY_RELEASE) - return XCB_BUTTON_RELEASE; - return event_type; -} - -void get_lock_fields(void) -{ - num_lock = modfield_from_keysym(XK_Num_Lock); - caps_lock = XCB_MOD_MASK_LOCK; - scroll_lock = modfield_from_keysym(XK_Scroll_Lock); - PRINTF("lock fields %u %u %u\n", num_lock, caps_lock, scroll_lock); -} - -bool extract_sequence(char *string, char *prefix, char *sequence, char *suffix) -{ - char *begin = strchr(string, SEQ_BEGIN); - char *end = strrchr(string, SEQ_END); - if (begin == NULL || end == NULL || ((end - begin - 1) < SEQ_MIN_LEN)) - return false; - strncpy(sequence, begin + 1, end - begin - 1); - strncpy(prefix, string, begin - string); - strncpy(suffix, end + 1, strlen(string) - (1 + end - string)); - sequence[end - begin - 1] = '\0'; - prefix[begin - string] = '\0'; - suffix[strlen(string) - (1 + end - string)] = '\0'; - return true; -} - -void unfold_hotkeys(char *folded_hotkey, char *folded_command) -{ - char hotkey_sequence[MAXLEN]; - char hotkey_prefix[MAXLEN]; - char hotkey_suffix[MAXLEN]; - char command_sequence[MAXLEN]; - char command_prefix[MAXLEN]; - char command_suffix[MAXLEN]; - if (!extract_sequence(folded_hotkey, hotkey_prefix, hotkey_sequence, hotkey_suffix) || !extract_sequence(folded_command, command_prefix, command_sequence, command_suffix)) { - warn("Couldn't extract sequence from '%s' or '%s'.\n", folded_hotkey, folded_command); - return; - } - char unfolded_hotkey[MAXLEN], unfolded_command[MAXLEN]; - xcb_keysym_t keysym = XCB_NO_SYMBOL; - xcb_button_t button = XCB_NONE; - uint16_t modfield = 0; - uint8_t event_type = XCB_KEY_PRESS; - char *hk_ptr, *cmd_ptr; - char hk_a = 1, hk_z = 0, cmd_a = 1, cmd_z = 0; - char *hk_item = strtok_r(hotkey_sequence, SEQ_SEP, &hk_ptr); - char *cmd_item = strtok_r(command_sequence, SEQ_SEP, &cmd_ptr); - - while ((hk_item != NULL || hk_a <= hk_z) && (cmd_item != NULL || cmd_a <= cmd_z)) { -#define PREGEN(elt, ra, rz, prefix, suffix, unf) \ - if (ra > rz && strlen(elt) == 3 && sscanf(elt, "%c-%c", &ra, &rz) == 2 && ra >= rz) \ - ra = 1, rz = 0; \ - if (ra <= rz) \ - snprintf(unf, sizeof(unf), "%s%c%s", prefix, ra, suffix); \ - else \ - snprintf(unf, sizeof(unf), "%s%s%s", prefix, elt, suffix); - PREGEN(hk_item, hk_a, hk_z, hotkey_prefix, hotkey_suffix, unfolded_hotkey); - PREGEN(cmd_item, cmd_a, cmd_z, command_prefix, command_suffix, unfolded_command); -#undef PREGEN - - if (parse_hotkey(unfolded_hotkey, &keysym, &button, &modfield, &event_type)) - generate_hotkeys(keysym, button, modfield, event_type, unfolded_command); - - keysym = XCB_NO_SYMBOL; - button = XCB_NONE; - modfield = 0; - event_type = XCB_KEY_PRESS; - -#define POSTGEN(elt, ra, rz, ptr) \ - if (ra >= rz) \ - elt = strtok_r(NULL, SEQ_SEP, &ptr), ra = 1, rz = 0; \ - else \ - ra++; - POSTGEN(hk_item, hk_a, hk_z, hk_ptr); - POSTGEN(cmd_item, cmd_a, cmd_z, cmd_ptr); -#undef POSTGEN - } -} - -void generate_hotkeys(xcb_keysym_t keysym, xcb_button_t button, uint16_t modfield, uint8_t event_type, char *command) -{ - if (button == XCB_NONE) { - xcb_keycode_t *keycodes = keycodes_from_keysym(keysym); - if (keycodes != NULL) - for (xcb_keycode_t *kc = keycodes; *kc != XCB_NO_SYMBOL; kc++) { - xcb_keysym_t natural_keysym = xcb_key_symbols_get_keysym(symbols, *kc, 0); - for (unsigned char col = 0; col < KEYSYMS_PER_KEYCODE; col++) { - xcb_keysym_t ks = xcb_key_symbols_get_keysym(symbols, *kc, col); - if (ks == keysym) { - uint16_t implicit_modfield = (col & 1 ? XCB_MOD_MASK_SHIFT : 0) | (col & 2 ? modfield_from_keysym(XK_Mode_switch) : 0); - uint16_t explicit_modfield = modfield | implicit_modfield; - hotkey_t *hk = make_hotkey(natural_keysym, button, explicit_modfield, event_type, command); - add_hotkey(hk); - break; - } - } - } - free(keycodes); - } else { - hotkey_t *hk = make_hotkey(keysym, button, modfield, event_type, command); - add_hotkey(hk); - } -} - -hotkey_t *make_hotkey(xcb_keysym_t keysym, xcb_button_t button, uint16_t modfield, uint8_t event_type, char *command) -{ - PRINTF("hotkey %u %u %u %u %s\n", keysym, button, modfield, event_type, command); - hotkey_t *hk = malloc(sizeof(hotkey_t)); - hk->keysym = keysym; - hk->button = button; - hk->modfield = modfield; - if (button != XCB_NONE) - hk->event_type = key_to_button(event_type); - else - hk->event_type = event_type; - strncpy(hk->command, command, sizeof(hk->command)); - hk->next = NULL; - return hk; -} - -hotkey_t *find_hotkey(xcb_keysym_t keysym, xcb_button_t button, uint16_t modfield, uint8_t event_type) -{ - for (hotkey_t *hk = hotkeys; hk != NULL; hk = hk->next) - if (hk->event_type == event_type && hk->keysym == keysym && hk->button == button && hk->modfield == modfield) - return hk; - return NULL; -} - -void add_hotkey(hotkey_t *hk) -{ - hk->next = hotkeys; - hotkeys = hk; -} diff --git a/keys.h b/keys.h @@ -1,37 +0,0 @@ -#ifndef _KEYS_H -#define _KEYS_H - -#include "sxhkd.h" - -#define KEYSYMS_PER_KEYCODE 4 -#define MOD_STATE_FIELD 255 -#define NUM_MOD 8 -#define SEQ_MIN_LEN 3 -#define RELEASE_PREFIX '@' -#define MOTION_PREFIX '!' -#define START_COMMENT '#' -#define TOK_SEP "+ \n" -#define SEQ_SEP "," -#define SEQ_BEGIN '{' -#define SEQ_END '}' - -void grab(void); -void grab_key_button(xcb_keycode_t, xcb_button_t, uint16_t); -void grab_key_button_checked(xcb_keycode_t, xcb_button_t, uint16_t); -void ungrab(void); -int16_t modfield_from_keysym(xcb_keysym_t); -xcb_keycode_t *keycodes_from_keysym(xcb_keysym_t); -bool parse_hotkey(char *, xcb_keysym_t *, xcb_button_t *, uint16_t *, uint8_t *); -bool parse_key(char *, xcb_keysym_t *); -bool parse_button(char *, xcb_button_t *); -bool parse_modifier(char *, uint16_t *); -bool parse_fold(char *, char *); -uint8_t key_to_button(uint8_t); -void get_lock_fields(void); -void unfold_hotkeys(char *, char *); -void generate_hotkeys(xcb_keysym_t, xcb_button_t, uint16_t, uint8_t, char *); -hotkey_t *make_hotkey(xcb_keysym_t, xcb_button_t, uint16_t, uint8_t, char *); -hotkey_t *find_hotkey(xcb_keysym_t, xcb_button_t, uint16_t, uint8_t); -void add_hotkey(hotkey_t *); - -#endif diff --git a/sxhkd.c b/sxhkd.c @@ -13,7 +13,7 @@ #include <signal.h> #include <stdbool.h> #include "helpers.h" -#include "keys.h" +#include "hotkeys.h" #include "sxhkd.h" void hold(int sig)