xterm
Version:
Full xterm terminal, in your browser
1,377 lines (1,356 loc) • 248 kB
JavaScript
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Terminal = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var CircularList_1 = require("./utils/CircularList");
exports.CHAR_DATA_ATTR_INDEX = 0;
exports.CHAR_DATA_CHAR_INDEX = 1;
exports.CHAR_DATA_WIDTH_INDEX = 2;
exports.CHAR_DATA_CODE_INDEX = 3;
exports.MAX_BUFFER_SIZE = 4294967295;
var Buffer = (function () {
function Buffer(_terminal, _hasScrollback) {
this._terminal = _terminal;
this._hasScrollback = _hasScrollback;
this.clear();
}
Object.defineProperty(Buffer.prototype, "lines", {
get: function () {
return this._lines;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Buffer.prototype, "hasScrollback", {
get: function () {
return this._hasScrollback && this.lines.maxLength > this._terminal.rows;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Buffer.prototype, "isCursorInViewport", {
get: function () {
var absoluteY = this.ybase + this.y;
var relativeY = absoluteY - this.ydisp;
return (relativeY >= 0 && relativeY < this._terminal.rows);
},
enumerable: true,
configurable: true
});
Buffer.prototype._getCorrectBufferLength = function (rows) {
if (!this._hasScrollback) {
return rows;
}
var correctBufferLength = rows + this._terminal.options.scrollback;
return correctBufferLength > exports.MAX_BUFFER_SIZE ? exports.MAX_BUFFER_SIZE : correctBufferLength;
};
Buffer.prototype.fillViewportRows = function () {
if (this._lines.length === 0) {
var i = this._terminal.rows;
while (i--) {
this.lines.push(this._terminal.blankLine());
}
}
};
Buffer.prototype.clear = function () {
this.ydisp = 0;
this.ybase = 0;
this.y = 0;
this.x = 0;
this._lines = new CircularList_1.CircularList(this._getCorrectBufferLength(this._terminal.rows));
this.scrollTop = 0;
this.scrollBottom = this._terminal.rows - 1;
this.setupTabStops();
};
Buffer.prototype.resize = function (newCols, newRows) {
var newMaxLength = this._getCorrectBufferLength(newRows);
if (newMaxLength > this._lines.maxLength) {
this._lines.maxLength = newMaxLength;
}
if (this._lines.length > 0) {
if (this._terminal.cols < newCols) {
var ch = [this._terminal.defAttr, ' ', 1, 32];
for (var i = 0; i < this._lines.length; i++) {
if (this._lines.get(i) === undefined) {
this._lines.set(i, this._terminal.blankLine(undefined, undefined, newCols));
}
while (this._lines.get(i).length < newCols) {
this._lines.get(i).push(ch);
}
}
}
var addToY = 0;
if (this._terminal.rows < newRows) {
for (var y = this._terminal.rows; y < newRows; y++) {
if (this._lines.length < newRows + this.ybase) {
if (this.ybase > 0 && this._lines.length <= this.ybase + this.y + addToY + 1) {
this.ybase--;
addToY++;
if (this.ydisp > 0) {
this.ydisp--;
}
}
else {
this._lines.push(this._terminal.blankLine(undefined, undefined, newCols));
}
}
}
}
else {
for (var y = this._terminal.rows; y > newRows; y--) {
if (this._lines.length > newRows + this.ybase) {
if (this._lines.length > this.ybase + this.y + 1) {
this._lines.pop();
}
else {
this.ybase++;
this.ydisp++;
}
}
}
}
if (newMaxLength < this._lines.maxLength) {
var amountToTrim = this._lines.length - newMaxLength;
if (amountToTrim > 0) {
this._lines.trimStart(amountToTrim);
this.ybase = Math.max(this.ybase - amountToTrim, 0);
this.ydisp = Math.max(this.ydisp - amountToTrim, 0);
}
this._lines.maxLength = newMaxLength;
}
if (this.y >= newRows) {
this.y = newRows - 1;
}
if (addToY) {
this.y += addToY;
}
if (this.x >= newCols) {
this.x = newCols - 1;
}
this.scrollTop = 0;
}
this.scrollBottom = newRows - 1;
};
Buffer.prototype.translateBufferLineToString = function (lineIndex, trimRight, startCol, endCol) {
if (startCol === void 0) { startCol = 0; }
if (endCol === void 0) { endCol = null; }
var lineString = '';
var line = this.lines.get(lineIndex);
if (!line) {
return '';
}
var startIndex = startCol;
endCol = endCol || line.length;
var endIndex = endCol;
for (var i = 0; i < line.length; i++) {
var char = line[i];
lineString += char[exports.CHAR_DATA_CHAR_INDEX];
if (char[exports.CHAR_DATA_WIDTH_INDEX] === 0) {
if (startCol >= i) {
startIndex--;
}
if (endCol >= i) {
endIndex--;
}
}
else {
if (char[exports.CHAR_DATA_CHAR_INDEX].length > 1) {
if (startCol > i) {
startIndex += char[exports.CHAR_DATA_CHAR_INDEX].length - 1;
}
if (endCol > i) {
endIndex += char[exports.CHAR_DATA_CHAR_INDEX].length - 1;
}
}
}
}
if (trimRight) {
var rightWhitespaceIndex = lineString.search(/\s+$/);
if (rightWhitespaceIndex !== -1) {
endIndex = Math.min(endIndex, rightWhitespaceIndex);
}
if (endIndex <= startIndex) {
return '';
}
}
return lineString.substring(startIndex, endIndex);
};
Buffer.prototype.setupTabStops = function (i) {
if (i != null) {
if (!this.tabs[i]) {
i = this.prevStop(i);
}
}
else {
this.tabs = {};
i = 0;
}
for (; i < this._terminal.cols; i += this._terminal.options.tabStopWidth) {
this.tabs[i] = true;
}
};
Buffer.prototype.prevStop = function (x) {
if (x == null) {
x = this.x;
}
while (!this.tabs[--x] && x > 0)
;
return x >= this._terminal.cols ? this._terminal.cols - 1 : x < 0 ? 0 : x;
};
Buffer.prototype.nextStop = function (x) {
if (x == null) {
x = this.x;
}
while (!this.tabs[++x] && x < this._terminal.cols)
;
return x >= this._terminal.cols ? this._terminal.cols - 1 : x < 0 ? 0 : x;
};
return Buffer;
}());
exports.Buffer = Buffer;
},{"./utils/CircularList":30}],2:[function(require,module,exports){
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
var Buffer_1 = require("./Buffer");
var EventEmitter_1 = require("./EventEmitter");
var BufferSet = (function (_super) {
__extends(BufferSet, _super);
function BufferSet(_terminal) {
var _this = _super.call(this) || this;
_this._terminal = _terminal;
_this._normal = new Buffer_1.Buffer(_this._terminal, true);
_this._normal.fillViewportRows();
_this._alt = new Buffer_1.Buffer(_this._terminal, false);
_this._activeBuffer = _this._normal;
_this.setupTabStops();
return _this;
}
Object.defineProperty(BufferSet.prototype, "alt", {
get: function () {
return this._alt;
},
enumerable: true,
configurable: true
});
Object.defineProperty(BufferSet.prototype, "active", {
get: function () {
return this._activeBuffer;
},
enumerable: true,
configurable: true
});
Object.defineProperty(BufferSet.prototype, "normal", {
get: function () {
return this._normal;
},
enumerable: true,
configurable: true
});
BufferSet.prototype.activateNormalBuffer = function () {
this._alt.clear();
this._activeBuffer = this._normal;
this.emit('activate', this._normal);
};
BufferSet.prototype.activateAltBuffer = function () {
this._alt.fillViewportRows();
this._activeBuffer = this._alt;
this.emit('activate', this._alt);
};
BufferSet.prototype.resize = function (newCols, newRows) {
this._normal.resize(newCols, newRows);
this._alt.resize(newCols, newRows);
};
BufferSet.prototype.setupTabStops = function (i) {
this._normal.setupTabStops(i);
this._alt.setupTabStops(i);
};
return BufferSet;
}(EventEmitter_1.EventEmitter));
exports.BufferSet = BufferSet;
},{"./Buffer":1,"./EventEmitter":7}],3:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.wcwidth = (function (opts) {
var COMBINING_BMP = [
[0x0300, 0x036F], [0x0483, 0x0486], [0x0488, 0x0489],
[0x0591, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2],
[0x05C4, 0x05C5], [0x05C7, 0x05C7], [0x0600, 0x0603],
[0x0610, 0x0615], [0x064B, 0x065E], [0x0670, 0x0670],
[0x06D6, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED],
[0x070F, 0x070F], [0x0711, 0x0711], [0x0730, 0x074A],
[0x07A6, 0x07B0], [0x07EB, 0x07F3], [0x0901, 0x0902],
[0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D],
[0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981],
[0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD],
[0x09E2, 0x09E3], [0x0A01, 0x0A02], [0x0A3C, 0x0A3C],
[0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D],
[0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC],
[0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD],
[0x0AE2, 0x0AE3], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C],
[0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D],
[0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0],
[0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48],
[0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBC, 0x0CBC],
[0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD],
[0x0CE2, 0x0CE3], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D],
[0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6],
[0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E],
[0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC],
[0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35],
[0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E],
[0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97],
[0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030],
[0x1032, 0x1032], [0x1036, 0x1037], [0x1039, 0x1039],
[0x1058, 0x1059], [0x1160, 0x11FF], [0x135F, 0x135F],
[0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753],
[0x1772, 0x1773], [0x17B4, 0x17B5], [0x17B7, 0x17BD],
[0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x17DD, 0x17DD],
[0x180B, 0x180D], [0x18A9, 0x18A9], [0x1920, 0x1922],
[0x1927, 0x1928], [0x1932, 0x1932], [0x1939, 0x193B],
[0x1A17, 0x1A18], [0x1B00, 0x1B03], [0x1B34, 0x1B34],
[0x1B36, 0x1B3A], [0x1B3C, 0x1B3C], [0x1B42, 0x1B42],
[0x1B6B, 0x1B73], [0x1DC0, 0x1DCA], [0x1DFE, 0x1DFF],
[0x200B, 0x200F], [0x202A, 0x202E], [0x2060, 0x2063],
[0x206A, 0x206F], [0x20D0, 0x20EF], [0x302A, 0x302F],
[0x3099, 0x309A], [0xA806, 0xA806], [0xA80B, 0xA80B],
[0xA825, 0xA826], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F],
[0xFE20, 0xFE23], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB],
];
var COMBINING_HIGH = [
[0x10A01, 0x10A03], [0x10A05, 0x10A06], [0x10A0C, 0x10A0F],
[0x10A38, 0x10A3A], [0x10A3F, 0x10A3F], [0x1D167, 0x1D169],
[0x1D173, 0x1D182], [0x1D185, 0x1D18B], [0x1D1AA, 0x1D1AD],
[0x1D242, 0x1D244], [0xE0001, 0xE0001], [0xE0020, 0xE007F],
[0xE0100, 0xE01EF]
];
function bisearch(ucs, data) {
var min = 0;
var max = data.length - 1;
var mid;
if (ucs < data[0][0] || ucs > data[max][1])
return false;
while (max >= min) {
mid = (min + max) >> 1;
if (ucs > data[mid][1])
min = mid + 1;
else if (ucs < data[mid][0])
max = mid - 1;
else
return true;
}
return false;
}
function wcwidthBMP(ucs) {
if (ucs === 0)
return opts.nul;
if (ucs < 32 || (ucs >= 0x7f && ucs < 0xa0))
return opts.control;
if (bisearch(ucs, COMBINING_BMP))
return 0;
if (isWideBMP(ucs)) {
return 2;
}
return 1;
}
function isWideBMP(ucs) {
return (ucs >= 0x1100 && (ucs <= 0x115f ||
ucs === 0x2329 ||
ucs === 0x232a ||
(ucs >= 0x2e80 && ucs <= 0xa4cf && ucs !== 0x303f) ||
(ucs >= 0xac00 && ucs <= 0xd7a3) ||
(ucs >= 0xf900 && ucs <= 0xfaff) ||
(ucs >= 0xfe10 && ucs <= 0xfe19) ||
(ucs >= 0xfe30 && ucs <= 0xfe6f) ||
(ucs >= 0xff00 && ucs <= 0xff60) ||
(ucs >= 0xffe0 && ucs <= 0xffe6)));
}
function wcwidthHigh(ucs) {
if (bisearch(ucs, COMBINING_HIGH))
return 0;
if ((ucs >= 0x20000 && ucs <= 0x2fffd) || (ucs >= 0x30000 && ucs <= 0x3fffd)) {
return 2;
}
return 1;
}
var control = opts.control | 0;
var table = null;
function init_table() {
var CODEPOINTS = 65536;
var BITWIDTH = 2;
var ITEMSIZE = 32;
var CONTAINERSIZE = CODEPOINTS * BITWIDTH / ITEMSIZE;
var CODEPOINTS_PER_ITEM = ITEMSIZE / BITWIDTH;
table = (typeof Uint32Array === 'undefined')
? new Array(CONTAINERSIZE)
: new Uint32Array(CONTAINERSIZE);
for (var i = 0; i < CONTAINERSIZE; ++i) {
var num = 0;
var pos = CODEPOINTS_PER_ITEM;
while (pos--)
num = (num << 2) | wcwidthBMP(CODEPOINTS_PER_ITEM * i + pos);
table[i] = num;
}
return table;
}
return function (num) {
num = num | 0;
if (num < 32)
return control | 0;
if (num < 127)
return 1;
var t = table || init_table();
if (num < 65536)
return t[num >> 4] >> ((num & 15) << 1) & 3;
return wcwidthHigh(num);
};
})({ nul: 0, control: 0 });
},{}],4:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.CHARSETS = {};
exports.DEFAULT_CHARSET = exports.CHARSETS['B'];
exports.CHARSETS['0'] = {
'`': '\u25c6',
'a': '\u2592',
'b': '\u0009',
'c': '\u000c',
'd': '\u000d',
'e': '\u000a',
'f': '\u00b0',
'g': '\u00b1',
'h': '\u2424',
'i': '\u000b',
'j': '\u2518',
'k': '\u2510',
'l': '\u250c',
'm': '\u2514',
'n': '\u253c',
'o': '\u23ba',
'p': '\u23bb',
'q': '\u2500',
'r': '\u23bc',
's': '\u23bd',
't': '\u251c',
'u': '\u2524',
'v': '\u2534',
'w': '\u252c',
'x': '\u2502',
'y': '\u2264',
'z': '\u2265',
'{': '\u03c0',
'|': '\u2260',
'}': '\u00a3',
'~': '\u00b7'
};
exports.CHARSETS['A'] = {
'#': '£'
};
exports.CHARSETS['B'] = null;
exports.CHARSETS['4'] = {
'#': '£',
'@': '¾',
'[': 'ij',
'\\': '½',
']': '|',
'{': '¨',
'|': 'f',
'}': '¼',
'~': '´'
};
exports.CHARSETS['C'] =
exports.CHARSETS['5'] = {
'[': 'Ä',
'\\': 'Ö',
']': 'Å',
'^': 'Ü',
'`': 'é',
'{': 'ä',
'|': 'ö',
'}': 'å',
'~': 'ü'
};
exports.CHARSETS['R'] = {
'#': '£',
'@': 'à',
'[': '°',
'\\': 'ç',
']': '§',
'{': 'é',
'|': 'ù',
'}': 'è',
'~': '¨'
};
exports.CHARSETS['Q'] = {
'@': 'à',
'[': 'â',
'\\': 'ç',
']': 'ê',
'^': 'î',
'`': 'ô',
'{': 'é',
'|': 'ù',
'}': 'è',
'~': 'û'
};
exports.CHARSETS['K'] = {
'@': '§',
'[': 'Ä',
'\\': 'Ö',
']': 'Ü',
'{': 'ä',
'|': 'ö',
'}': 'ü',
'~': 'ß'
};
exports.CHARSETS['Y'] = {
'#': '£',
'@': '§',
'[': '°',
'\\': 'ç',
']': 'é',
'`': 'ù',
'{': 'à',
'|': 'ò',
'}': 'è',
'~': 'ì'
};
exports.CHARSETS['E'] =
exports.CHARSETS['6'] = {
'@': 'Ä',
'[': 'Æ',
'\\': 'Ø',
']': 'Å',
'^': 'Ü',
'`': 'ä',
'{': 'æ',
'|': 'ø',
'}': 'å',
'~': 'ü'
};
exports.CHARSETS['Z'] = {
'#': '£',
'@': '§',
'[': '¡',
'\\': 'Ñ',
']': '¿',
'{': '°',
'|': 'ñ',
'}': 'ç'
};
exports.CHARSETS['H'] =
exports.CHARSETS['7'] = {
'@': 'É',
'[': 'Ä',
'\\': 'Ö',
']': 'Å',
'^': 'Ü',
'`': 'é',
'{': 'ä',
'|': 'ö',
'}': 'å',
'~': 'ü'
};
exports.CHARSETS['='] = {
'#': 'ù',
'@': 'à',
'[': 'é',
'\\': 'ç',
']': 'ê',
'^': 'î',
'_': 'è',
'`': 'ô',
'{': 'ä',
'|': 'ö',
'}': 'ü',
'~': 'û'
};
},{}],5:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var CompositionHelper = (function () {
function CompositionHelper(textarea, compositionView, terminal) {
this.textarea = textarea;
this.compositionView = compositionView;
this.terminal = terminal;
this.isComposing = false;
this.isSendingComposition = false;
this.compositionPosition = { start: null, end: null };
}
CompositionHelper.prototype.compositionstart = function () {
this.isComposing = true;
this.compositionPosition.start = this.textarea.value.length;
this.compositionView.textContent = '';
this.compositionView.classList.add('active');
};
CompositionHelper.prototype.compositionupdate = function (ev) {
var _this = this;
this.compositionView.textContent = ev.data;
this.updateCompositionElements();
setTimeout(function () {
_this.compositionPosition.end = _this.textarea.value.length;
}, 0);
};
CompositionHelper.prototype.compositionend = function () {
this.finalizeComposition(true);
};
CompositionHelper.prototype.keydown = function (ev) {
if (this.isComposing || this.isSendingComposition) {
if (ev.keyCode === 229) {
return false;
}
else if (ev.keyCode === 16 || ev.keyCode === 17 || ev.keyCode === 18) {
return false;
}
else {
this.finalizeComposition(false);
}
}
if (ev.keyCode === 229) {
this.handleAnyTextareaChanges();
return false;
}
return true;
};
CompositionHelper.prototype.finalizeComposition = function (waitForPropogation) {
var _this = this;
this.compositionView.classList.remove('active');
this.isComposing = false;
this.clearTextareaPosition();
if (!waitForPropogation) {
this.isSendingComposition = false;
var input = this.textarea.value.substring(this.compositionPosition.start, this.compositionPosition.end);
this.terminal.handler(input);
}
else {
var currentCompositionPosition_1 = {
start: this.compositionPosition.start,
end: this.compositionPosition.end,
};
this.isSendingComposition = true;
setTimeout(function () {
if (_this.isSendingComposition) {
_this.isSendingComposition = false;
var input = void 0;
if (_this.isComposing) {
input = _this.textarea.value.substring(currentCompositionPosition_1.start, currentCompositionPosition_1.end);
}
else {
input = _this.textarea.value.substring(currentCompositionPosition_1.start);
}
_this.terminal.handler(input);
}
}, 0);
}
};
CompositionHelper.prototype.handleAnyTextareaChanges = function () {
var _this = this;
var oldValue = this.textarea.value;
setTimeout(function () {
if (!_this.isComposing) {
var newValue = _this.textarea.value;
var diff = newValue.replace(oldValue, '');
if (diff.length > 0) {
_this.terminal.handler(diff);
}
}
}, 0);
};
CompositionHelper.prototype.updateCompositionElements = function (dontRecurse) {
var _this = this;
if (!this.isComposing) {
return;
}
if (this.terminal.buffer.isCursorInViewport) {
var cellHeight = Math.ceil(this.terminal.charMeasure.height * this.terminal.options.lineHeight);
var cursorTop = this.terminal.buffer.y * cellHeight;
var cursorLeft = this.terminal.buffer.x * this.terminal.charMeasure.width;
this.compositionView.style.left = cursorLeft + 'px';
this.compositionView.style.top = cursorTop + 'px';
this.compositionView.style.height = cellHeight + 'px';
this.compositionView.style.lineHeight = cellHeight + 'px';
var compositionViewBounds = this.compositionView.getBoundingClientRect();
this.textarea.style.left = cursorLeft + 'px';
this.textarea.style.top = cursorTop + 'px';
this.textarea.style.width = compositionViewBounds.width + 'px';
this.textarea.style.height = compositionViewBounds.height + 'px';
this.textarea.style.lineHeight = compositionViewBounds.height + 'px';
}
if (!dontRecurse) {
setTimeout(function () { return _this.updateCompositionElements(true); }, 0);
}
};
;
CompositionHelper.prototype.clearTextareaPosition = function () {
this.textarea.style.left = '';
this.textarea.style.top = '';
};
;
return CompositionHelper;
}());
exports.CompositionHelper = CompositionHelper;
},{}],6:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var C0;
(function (C0) {
C0.NUL = '\x00';
C0.SOH = '\x01';
C0.STX = '\x02';
C0.ETX = '\x03';
C0.EOT = '\x04';
C0.ENQ = '\x05';
C0.ACK = '\x06';
C0.BEL = '\x07';
C0.BS = '\x08';
C0.HT = '\x09';
C0.LF = '\x0a';
C0.VT = '\x0b';
C0.FF = '\x0c';
C0.CR = '\x0d';
C0.SO = '\x0e';
C0.SI = '\x0f';
C0.DLE = '\x10';
C0.DC1 = '\x11';
C0.DC2 = '\x12';
C0.DC3 = '\x13';
C0.DC4 = '\x14';
C0.NAK = '\x15';
C0.SYN = '\x16';
C0.ETB = '\x17';
C0.CAN = '\x18';
C0.EM = '\x19';
C0.SUB = '\x1a';
C0.ESC = '\x1b';
C0.FS = '\x1c';
C0.GS = '\x1d';
C0.RS = '\x1e';
C0.US = '\x1f';
C0.SP = '\x20';
C0.DEL = '\x7f';
})(C0 = exports.C0 || (exports.C0 = {}));
;
},{}],7:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var EventEmitter = (function () {
function EventEmitter() {
this._events = this._events || {};
}
EventEmitter.prototype.on = function (type, listener) {
this._events[type] = this._events[type] || [];
this._events[type].push(listener);
};
EventEmitter.prototype.off = function (type, listener) {
if (!this._events[type]) {
return;
}
var obj = this._events[type];
var i = obj.length;
while (i--) {
if (obj[i] === listener || obj[i].listener === listener) {
obj.splice(i, 1);
return;
}
}
};
EventEmitter.prototype.removeAllListeners = function (type) {
if (this._events[type]) {
delete this._events[type];
}
};
EventEmitter.prototype.once = function (type, listener) {
function on() {
var args = Array.prototype.slice.call(arguments);
this.off(type, on);
listener.apply(this, args);
}
on.listener = listener;
this.on(type, on);
};
EventEmitter.prototype.emit = function (type) {
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
if (!this._events[type]) {
return;
}
var obj = this._events[type];
for (var i = 0; i < obj.length; i++) {
obj[i].apply(this, args);
}
};
EventEmitter.prototype.listeners = function (type) {
return this._events[type] || [];
};
EventEmitter.prototype.destroy = function () {
this._events = {};
};
return EventEmitter;
}());
exports.EventEmitter = EventEmitter;
},{}],8:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var EscapeSequences_1 = require("./EscapeSequences");
var Charsets_1 = require("./Charsets");
var Buffer_1 = require("./Buffer");
var Types_1 = require("./renderer/Types");
var CharWidth_1 = require("./CharWidth");
var InputHandler = (function () {
function InputHandler(_terminal) {
this._terminal = _terminal;
}
InputHandler.prototype.addChar = function (char, code) {
if (char >= ' ') {
var ch_width = CharWidth_1.wcwidth(code);
if (this._terminal.charset && this._terminal.charset[char]) {
char = this._terminal.charset[char];
}
var row = this._terminal.buffer.y + this._terminal.buffer.ybase;
if (!ch_width && this._terminal.buffer.x) {
if (this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 1]) {
if (!this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 1][Buffer_1.CHAR_DATA_WIDTH_INDEX]) {
if (this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 2]) {
this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 2][Buffer_1.CHAR_DATA_CHAR_INDEX] += char;
this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 2][3] = char.charCodeAt(0);
}
}
else {
this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 1][Buffer_1.CHAR_DATA_CHAR_INDEX] += char;
this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 1][3] = char.charCodeAt(0);
}
this._terminal.updateRange(this._terminal.buffer.y);
}
return;
}
if (this._terminal.buffer.x + ch_width - 1 >= this._terminal.cols) {
if (this._terminal.wraparoundMode) {
this._terminal.buffer.x = 0;
this._terminal.buffer.y++;
if (this._terminal.buffer.y > this._terminal.buffer.scrollBottom) {
this._terminal.buffer.y--;
this._terminal.scroll(true);
}
else {
this._terminal.buffer.lines.get(this._terminal.buffer.y).isWrapped = true;
}
}
else {
if (ch_width === 2)
return;
}
}
row = this._terminal.buffer.y + this._terminal.buffer.ybase;
if (this._terminal.insertMode) {
for (var moves = 0; moves < ch_width; ++moves) {
var removed = this._terminal.buffer.lines.get(this._terminal.buffer.y + this._terminal.buffer.ybase).pop();
if (removed[Buffer_1.CHAR_DATA_WIDTH_INDEX] === 0
&& this._terminal.buffer.lines.get(row)[this._terminal.cols - 2]
&& this._terminal.buffer.lines.get(row)[this._terminal.cols - 2][Buffer_1.CHAR_DATA_WIDTH_INDEX] === 2) {
this._terminal.buffer.lines.get(row)[this._terminal.cols - 2] = [this._terminal.curAttr, ' ', 1, ' '.charCodeAt(0)];
}
this._terminal.buffer.lines.get(row).splice(this._terminal.buffer.x, 0, [this._terminal.curAttr, ' ', 1, ' '.charCodeAt(0)]);
}
}
this._terminal.buffer.lines.get(row)[this._terminal.buffer.x] = [this._terminal.curAttr, char, ch_width, char.charCodeAt(0)];
this._terminal.buffer.x++;
this._terminal.updateRange(this._terminal.buffer.y);
if (ch_width === 2) {
this._terminal.buffer.lines.get(row)[this._terminal.buffer.x] = [this._terminal.curAttr, '', 0, undefined];
this._terminal.buffer.x++;
}
}
};
InputHandler.prototype.bell = function () {
this._terminal.bell();
};
InputHandler.prototype.lineFeed = function () {
if (this._terminal.convertEol) {
this._terminal.buffer.x = 0;
}
this._terminal.buffer.y++;
if (this._terminal.buffer.y > this._terminal.buffer.scrollBottom) {
this._terminal.buffer.y--;
this._terminal.scroll();
}
if (this._terminal.buffer.x >= this._terminal.cols) {
this._terminal.buffer.x--;
}
this._terminal.emit('linefeed');
};
InputHandler.prototype.carriageReturn = function () {
this._terminal.buffer.x = 0;
};
InputHandler.prototype.backspace = function () {
if (this._terminal.buffer.x > 0) {
this._terminal.buffer.x--;
}
};
InputHandler.prototype.tab = function () {
this._terminal.buffer.x = this._terminal.buffer.nextStop();
};
InputHandler.prototype.shiftOut = function () {
this._terminal.setgLevel(1);
};
InputHandler.prototype.shiftIn = function () {
this._terminal.setgLevel(0);
};
InputHandler.prototype.insertChars = function (params) {
var param = params[0];
if (param < 1)
param = 1;
var row = this._terminal.buffer.y + this._terminal.buffer.ybase;
var j = this._terminal.buffer.x;
var ch = [this._terminal.eraseAttr(), ' ', 1, 32];
while (param-- && j < this._terminal.cols) {
this._terminal.buffer.lines.get(row).splice(j++, 0, ch);
this._terminal.buffer.lines.get(row).pop();
}
};
InputHandler.prototype.cursorUp = function (params) {
var param = params[0];
if (param < 1) {
param = 1;
}
this._terminal.buffer.y -= param;
if (this._terminal.buffer.y < 0) {
this._terminal.buffer.y = 0;
}
};
InputHandler.prototype.cursorDown = function (params) {
var param = params[0];
if (param < 1) {
param = 1;
}
this._terminal.buffer.y += param;
if (this._terminal.buffer.y >= this._terminal.rows) {
this._terminal.buffer.y = this._terminal.rows - 1;
}
if (this._terminal.buffer.x >= this._terminal.cols) {
this._terminal.buffer.x--;
}
};
InputHandler.prototype.cursorForward = function (params) {
var param = params[0];
if (param < 1) {
param = 1;
}
this._terminal.buffer.x += param;
if (this._terminal.buffer.x >= this._terminal.cols) {
this._terminal.buffer.x = this._terminal.cols - 1;
}
};
InputHandler.prototype.cursorBackward = function (params) {
var param = params[0];
if (param < 1) {
param = 1;
}
if (this._terminal.buffer.x >= this._terminal.cols) {
this._terminal.buffer.x--;
}
this._terminal.buffer.x -= param;
if (this._terminal.buffer.x < 0) {
this._terminal.buffer.x = 0;
}
};
InputHandler.prototype.cursorNextLine = function (params) {
var param = params[0];
if (param < 1) {
param = 1;
}
this._terminal.buffer.y += param;
if (this._terminal.buffer.y >= this._terminal.rows) {
this._terminal.buffer.y = this._terminal.rows - 1;
}
this._terminal.buffer.x = 0;
};
InputHandler.prototype.cursorPrecedingLine = function (params) {
var param = params[0];
if (param < 1) {
param = 1;
}
this._terminal.buffer.y -= param;
if (this._terminal.buffer.y < 0) {
this._terminal.buffer.y = 0;
}
this._terminal.buffer.x = 0;
};
InputHandler.prototype.cursorCharAbsolute = function (params) {
var param = params[0];
if (param < 1) {
param = 1;
}
this._terminal.buffer.x = param - 1;
};
InputHandler.prototype.cursorPosition = function (params) {
var col;
var row = params[0] - 1;
if (params.length >= 2) {
col = params[1] - 1;
}
else {
col = 0;
}
if (row < 0) {
row = 0;
}
else if (row >= this._terminal.rows) {
row = this._terminal.rows - 1;
}
if (col < 0) {
col = 0;
}
else if (col >= this._terminal.cols) {
col = this._terminal.cols - 1;
}
this._terminal.buffer.x = col;
this._terminal.buffer.y = row;
};
InputHandler.prototype.cursorForwardTab = function (params) {
var param = params[0] || 1;
while (param--) {
this._terminal.buffer.x = this._terminal.buffer.nextStop();
}
};
InputHandler.prototype.eraseInDisplay = function (params) {
var j;
switch (params[0]) {
case 0:
this._terminal.eraseRight(this._terminal.buffer.x, this._terminal.buffer.y);
j = this._terminal.buffer.y + 1;
for (; j < this._terminal.rows; j++) {
this._terminal.eraseLine(j);
}
break;
case 1:
this._terminal.eraseLeft(this._terminal.buffer.x, this._terminal.buffer.y);
j = this._terminal.buffer.y;
while (j--) {
this._terminal.eraseLine(j);
}
break;
case 2:
j = this._terminal.rows;
while (j--)
this._terminal.eraseLine(j);
break;
case 3:
var scrollBackSize = this._terminal.buffer.lines.length - this._terminal.rows;
if (scrollBackSize > 0) {
this._terminal.buffer.lines.trimStart(scrollBackSize);
this._terminal.buffer.ybase = Math.max(this._terminal.buffer.ybase - scrollBackSize, 0);
this._terminal.buffer.ydisp = Math.max(this._terminal.buffer.ydisp - scrollBackSize, 0);
this._terminal.emit('scroll', 0);
}
break;
}
};
InputHandler.prototype.eraseInLine = function (params) {
switch (params[0]) {
case 0:
this._terminal.eraseRight(this._terminal.buffer.x, this._terminal.buffer.y);
break;
case 1:
this._terminal.eraseLeft(this._terminal.buffer.x, this._terminal.buffer.y);
break;
case 2:
this._terminal.eraseLine(this._terminal.buffer.y);
break;
}
};
InputHandler.prototype.insertLines = function (params) {
var param = params[0];
if (param < 1) {
param = 1;
}
var row = this._terminal.buffer.y + this._terminal.buffer.ybase;
var scrollBottomRowsOffset = this._terminal.rows - 1 - this._terminal.buffer.scrollBottom;
var scrollBottomAbsolute = this._terminal.rows - 1 + this._terminal.buffer.ybase - scrollBottomRowsOffset + 1;
while (param--) {
this._terminal.buffer.lines.splice(scrollBottomAbsolute - 1, 1);
this._terminal.buffer.lines.splice(row, 0, this._terminal.blankLine(true));
}
this._terminal.updateRange(this._terminal.buffer.y);
this._terminal.updateRange(this._terminal.buffer.scrollBottom);
};
InputHandler.prototype.deleteLines = function (params) {
var param = params[0];
if (param < 1) {
param = 1;
}
var row = this._terminal.buffer.y + this._terminal.buffer.ybase;
var j;
j = this._terminal.rows - 1 - this._terminal.buffer.scrollBottom;
j = this._terminal.rows - 1 + this._terminal.buffer.ybase - j;
while (param--) {
this._terminal.buffer.lines.splice(row, 1);
this._terminal.buffer.lines.splice(j, 0, this._terminal.blankLine(true));
}
this._terminal.updateRange(this._terminal.buffer.y);
this._terminal.updateRange(this._terminal.buffer.scrollBottom);
};
InputHandler.prototype.deleteChars = function (params) {
var param = params[0];
if (param < 1) {
param = 1;
}
var row = this._terminal.buffer.y + this._terminal.buffer.ybase;
var ch = [this._terminal.eraseAttr(), ' ', 1, 32];
while (param--) {
this._terminal.buffer.lines.get(row).splice(this._terminal.buffer.x, 1);
this._terminal.buffer.lines.get(row).push(ch);
}
this._terminal.updateRange(this._terminal.buffer.y);
};
InputHandler.prototype.scrollUp = function (params) {
var param = params[0] || 1;
while (param--) {
this._terminal.buffer.lines.splice(this._terminal.buffer.ybase + this._terminal.buffer.scrollTop, 1);
this._terminal.buffer.lines.splice(this._terminal.buffer.ybase + this._terminal.buffer.scrollBottom, 0, this._terminal.blankLine());
}
this._terminal.updateRange(this._terminal.buffer.scrollTop);
this._terminal.updateRange(this._terminal.buffer.scrollBottom);
};
InputHandler.prototype.scrollDown = function (params) {
var param = params[0] || 1;
while (param--) {
this._terminal.buffer.lines.splice(this._terminal.buffer.ybase + this._terminal.buffer.scrollBottom, 1);
this._terminal.buffer.lines.splice(this._terminal.buffer.ybase + this._terminal.buffer.scrollTop, 0, this._terminal.blankLine());
}
this._terminal.updateRange(this._terminal.buffer.scrollTop);
this._terminal.updateRange(this._terminal.buffer.scrollBottom);
};
InputHandler.prototype.eraseChars = function (params) {
var param = params[0];
if (param < 1) {
param = 1;
}
var row = this._terminal.buffer.y + this._terminal.buffer.ybase;
var j = this._terminal.buffer.x;
var ch = [this._terminal.eraseAttr(), ' ', 1, 32];
while (param-- && j < this._terminal.cols) {
this._terminal.buffer.lines.get(row)[j++] = ch;
}
};
InputHandler.prototype.cursorBackwardTab = function (params) {
var param = params[0] || 1;
while (param--) {
this._terminal.buffer.x = this._terminal.buffer.prevStop();
}
};
InputHandler.prototype.charPosAbsolute = function (params) {
var param = params[0];
if (param < 1) {
param = 1;
}
this._terminal.buffer.x = param - 1;
if (this._terminal.buffer.x >= this._terminal.cols) {
this._terminal.buffer.x = this._terminal.cols - 1;
}
};
InputHandler.prototype.HPositionRelative = function (params) {
var param = params[0];
if (param < 1) {
param = 1;
}
this._terminal.buffer.x += param;
if (this._terminal.buffer.x >= this._terminal.cols) {
this._terminal.buffer.x = this._terminal.cols - 1;
}
};
InputHandler.prototype.repeatPrecedingCharacter = function (params) {
var param = params[0] || 1;
var line = this._terminal.buffer.lines.get(this._terminal.buffer.ybase + this._terminal.buffer.y);
var ch = line[this._terminal.buffer.x - 1] || [this._terminal.defAttr, ' ', 1, 32];
while (param--) {
line[this._terminal.buffer.x++] = ch;
}
};
InputHandler.prototype.sendDeviceAttributes = function (params) {
if (params[0] > 0) {
return;
}
if (!this._terminal.prefix) {
if (this._terminal.is('xterm') || this._terminal.is('rxvt-unicode') || this._terminal.is('screen')) {
this._terminal.send(EscapeSequences_1.C0.ESC + '[?1;2c');
}
else if (this._terminal.is('linux')) {
this._terminal.send(EscapeSequences_1.C0.ESC + '[?6c');
}
}
else if (this._terminal.prefix === '>') {
if (this._terminal.is('xterm')) {
this._terminal.send(EscapeSequences_1.C0.ESC + '[>0;276;0c');
}
else if (this._terminal.is('rxvt-unicode')) {
this._terminal.send(EscapeSequences_1.C0.ESC + '[>85;95;0c');
}
else if (this._terminal.is('linux')) {
this._terminal.send(params[0] + 'c');
}
else if (this._terminal.is('screen')) {
this._terminal.send(EscapeSequences_1.C0.ESC + '[>83;40003;0c');
}
}
};
InputHandler.prototype.linePosAbsolute = function (params) {
var param = params[0];
if (param < 1) {
param = 1;
}
this._terminal.buffer.y = param - 1;
if (this._terminal.buffer.y >= this._terminal.rows) {
this._terminal.buffer.y = this._terminal.rows - 1;
}
};
InputHandler.prototype.VPositionRelative = function (params) {
var param = params[0];
if (param < 1) {
param = 1;
}
this._terminal.buffer.y += param;
if (this._terminal.buffer.y >= this._terminal.rows) {
this._terminal.buffer.y = this._terminal.rows - 1;
}
if (this._terminal.buffer.x >= this._terminal.cols) {
this._terminal.buffer.x--;
}
};
InputHandler.prototype.HVPosition = function (params) {
if (params[0] < 1)
params[0] = 1;
if (params[1] < 1)
params[1] = 1;
this._terminal.buffer.y = params[0] - 1;
if (this._terminal.buffer.y >= this._terminal.rows) {
this._terminal.buffer.y = this._terminal.rows - 1;
}
this._terminal.buffer.x = params[1] - 1;
if (this._terminal.buffer.x >= this._terminal.cols) {
this._terminal.buffer.x = this._terminal.cols - 1;
}
};
InputHandler.prototype.tabClear = function (params) {
var param = params[0];
if (param <= 0) {
delete this._terminal.buffer.tabs[this._terminal.buffer.x];
}
else if (param === 3) {
this._terminal.buffer.tabs = {};
}
};
InputHandler.prototype.setMode = function (params) {
if (params.length > 1) {
for (var i = 0; i < params.length; i++) {
this.setMode([params[i]]);
}
return;
}
if (!this._terminal.prefix) {
switch (params[0]) {
case 4:
this._terminal.insertMode = true;
break;
case 20:
break;
}
}
else if (this._terminal.prefix === '?') {
switch (params[0]) {
case 1:
this._terminal.applicationCursor = true;
break;
case 2:
this._terminal.setgCharset(0, Charsets_1.DEFAULT_CHARSET);
this._terminal.setgCharset(1, Charsets_1.DEFAULT_CHARSET);
this._terminal.setgCharset(2, Charsets_1.DEFAULT_CHARSET);
this._terminal.setgCharset(3, Charsets_1.DEFAULT_CHARSET);
break;
case 3:
this._terminal.savedCols = this._terminal.cols;
this._terminal.resize(132, this._terminal.rows);
break;
case 6:
this._terminal.originMode = true;
break;
case 7:
this._terminal.wraparoundMode = true;
break;
case 12:
break;
case 66:
this._terminal.log('Serial port requested application keypad.');
this._terminal.applicationKeypad = true;
this._terminal.viewport.syncScrollArea();
break;
case 9:
case 1000:
case 1002:
case 1003:
this._terminal.x10Mouse = params[0] === 9;
this._terminal.vt200Mouse = params[0] === 1000;
this._terminal.normalMouse = params[0] > 1000;
this._terminal.mouseEvents = true;
this._terminal.element.classList.add('enable-mouse-events');
this._terminal.selectionManager.disable();
this._terminal.log('Binding to mouse events.');
break;
case 1004:
this._terminal.sendFocus = true;
break;
case 1005:
this._terminal.utfMouse = true;
break;
case 1006:
this._terminal.sgrMouse = true;
break;
case 1015:
this._terminal.urxvtMouse = true;
break;
case 25:
this._terminal.cursorHidden = false;
break;
case 1049:
case 47:
case 1047:
this._terminal.buffers.activateAltBuffer();
this._terminal.selectionManager.setBuffer(this._terminal.buffer);
this._terminal.viewport.syncScrollArea();
this._terminal.showCursor();
break;
case 2004:
this._terminal.bracketedPasteMode = true;
break;
}
}
};
InputHandler.prototype.resetMode = function (params) {
if (params.length > 1) {
for (var i = 0; i < params.length; i++) {
this.resetMode([params[i]]);
}
return;
}
if (!this._terminal.prefix) {
switch (params[0]) {
case 4:
this._terminal.insertMode = false;
break;
case 20:
break;
}
}
else if (this._terminal.prefix === '?') {
switch (params[0]) {
case 1:
this._terminal.app