Merge branch 'master' into contextmenu_fix

This commit is contained in:
Daniel Imms
2019-01-27 07:49:03 -08:00
committed by GitHub
9 changed files with 42 additions and 41 deletions
-1
View File
@@ -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
View File
@@ -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);
}); });
+2 -2
View File
@@ -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);
}); });
+7 -7
View File
@@ -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);
}); });
}); });
+2 -2
View File
@@ -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;
+2 -2
View File
@@ -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
View File
@@ -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
View File
@@ -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;
}
} }
} }
+11 -7
View File
@@ -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.