UNPKG

rkeys

Version:

A platform for creating tablet/HTML5 virtual-keyboard apps to send keystrokes to remote X11

73 lines (72 loc) 2 kB
// Generated by LiveScript 1.3.0 (function(){ var _, X11, H, PREFIX, ks2kc, me; _ = require('lodash'); X11 = require('x11'); H = require('./helper'); PREFIX = 'XK_'; module.exports = me = { init: getKeysymToKeycodeMapping, isKeysym: function(it){ return _.startsWith(it, PREFIX); }, getKeycodes: function(key){ var keysym, kc; keysym = getKeysym(key); if (!(kc = ks2kc[keysym])) { return log("Invalid keysym " + keysym); } if (!kc.isShift) { return [kc.keycode]; } return [ks2kc[getKeysym('XK_Shift_L')].keycode, kc.keycode]; } }; function getKeysym(key){ if (me.isKeysym(key)) { return key; } else { return PREFIX + "" + key; } } function getKeysymToKeycodeMapping(cb){ var ks2names, name, ks, key$, min, max; ks2names = {}; for (name in ks = X11.keySyms) { (ks2names[key$ = ks[name]] || (ks2names[key$] = [])).push(name); } min = H.display.min_keycode; max = H.display.max_keycode; return H.x.GetKeyboardMapping(min, max - min, function(err, list){ var i$, len$, i, sublist, j$, ref$, len1$, j, ref1$, ksym, knames, k$, len2$, name; if (err) { return cb(err); } ks2kc = {}; for (i$ = 0, len$ = list.length; i$ < len$; ++i$) { i = i$; sublist = list[i$]; for (j$ = 0, len1$ = (ref$ = [0, 1]).length; j$ < len1$; ++j$) { j = ref$[j$]; if (!(0 <= (ref1$ = ksym = sublist[j]) && ref1$ < 65536)) { continue; } if (!(knames = ks2names[ksym])) { continue; } for (k$ = 0, len2$ = knames.length; k$ < len2$; ++k$) { name = knames[k$]; if (ks2kc[name]) { continue; } ks2kc[name] = { keycode: i + min, isShift: j === 1 }; } } } return cb(); }); } }).call(this);