let activeEnc = 0; const stdin = process.openStdin(); process.stdin.setRawMode(true); // close handler - reset terminal on exit stdin.addListener('data', function(data) { if (data[0] === 0x04) { process.stdin.setRawMode(false); process.stdout.write('\x1bc'); process.exit(); } if (data[0] === 0x01) { switchActive(); printMenu(); } console.log('\x1b[100;H\x1b[2A\x1b[2KReport:', data, [data.toString('binary')]); // filter mouse reports if (data[0] === 0x1b && data[1] === '['.charCodeAt(0)) { applyReportData(data); } }); const BUTTONS = ['left', 'middle', 'right']; // encodings: ENCODING_NAME => [sequence, parse_report] const ENC = { 'X10' : [ '\x1b[?9h', // format: CSI M