+ if(key_buffering)
+ grab_typing_keys();
+ }
+}
+
+void
+grab_typing_keys(void) {
+ updatenumlockmask();
+ {
+ unsigned int i, j;
+ unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask };
+ KeySym typing_keys[] = {
+ XK_space, XK_Return, XK_period, XK_slash, XK_minus, XK_apostrophe,
+ XK_A, XK_B, XK_C, XK_D, XK_E, XK_F, XK_G, XK_H, XK_I, XK_J, XK_K,
+ XK_L, XK_M, XK_N, XK_O, XK_P, XK_Q, XK_R, XK_S, XK_T, XK_U, XK_V,
+ XK_W, XK_X, XK_Y, XK_Z, XK_0, XK_1, XK_2, XK_3, XK_4, XK_5, XK_6,
+ XK_7, XK_8, XK_9,
+ };
+
+ KeyCode code;
+
+ for(i = 0; i < LENGTH(typing_keys); i++)
+ if((code = XKeysymToKeycode(dpy, typing_keys[i])))
+ for(j = 0; j < LENGTH(modifiers); j++)
+ XGrabKey(dpy, code, modifiers[j], root,
+ True, GrabModeAsync, GrabModeAsync);