GetKeyboardMapping fix + test

This commit is contained in:
sidorares 2011-08-30 15:16:07 +10:00
parent 42e3e4c9a6
commit c1ee1fea65
4 changed files with 61 additions and 7 deletions

View file

@ -410,5 +410,21 @@ module.exports = {
} }
return res; return res;
} }
] ],
GetKeyboardMapping: [
function(startCode, num) {
return [ 'CxSCCxx', [101, 2, startCode, num] ]
},
function(buff, listLength) {
var res = [];
var format = '';
for (var i=0; i < listLength; ++i)
format += 'L';
for (var offset=0; offset < buff.length - 4*listLength; offset += 4*listLength)
res.push(buff.unpack(format, offset));
console.log(res);
return res;
}
]
} }

View file

@ -1,4 +1,7 @@
var core = require('./xcore'); var core = require('./xcore');
var em = require('./eventmask').eventMask; var em = require('./eventmask').eventMask;
var keysyms = require('./keysyms');
module.exports.createClient = core.createClient; module.exports.createClient = core.createClient;
module.exports.eventMask = em; module.exports.eventMask = em;
module.exports.keySyms = keysyms;

View file

@ -44,14 +44,14 @@ function XClient(stream, displayNum, screenNum)
pack_stream.on('data', function( data ) { pack_stream.on('data', function( data ) {
//console.error(hexy(data, {prefix: 'from packer '})); //console.error(hexy(data, {prefix: 'from packer '}));
for (var i=0; i < data.length; ++i) //for (var i=0; i < data.length; ++i)
console.log('<<< ' + data[i]); // console.log('<<< ' + data[i]);
stream.write(data); stream.write(data);
}); });
stream.on('data', function( data ) { stream.on('data', function( data ) {
//console.error(hexy(data, {prefix: 'to unpacker '})); //console.error(hexy(data, {prefix: 'to unpacker '}));
for (var i=0; i < data.length; ++i) //for (var i=0; i < data.length; ++i)
console.log('>>> ' + data[i]); // console.log('>>> ' + data[i]);
pack_stream.write(data); pack_stream.write(data);
}); });
@ -171,7 +171,7 @@ XClient.prototype.unpackEvent = function(type, seq, extra, code, raw)
event.type = type; event.type = type;
event.seq = seq; event.seq = seq;
if (type == 4 || type == 5 || type == 6) { // motion event if (type == 2 || type == 4 || type == 5 || type == 6) { // motion event
var values = raw.unpack('LLLSSSSSC'); //TODO: should be LLLLsssssSC var values = raw.unpack('LLLSSSSSC'); //TODO: should be LLLLsssssSC
//event.raw = values; //event.raw = values;
// TODO: use unpackTo??? // TODO: use unpackTo???
@ -254,6 +254,7 @@ XClient.prototype.expectReplyHeader = function()
var code = res[1]; var code = res[1];
var ev = client.unpackEvent(type, seq_num, extra, code, buf); var ev = client.unpackEvent(type, seq_num, extra, code, buf);
client.emit('event', ev); client.emit('event', ev);
console.log(ev);
var ee = client.event_consumers[ev.wid]; var ee = client.event_consumers[ev.wid];
if (ee) { if (ee) {
ee.emit('event', ev); ee.emit('event', ev);

View file

@ -0,0 +1,34 @@
var x11 = require('../lib/x11');
var xclient = x11.createClient();
var ks = x11.keySyms;
var ks2Name = {};
for (var key in ks)
ks2Name[ ks[key] ] = key;
var kk2Name = {};
xclient.on('connect', function(display) {
var X = this;
var min = display.min_keycode;
var max = display.max_keycode;
X.GetKeyboardMapping(min, max-min, function(list) {
for (i in list)
{
var sublist = list[i];
kk2Name[i] = [];
for (j in sublist)
kk2Name[i].push(ks2Name[sublist[j]]);
}
var root = display.screen[0].root;
var wid = X.AllocID();
var white = display.screen[0].white_pixel;
var black = display.screen[0].black_pixel;
X.CreateWindow(wid, root, 10, 10, 400, 300, 1, 1, 0, { backgroundPixel: white, eventMask: x11.eventMask.KeyPress});
X.MapWindow(wid);
X.on('event', function(ev) {
console.log(kk2Name[ev.keycode]);
});
});
});