rkeys
Version:
A platform for creating tablet/HTML5 virtual-keyboard apps to send keystrokes to remote X11
73 lines (72 loc) • 2 kB
JavaScript
// 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);