mirror of
https://github.com/embarklabs/neo-blessed.git
synced 2025-01-09 10:42:02 +00:00
minor bug fixes. handle tmux escaping.
This commit is contained in:
parent
0e2b626556
commit
3dcc0b3d1b
@ -100,14 +100,20 @@ function GpmClient(options) {
|
||||
var pid = process.pid;
|
||||
|
||||
// check tty for /dev/tty[n]
|
||||
var tty = /tty[0-9]+$/.exec(fs.readlinkSync('/proc/' + pid + '/fd/0'));
|
||||
var path;
|
||||
try {
|
||||
path = fs.readlinkSync('/proc/' + pid + '/fd/0');
|
||||
} catch (e) {
|
||||
;
|
||||
}
|
||||
var tty = /tty[0-9]+$/.exec(path);
|
||||
if (tty === null) {
|
||||
// TODO: should also check for /dev/input/..
|
||||
}
|
||||
|
||||
var vc;
|
||||
if (tty) {
|
||||
var tty = tty[0];
|
||||
tty = tty[0];
|
||||
vc = +/[0-9]+$/.exec(tty)[0];
|
||||
}
|
||||
|
||||
@ -176,8 +182,8 @@ function GpmClient(options) {
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
gpm.on('error', function(err) {
|
||||
// console.log('GPM ERROR', err);
|
||||
self.stop();
|
||||
});
|
||||
});
|
||||
|
@ -469,11 +469,11 @@ Program.prototype._bindMouse = function(s, buf) {
|
||||
key.x = x - 32;
|
||||
key.y = y - 32;
|
||||
|
||||
if (key.x === -32) key.x = 255;
|
||||
if (key.y === -32) key.y = 255;
|
||||
|
||||
if (this.zero) key.x--, key.y--;
|
||||
|
||||
if (x === 0) key.x = 255;
|
||||
if (y === 0) key.y = 255;
|
||||
|
||||
mod = b >> 2;
|
||||
key.shift = !!(mod & 1);
|
||||
key.meta = !!((mod >> 1) & 1);
|
||||
@ -570,6 +570,8 @@ Program.prototype._bindMouse = function(s, buf) {
|
||||
: button === 1 ? 'middle'
|
||||
: button === 2 ? 'right'
|
||||
: 'unknown';
|
||||
// NOTE: 0/32 = mousemove, 32/64 = mousemove with left down
|
||||
// if ((b >> 1) === 32)
|
||||
this._lastButton = key.button;
|
||||
}
|
||||
|
||||
@ -1412,7 +1414,7 @@ Program.prototype.response = function(name, text, callback) {
|
||||
return callback(new Error('Timeout.'));
|
||||
}, 2000);
|
||||
|
||||
return this._write(text);
|
||||
return this._twrite(text);
|
||||
};
|
||||
|
||||
Program.prototype._buffer = function(text) {
|
||||
@ -1446,6 +1448,15 @@ Program.prototype._write = function(text) {
|
||||
return this.output.write(text);
|
||||
};
|
||||
|
||||
// Example: `DCS tmux; ESC Pt ST`
|
||||
// Real: `DCS tmux; ESC Pt ESC \`
|
||||
Program.prototype._twrite = function(data) {
|
||||
if (process.env.TMUX) data = '\x1bPtmux;\x1b' + data + '\x1b\\';
|
||||
// Should work but tmux doesn't implement ST correctly:
|
||||
// if (process.env.TMUX) data = '\x1bPtmux;\x1b' + data + '\x07';
|
||||
return this._write(data);
|
||||
};
|
||||
|
||||
Program.prototype.echo =
|
||||
Program.prototype.write = function(text, attr) {
|
||||
return attr
|
||||
@ -1870,10 +1881,10 @@ Program.prototype.setTitle = function(title) {
|
||||
// if (process.env.TMUX) {
|
||||
// return this._write('\x1b]2;' + title + '\x1b\\');
|
||||
// }
|
||||
return this._write('\x1bk' + title + '\x1b\\');
|
||||
return this._twrite('\x1bk' + title + '\x1b\\');
|
||||
}
|
||||
|
||||
return this._write('\x1b]0;' + title + '\x07');
|
||||
return this._twrite('\x1b]0;' + title + '\x07');
|
||||
};
|
||||
|
||||
// OSC Ps ; Pt ST
|
||||
@ -1883,8 +1894,8 @@ Program.prototype.resetColors = function(param) {
|
||||
if (this.has('Cr')) {
|
||||
return this.put.Cr(param);
|
||||
}
|
||||
return this._write('\x1b]112\x07');
|
||||
//return this._write('\x1b]112;' + param + '\x07');
|
||||
return this._twrite('\x1b]112\x07');
|
||||
//return this._twrite('\x1b]112;' + param + '\x07');
|
||||
};
|
||||
|
||||
// OSC Ps ; Pt ST
|
||||
@ -1894,7 +1905,7 @@ Program.prototype.dynamicColors = function(param) {
|
||||
if (this.has('Cs')) {
|
||||
return this.put.Cs(param);
|
||||
}
|
||||
return this._write('\x1b]12;' + param + '\x07');
|
||||
return this._twrite('\x1b]12;' + param + '\x07');
|
||||
};
|
||||
|
||||
// OSC Ps ; Pt ST
|
||||
@ -1904,7 +1915,7 @@ Program.prototype.selData = function(a, b) {
|
||||
if (this.has('Ms')) {
|
||||
return this.put.Ms(a, b);
|
||||
}
|
||||
return this._write('\x1b]52;' + a + ';' + b + '\x07');
|
||||
return this._twrite('\x1b]52;' + a + ';' + b + '\x07');
|
||||
};
|
||||
|
||||
/**
|
||||
|
18
lib/tput.js
18
lib/tput.js
@ -732,7 +732,7 @@ Tput.prototype._compile = function(info, key, str) {
|
||||
try {
|
||||
str = fs.readFileSync(str, 'utf8');
|
||||
if (this.debug) {
|
||||
v = ('return "' + str + '";')
|
||||
v = ('return ' + JSON.stringify(str) + ';')
|
||||
.replace(/\x1b/g, '\\x1b')
|
||||
.replace(/\r/g, '\\r')
|
||||
.replace(/\n/g, '\\n');
|
||||
@ -2058,7 +2058,8 @@ Tput.prototype.detectBrokenACS = function(info) {
|
||||
}
|
||||
|
||||
// screen termcap is bugged?
|
||||
if (info.name.indexOf('screen') == 0
|
||||
if (this.termcap
|
||||
&& info.name.indexOf('screen') == 0
|
||||
&& process.env.TERMCAP
|
||||
&& ~process.env.TERMCAP.indexOf('screen')
|
||||
&& ~process.env.TERMCAP.indexOf('hhII00')) {
|
||||
@ -2180,7 +2181,7 @@ function sprintf(src) {
|
||||
var flags = (flag || '').split('')
|
||||
, param = params[i] != null ? params[i] : ''
|
||||
, initial = param
|
||||
, width = +width
|
||||
// , width = +width
|
||||
, opt = {}
|
||||
, pre = '';
|
||||
|
||||
@ -2231,6 +2232,17 @@ function sprintf(src) {
|
||||
}
|
||||
});
|
||||
|
||||
width = +width.split('.')[0];
|
||||
|
||||
// Should this be for opt.left too?
|
||||
// Example: %2.2X - turns 0 into 00
|
||||
if (width && !opt.left) {
|
||||
param = param + '';
|
||||
while (param.length < width) {
|
||||
param = '0' + param;
|
||||
}
|
||||
}
|
||||
|
||||
if (opt.signs) {
|
||||
if (+initial >= 0) {
|
||||
pre += '+';
|
||||
|
@ -4649,6 +4649,7 @@ List.prototype.select = function(index) {
|
||||
|
||||
this.selected = index;
|
||||
this.value = this.ritems[this.selected];
|
||||
if (!this.parent) return;
|
||||
this.scrollTo(this.selected);
|
||||
};
|
||||
|
||||
@ -4951,6 +4952,9 @@ Form.prototype.reset = function() {
|
||||
case 'terminal':
|
||||
el.write('');
|
||||
return;
|
||||
case 'image':
|
||||
//el.clearImage();
|
||||
return;
|
||||
}
|
||||
el.children.forEach(fn);
|
||||
});
|
||||
@ -6732,25 +6736,20 @@ Terminal.prototype.bootstrap = function() {
|
||||
, s;
|
||||
|
||||
if (self.term.urxvtMouse) {
|
||||
s = '\x1b['
|
||||
+ String.fromCharCode(b)
|
||||
+ ';'
|
||||
+ String.fromCharCode(x)
|
||||
+ ';'
|
||||
+ String.fromCharCode(y);
|
||||
+ 'M';
|
||||
if (self.screen.program.sgrMouse) {
|
||||
b += 32;
|
||||
}
|
||||
s = '\x1b[' + b + ';' + (x + 32) + ';' + (y + 32) + 'M';
|
||||
} else if (self.term.sgrMouse) {
|
||||
if (!self.screen.program.sgrMouse) {
|
||||
b -= 32;
|
||||
}
|
||||
s = '\x1b[<'
|
||||
+ String.fromCharCode(b)
|
||||
+ ';'
|
||||
+ String.fromCharCode(x)
|
||||
+ ';'
|
||||
+ String.fromCharCode(y)
|
||||
s = '\x1b[<' + b + ';' + x + ';' + y
|
||||
+ (data.action === 'mousedown' ? 'M' : 'm');
|
||||
} else {
|
||||
if (self.screen.program.sgrMouse) {
|
||||
b += 32;
|
||||
}
|
||||
s = '\x1b[M'
|
||||
+ String.fromCharCode(b)
|
||||
+ String.fromCharCode(x + 32)
|
||||
@ -6807,6 +6806,10 @@ Terminal.prototype.bootstrap = function() {
|
||||
self.screen.render();
|
||||
});
|
||||
|
||||
this.pty.on('exit', function(code) {
|
||||
self.emit('exit', code || null);
|
||||
});
|
||||
|
||||
this.screen.on('keypress', function() {
|
||||
self.screen.render();
|
||||
});
|
||||
|
@ -42,3 +42,7 @@ program.on('keypress', function(ch, data) {
|
||||
// program.getCursor(function(err, data) {
|
||||
// program.write(util.inspect(data));
|
||||
// });
|
||||
|
||||
// program.manipulateWindow(18, function(err, data) {
|
||||
// program.write(util.inspect(data));
|
||||
// });
|
||||
|
Loading…
x
Reference in New Issue
Block a user