Merge branch 'master' into contextmenu_fix
This commit is contained in:
@@ -5,7 +5,6 @@
|
|||||||
* This file is the entry point for browserify.
|
* This file is the entry point for browserify.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const cp = require('child_process');
|
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const webpack = require('webpack');
|
const webpack = require('webpack');
|
||||||
const startServer = require('./server.js');
|
const startServer = require('./server.js');
|
||||||
|
|||||||
+2
-2
@@ -19,8 +19,8 @@ describe('Buffer', () => {
|
|||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
terminal = new MockTerminal();
|
terminal = new MockTerminal();
|
||||||
terminal.cols = INIT_COLS;
|
(terminal as any).cols = INIT_COLS;
|
||||||
terminal.rows = INIT_ROWS;
|
(terminal as any).rows = INIT_ROWS;
|
||||||
terminal.options.scrollback = 1000;
|
terminal.options.scrollback = 1000;
|
||||||
buffer = new Buffer(terminal, true);
|
buffer = new Buffer(terminal, true);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -15,8 +15,8 @@ describe('BufferSet', () => {
|
|||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
terminal = new MockTerminal();
|
terminal = new MockTerminal();
|
||||||
terminal.cols = 80;
|
(terminal as any).cols = 80;
|
||||||
terminal.rows = 24;
|
(terminal as any).rows = 24;
|
||||||
terminal.options.scrollback = 1000;
|
terminal.options.scrollback = 1000;
|
||||||
bufferSet = new BufferSet(terminal);
|
bufferSet = new BufferSet(terminal);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -41,8 +41,8 @@ describe('Linkifier', () => {
|
|||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
terminal = new MockTerminal();
|
terminal = new MockTerminal();
|
||||||
terminal.cols = 100;
|
(terminal as any).cols = 100;
|
||||||
terminal.rows = 10;
|
(terminal as any).rows = 10;
|
||||||
terminal.buffer = new MockBuffer();
|
terminal.buffer = new MockBuffer();
|
||||||
(<MockBuffer>terminal.buffer).setLines(new CircularList<IBufferLine>(20));
|
(<MockBuffer>terminal.buffer).setLines(new CircularList<IBufferLine>(20));
|
||||||
terminal.buffer.ydisp = 0;
|
terminal.buffer.ydisp = 0;
|
||||||
@@ -65,7 +65,7 @@ describe('Linkifier', () => {
|
|||||||
function assertLinkifiesRow(rowText: string, linkMatcherRegex: RegExp, links: {x: number, length: number}[], done: MochaDone): void {
|
function assertLinkifiesRow(rowText: string, linkMatcherRegex: RegExp, links: {x: number, length: number}[], done: MochaDone): void {
|
||||||
addRow(rowText);
|
addRow(rowText);
|
||||||
linkifier.registerLinkMatcher(linkMatcherRegex, () => {});
|
linkifier.registerLinkMatcher(linkMatcherRegex, () => {});
|
||||||
terminal.rows = terminal.buffer.lines.length - 1;
|
(terminal as any).rows = terminal.buffer.lines.length - 1;
|
||||||
linkifier.linkifyRows();
|
linkifier.linkifyRows();
|
||||||
// Allow linkify to happen
|
// Allow linkify to happen
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
@@ -142,19 +142,19 @@ describe('Linkifier', () => {
|
|||||||
});
|
});
|
||||||
describe('multi-line links', () => {
|
describe('multi-line links', () => {
|
||||||
it('should match links that start on line 1/2 of a wrapped line and end on the last character of line 1/2', done => {
|
it('should match links that start on line 1/2 of a wrapped line and end on the last character of line 1/2', done => {
|
||||||
terminal.cols = 4;
|
(terminal as any).cols = 4;
|
||||||
assertLinkifiesMultiLineLink('12345', /1234/, [{x1: 0, x2: 4, y1: 0, y2: 0}], done);
|
assertLinkifiesMultiLineLink('12345', /1234/, [{x1: 0, x2: 4, y1: 0, y2: 0}], done);
|
||||||
});
|
});
|
||||||
it('should match links that start on line 1/2 of a wrapped line and wrap to line 2/2', done => {
|
it('should match links that start on line 1/2 of a wrapped line and wrap to line 2/2', done => {
|
||||||
terminal.cols = 4;
|
(terminal as any).cols = 4;
|
||||||
assertLinkifiesMultiLineLink('12345', /12345/, [{x1: 0, x2: 1, y1: 0, y2: 1}], done);
|
assertLinkifiesMultiLineLink('12345', /12345/, [{x1: 0, x2: 1, y1: 0, y2: 1}], done);
|
||||||
});
|
});
|
||||||
it('should match links that start and end on line 2/2 of a wrapped line', done => {
|
it('should match links that start and end on line 2/2 of a wrapped line', done => {
|
||||||
terminal.cols = 4;
|
(terminal as any).cols = 4;
|
||||||
assertLinkifiesMultiLineLink('12345678', /5678/, [{x1: 0, x2: 4, y1: 1, y2: 1}], done);
|
assertLinkifiesMultiLineLink('12345678', /5678/, [{x1: 0, x2: 4, y1: 1, y2: 1}], done);
|
||||||
});
|
});
|
||||||
it('should match links that start on line 2/3 of a wrapped line and wrap to line 3/3', done => {
|
it('should match links that start on line 2/3 of a wrapped line and wrap to line 3/3', done => {
|
||||||
terminal.cols = 4;
|
(terminal as any).cols = 4;
|
||||||
assertLinkifiesMultiLineLink('123456789', /56789/, [{x1: 0, x2: 1, y1: 1, y2: 2}], done);
|
assertLinkifiesMultiLineLink('123456789', /56789/, [{x1: 0, x2: 1, y1: 1, y2: 2}], done);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -45,8 +45,8 @@ describe('SelectionManager', () => {
|
|||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
terminal = new TestMockTerminal();
|
terminal = new TestMockTerminal();
|
||||||
terminal.cols = 80;
|
(terminal as any).cols = 80;
|
||||||
terminal.rows = 2;
|
(terminal as any).rows = 2;
|
||||||
terminal.options.scrollback = 100;
|
terminal.options.scrollback = 100;
|
||||||
terminal.buffers = new BufferSet(terminal);
|
terminal.buffers = new BufferSet(terminal);
|
||||||
terminal.buffer = terminal.buffers.active;
|
terminal.buffer = terminal.buffers.active;
|
||||||
|
|||||||
@@ -23,8 +23,8 @@ describe('SelectionManager', () => {
|
|||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
terminal = new MockTerminal();
|
terminal = new MockTerminal();
|
||||||
terminal.cols = 80;
|
(terminal as any).cols = 80;
|
||||||
terminal.rows = 2;
|
(terminal as any).rows = 2;
|
||||||
terminal.options.scrollback = 10;
|
terminal.options.scrollback = 10;
|
||||||
terminal.buffers = new BufferSet(terminal);
|
terminal.buffers = new BufferSet(terminal);
|
||||||
terminal.buffer = terminal.buffers.active;
|
terminal.buffer = terminal.buffers.active;
|
||||||
|
|||||||
+1
-1
@@ -237,7 +237,7 @@ export interface IBufferAccessor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export interface IElementAccessor {
|
export interface IElementAccessor {
|
||||||
element: HTMLElement;
|
readonly element: HTMLElement;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ILinkifierAccessor {
|
export interface ILinkifierAccessor {
|
||||||
|
|||||||
+15
-17
@@ -154,24 +154,22 @@ export class CircularList<T> extends EventEmitter implements ICircularList<T> {
|
|||||||
this._length -= deleteCount;
|
this._length -= deleteCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (items && items.length) {
|
// Add items
|
||||||
// Add items
|
for (let i = this._length - 1; i >= start; i--) {
|
||||||
for (let i = this._length - 1; i >= start; i--) {
|
this._array[this._getCyclicIndex(i + items.length)] = this._array[this._getCyclicIndex(i)];
|
||||||
this._array[this._getCyclicIndex(i + items.length)] = this._array[this._getCyclicIndex(i)];
|
}
|
||||||
}
|
for (let i = 0; i < items.length; i++) {
|
||||||
for (let i = 0; i < items.length; i++) {
|
this._array[this._getCyclicIndex(start + i)] = items[i];
|
||||||
this._array[this._getCyclicIndex(start + i)] = items[i];
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Adjust length as needed
|
// Adjust length as needed
|
||||||
if (this._length + items.length > this._maxLength) {
|
if (this._length + items.length > this._maxLength) {
|
||||||
const countToTrim = (this._length + items.length) - this._maxLength;
|
const countToTrim = (this._length + items.length) - this._maxLength;
|
||||||
this._startIndex += countToTrim;
|
this._startIndex += countToTrim;
|
||||||
this._length = this._maxLength;
|
this._length = this._maxLength;
|
||||||
this.emitMayRemoveListeners('trim', countToTrim);
|
this.emitMayRemoveListeners('trim', countToTrim);
|
||||||
} else {
|
} else {
|
||||||
this._length += items.length;
|
this._length += items.length;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Vendored
+11
-7
@@ -314,28 +314,32 @@ declare module 'xterm' {
|
|||||||
/**
|
/**
|
||||||
* The element containing the terminal.
|
* The element containing the terminal.
|
||||||
*/
|
*/
|
||||||
element: HTMLElement;
|
readonly element: HTMLElement;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The textarea that accepts input for the terminal.
|
* The textarea that accepts input for the terminal.
|
||||||
*/
|
*/
|
||||||
textarea: HTMLTextAreaElement;
|
readonly textarea: HTMLTextAreaElement;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The number of rows in the terminal's viewport.
|
* The number of rows in the terminal's viewport. Use
|
||||||
|
* `ITerminalOptions.rows` to set this in the constructor and
|
||||||
|
* `Terminal.resize` for when the terminal exists.
|
||||||
*/
|
*/
|
||||||
rows: number;
|
readonly rows: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The number of columns in the terminal's viewport.
|
* The number of columns in the terminal's viewport. Use
|
||||||
|
* `ITerminalOptions.cols` to set this in the constructor and
|
||||||
|
* `Terminal.resize` for when the terminal exists.
|
||||||
*/
|
*/
|
||||||
cols: number;
|
readonly cols: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* (EXPERIMENTAL) Get all markers registered against the buffer. If the alt
|
* (EXPERIMENTAL) Get all markers registered against the buffer. If the alt
|
||||||
* buffer is active this will always return [].
|
* buffer is active this will always return [].
|
||||||
*/
|
*/
|
||||||
markers: IMarker[];
|
readonly markers: IMarker[];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Natural language strings that can be localized.
|
* Natural language strings that can be localized.
|
||||||
|
|||||||
Reference in New Issue
Block a user