mirror of
https://github.com/danbulant/node-x11
synced 2026-06-11 18:50:45 +00:00
GetKeyboardMapping fix + test
This commit is contained in:
parent
42e3e4c9a6
commit
c1ee1fea65
4 changed files with 61 additions and 7 deletions
|
|
@ -410,5 +410,21 @@ module.exports = {
|
|||
}
|
||||
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;
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,7 @@
|
|||
var core = require('./xcore');
|
||||
var em = require('./eventmask').eventMask;
|
||||
var keysyms = require('./keysyms');
|
||||
|
||||
module.exports.createClient = core.createClient;
|
||||
module.exports.eventMask = em;
|
||||
module.exports.eventMask = em;
|
||||
module.exports.keySyms = keysyms;
|
||||
|
|
@ -44,14 +44,14 @@ function XClient(stream, displayNum, screenNum)
|
|||
|
||||
pack_stream.on('data', function( data ) {
|
||||
//console.error(hexy(data, {prefix: 'from packer '}));
|
||||
for (var i=0; i < data.length; ++i)
|
||||
console.log('<<< ' + data[i]);
|
||||
//for (var i=0; i < data.length; ++i)
|
||||
// console.log('<<< ' + data[i]);
|
||||
stream.write(data);
|
||||
});
|
||||
stream.on('data', function( data ) {
|
||||
//console.error(hexy(data, {prefix: 'to unpacker '}));
|
||||
for (var i=0; i < data.length; ++i)
|
||||
console.log('>>> ' + data[i]);
|
||||
//for (var i=0; i < data.length; ++i)
|
||||
// console.log('>>> ' + data[i]);
|
||||
pack_stream.write(data);
|
||||
});
|
||||
|
||||
|
|
@ -171,7 +171,7 @@ XClient.prototype.unpackEvent = function(type, seq, extra, code, raw)
|
|||
event.type = type;
|
||||
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
|
||||
//event.raw = values;
|
||||
// TODO: use unpackTo???
|
||||
|
|
@ -254,6 +254,7 @@ XClient.prototype.expectReplyHeader = function()
|
|||
var code = res[1];
|
||||
var ev = client.unpackEvent(type, seq_num, extra, code, buf);
|
||||
client.emit('event', ev);
|
||||
console.log(ev);
|
||||
var ee = client.event_consumers[ev.wid];
|
||||
if (ee) {
|
||||
ee.emit('event', ev);
|
||||
|
|
|
|||
34
test/getkeyboardmapping.js
Normal file
34
test/getkeyboardmapping.js
Normal 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]);
|
||||
});
|
||||
});
|
||||
});
|
||||
Loading…
Reference in a new issue