76 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			76 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								var x11 = require('../../lib');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								x11.createClient(function(err, display) {
							 | 
						||
| 
								 | 
							
								    var X = display.client;
							 | 
						||
| 
								 | 
							
								   
							 | 
						||
| 
								 | 
							
								    function quotize(i) { return '\"' + i + '\"'; }
							 | 
						||
| 
								 | 
							
								    function decodeProperty(type, data, cb) {
							 | 
						||
| 
								 | 
							
								        switch(type) {
							 | 
						||
| 
								 | 
							
								            case 'STRING': 
							 | 
						||
| 
								 | 
							
								                var result = [];
							 | 
						||
| 
								 | 
							
								                var s = '';
							 | 
						||
| 
								 | 
							
								                for (var i=0; i < data.length; ++i)
							 | 
						||
| 
								 | 
							
								                {
							 | 
						||
| 
								 | 
							
								                    if (data[i] == 0) {
							 | 
						||
| 
								 | 
							
								                       result.push(s);
							 | 
						||
| 
								 | 
							
								                       s = '';
							 | 
						||
| 
								 | 
							
								                       continue;
							 | 
						||
| 
								 | 
							
								                    }
							 | 
						||
| 
								 | 
							
								                    s += String.fromCharCode(data[i]);
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								                result.push(s);
							 | 
						||
| 
								 | 
							
								                return cb(result.map(quotize).join(', '));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            case 'ATOM':
							 | 
						||
| 
								 | 
							
								                var numAtoms = data.length/4;
							 | 
						||
| 
								 | 
							
								                var res = [];
							 | 
						||
| 
								 | 
							
								                for (var i=0; i < data.length; i+=4) {
							 | 
						||
| 
								 | 
							
								                    var a = data.unpack('L', i)[0];
							 | 
						||
| 
								 | 
							
								                    X.GetAtomName(a, function(err, str) {
							 | 
						||
| 
								 | 
							
								                       res.push(str);
							 | 
						||
| 
								 | 
							
								                       if (res.length === numAtoms)
							 | 
						||
| 
								 | 
							
								                           cb(res.join(', '));
							 | 
						||
| 
								 | 
							
								                    });
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								                return;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            case 'INTEGER':
							 | 
						||
| 
								 | 
							
								                var numAtoms = data.length/4;
							 | 
						||
| 
								 | 
							
								                var res = [];
							 | 
						||
| 
								 | 
							
								                for (var i=0; i < data.length; i+=4) {
							 | 
						||
| 
								 | 
							
								                    res.push(data.unpack('L', i)[0]);
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								                return cb(res.join(', '));
							 | 
						||
| 
								 | 
							
								            
							 | 
						||
| 
								 | 
							
								            case 'WINDOW':
							 | 
						||
| 
								 | 
							
								                var numAtoms = data.length/4;
							 | 
						||
| 
								 | 
							
								                var res = [];
							 | 
						||
| 
								 | 
							
								                for (var i=0; i < data.length; i+=4) {
							 | 
						||
| 
								 | 
							
								                    res.push(data.unpack('L', i)[0]);
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								                return cb('window id# ' + res.map(function(n) {return '0x'+n.toString(16);}).join(', '));
							 | 
						||
| 
								 | 
							
								                
							 | 
						||
| 
								 | 
							
								            default:
							 | 
						||
| 
								 | 
							
								                return cb('WTF ' + type);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var id = parseInt(process.argv[2]);
							 | 
						||
| 
								 | 
							
								    var root = display.screen[0].root;
							 | 
						||
| 
								 | 
							
								    X.ListProperties(id, function(err, props) {
							 | 
						||
| 
								 | 
							
								        props.forEach(function(p) {
							 | 
						||
| 
								 | 
							
								            X.GetProperty(0, id, p, 0, 0, 10000000, function(err, propValue) {
							 | 
						||
| 
								 | 
							
								                X.GetAtomName(propValue.type, function(err, typeName) {
							 | 
						||
| 
								 | 
							
								                    X.GetAtomName(p, function(err, propName) {
							 | 
						||
| 
								 | 
							
								                        decodeProperty(typeName, propValue.data, function(decodedData) {
							 | 
						||
| 
								 | 
							
								                            console.log(propName + '(' + typeName + ') = ' + decodedData);
							 | 
						||
| 
								 | 
							
								                        });
							 | 
						||
| 
								 | 
							
								                    });
							 | 
						||
| 
								 | 
							
								                });
							 | 
						||
| 
								 | 
							
								            });
							 | 
						||
| 
								 | 
							
								        })   
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								    X.on('event', console.log);
							 | 
						||
| 
								 | 
							
								    X.on('error', console.error);
							 | 
						||
| 
								 | 
							
								});
							 |