From 77bd73b4c82f114d6cb0303288ee85a5d6cfa8bb Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Sat, 4 Jul 2015 03:30:26 -0700 Subject: [PATCH] add sendFocus option. see #149. --- README.md | 1 + lib/program.js | 11 +++++++++-- lib/widgets/screen.js | 10 +++++++++- test/program-mouse.js | 32 ++++++++++++++++++++++++++++++++ 4 files changed, 51 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 9e29a9c..cea770e 100644 --- a/README.md +++ b/README.md @@ -332,6 +332,7 @@ The screen on which every other node renders. replaced by `'??'`, `'?'`, `''` respectively. (NOTE: iTerm2 cannot display combining characters properly. Blessed simply removes them from an element's content if iTerm2 is detected). +- __sendFocus__ - send focus events after mouse is enabled. ##### Properties: diff --git a/lib/program.js b/lib/program.js index 62b18b9..65b4af7 100644 --- a/lib/program.js +++ b/lib/program.js @@ -3202,10 +3202,17 @@ Program.prototype.setMouse = function(opt, enable) { opt.vt200Hilite = opt.hiliteTracking; } - if (enable) { + if (enable === true) { + if (this._currentMouse) { + this.setMouse(opt); + Object.keys(opt).forEach(function(key) { + this._currentMouse[key] = opt[key]; + }, this); + return; + } this._currentMouse = opt; this.mouseEnabled = true; - } else { + } else if (enable === false) { delete this._currentMouse; this.mouseEnabled = false; } diff --git a/lib/widgets/screen.js b/lib/widgets/screen.js index 26c19ca..acb25ea 100644 --- a/lib/widgets/screen.js +++ b/lib/widgets/screen.js @@ -352,6 +352,9 @@ Screen.prototype._listenMouse = function(el) { this._listenedMouse = true; this.program.enableMouse(); + if (this.options.sendFocus) { + this.program.setMouse({ sendFocus: true }, true); + } this.on('render', function() { self._needsClickableSort = true; @@ -1648,7 +1651,12 @@ Screen.prototype.spawn = function(file, args, options) { program.alternateBuffer(); // program.csr(0, program.rows - 1); - if (mouse) program.enableMouse(); + if (mouse) { + program.enableMouse(); + if (self.options.sendFocus) { + self.program.setMouse({ sendFocus: true }, true); + } + } screen.alloc(); screen.render(); diff --git a/test/program-mouse.js b/test/program-mouse.js index 785d0aa..a942d48 100755 --- a/test/program-mouse.js +++ b/test/program-mouse.js @@ -18,6 +18,11 @@ program.alternateBuffer(); program.enableMouse(); program.hideCursor(); +program.setMouse({ sendFocus: true }, true); +//program._currentMouse.sendFocus = true; +//program.enableMouse(program._currentMouse); +//program.write('\x1b[?1004h'); + program.on('mouse', function(data) { program.cup(data.y, data.x); program.write(' ', 'blue bg'); @@ -25,6 +30,33 @@ program.on('mouse', function(data) { program.write(util.inspect(data)); }); +program.on('resize', function(data) { + setTimeout(function() { + program.clear(); + program.cup(0, 0); + program.write(util.inspect({ cols: program.cols, rows: program.rows })); + }, 200); +}); + +process.on('SIGWINCH', function(data) { + setTimeout(function() { + program.cup(1, 0); + program.write(util.inspect({ winch: true, cols: program.cols, rows: program.rows })); + }, 200); +}); + +program.on('focus', function(data) { + program.clear(); + program.cup(0, 0); + program.write('FOCUSIN'); +}); + +program.on('blur', function(data) { + program.clear(); + program.cup(0, 0); + program.write('FOCUSOUT'); +}); + program.key(['q', 'escape', 'C-c'], function() { program.showCursor(); program.disableMouse();