From 53c526f48cb3267c4854c9d7ea72e3b80cb346ed Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Tue, 18 Feb 2020 06:49:11 -0800 Subject: [PATCH 1/9] Improve Linux dependencies, enable WebKit --- azure-pipelines.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index adeecb88..67b6b006 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -82,8 +82,13 @@ jobs: vmImage: 'ubuntu-18.04' steps: - script: | + # source: https://github.com/microsoft/playwright/issues/1041 sudo apt update - sudo apt install libwoff1 libopus0 libwebp6 libwebpdemux2 libenchant1c2a libgudev-1.0-0 libsecret-1-0 libhyphen0 libgdk-pixbuf2.0-0 libegl1 libgles2 libevent-2.1-6 libnotify4 libxslt1.1 + sudo apt install libwoff1 libopus0 libwebp6 libwebpdemux2 libenchant1c2a libgudev-1.0-0 libsecret-1-0 libhyphen0 libgdk-pixbuf2.0-0 libegl1 libnotify4 libxslt1.1 libevent-2.1-6 libgles2 libgl1 libegl1 libvpx5 + # for chromium + sudo apt install libnss3 libxss1 libasound2 + # for firefox + sudo apt install libdbus-glib-1-2 libxt6 displayName: Install required packages - task: NodeTool@0 inputs: @@ -108,6 +113,8 @@ jobs: displayName: 'Integration tests (Chromium)' - script: xvfb-run --auto-servernum -- bash -c "yarn test-api-firefox --headless --forbid-only" displayName: 'Integration tests (Firefox)' + - script: xvfb-run --auto-servernum -- bash -c "yarn test-api-webkit --headless --forbid-only" + displayName: 'Integration tests (Webkit)' - job: macOS_IntegrationTests pool: From 9a1c7953e7dba3add9574fe7e3565837fd581c0e Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Tue, 18 Feb 2020 07:39:15 -0800 Subject: [PATCH 2/9] dumpio in browser launch --- addons/xterm-addon-attach/src/AttachAddon.api.ts | 2 +- addons/xterm-addon-fit/src/FitAddon.api.ts | 2 +- addons/xterm-addon-search/src/SearchAddon.api.ts | 2 +- addons/xterm-addon-serialize/src/SerializeAddon.api.ts | 2 +- addons/xterm-addon-unicode11/src/Unicode11Addon.api.ts | 2 +- addons/xterm-addon-web-links/src/WebLinksAddon.api.ts | 2 +- addons/xterm-addon-webgl/src/WebglRenderer.api.ts | 2 +- test/api/CharWidth.api.ts | 2 +- test/api/InputHandler.api.ts | 2 +- test/api/MouseTracking.api.ts | 2 +- test/api/Parser.api.ts | 2 +- test/api/Terminal.api.ts | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/addons/xterm-addon-attach/src/AttachAddon.api.ts b/addons/xterm-addon-attach/src/AttachAddon.api.ts index 625e1b4d..6727fb72 100644 --- a/addons/xterm-addon-attach/src/AttachAddon.api.ts +++ b/addons/xterm-addon-attach/src/AttachAddon.api.ts @@ -17,7 +17,7 @@ const height = 600; describe('AttachAddon', () => { before(async function(): Promise { const browserType = getBrowserType(); - browser = await browserType.launch({ + browser = await browserType.launch({ dumpio: true, headless: process.argv.indexOf('--headless') !== -1, args: [`--window-size=${width},${height}`, `--no-sandbox`] }); diff --git a/addons/xterm-addon-fit/src/FitAddon.api.ts b/addons/xterm-addon-fit/src/FitAddon.api.ts index 798b2fc5..63c7f5a5 100644 --- a/addons/xterm-addon-fit/src/FitAddon.api.ts +++ b/addons/xterm-addon-fit/src/FitAddon.api.ts @@ -17,7 +17,7 @@ const height = 768; describe('FitAddon', () => { before(async function(): Promise { const browserType = getBrowserType(); - browser = await browserType.launch({ + browser = await browserType.launch({ dumpio: true, headless: process.argv.indexOf('--headless') !== -1, args: [`--window-size=${width},${height}`, `--no-sandbox`] }); diff --git a/addons/xterm-addon-search/src/SearchAddon.api.ts b/addons/xterm-addon-search/src/SearchAddon.api.ts index 21238332..ea3cdfa0 100644 --- a/addons/xterm-addon-search/src/SearchAddon.api.ts +++ b/addons/xterm-addon-search/src/SearchAddon.api.ts @@ -19,7 +19,7 @@ const height = 600; describe('Search Tests', function(): void { before(async function(): Promise { const browserType = getBrowserType(); - browser = await browserType.launch({ + browser = await browserType.launch({ dumpio: true, headless: process.argv.indexOf('--headless') !== -1, args: [`--window-size=${width},${height}`, `--no-sandbox`] }); diff --git a/addons/xterm-addon-serialize/src/SerializeAddon.api.ts b/addons/xterm-addon-serialize/src/SerializeAddon.api.ts index 824b4b89..4c830978 100644 --- a/addons/xterm-addon-serialize/src/SerializeAddon.api.ts +++ b/addons/xterm-addon-serialize/src/SerializeAddon.api.ts @@ -17,7 +17,7 @@ const height = 600; describe('SerializeAddon', () => { before(async function(): Promise { const browserType = getBrowserType(); - browser = await browserType.launch({ + browser = await browserType.launch({ dumpio: true, headless: process.argv.indexOf('--headless') !== -1, args: [`--window-size=${width},${height}`] }); diff --git a/addons/xterm-addon-unicode11/src/Unicode11Addon.api.ts b/addons/xterm-addon-unicode11/src/Unicode11Addon.api.ts index 983e795f..cf5331b0 100644 --- a/addons/xterm-addon-unicode11/src/Unicode11Addon.api.ts +++ b/addons/xterm-addon-unicode11/src/Unicode11Addon.api.ts @@ -17,7 +17,7 @@ const height = 600; describe('Unicode11Addon', () => { before(async function(): Promise { const browserType = getBrowserType(); - browser = await browserType.launch({ + browser = await browserType.launch({ dumpio: true, headless: process.argv.indexOf('--headless') !== -1, args: [`--window-size=${width},${height}`, `--no-sandbox`] }); diff --git a/addons/xterm-addon-web-links/src/WebLinksAddon.api.ts b/addons/xterm-addon-web-links/src/WebLinksAddon.api.ts index b2516cdf..f35fc0e4 100644 --- a/addons/xterm-addon-web-links/src/WebLinksAddon.api.ts +++ b/addons/xterm-addon-web-links/src/WebLinksAddon.api.ts @@ -17,7 +17,7 @@ const height = 600; describe('WebLinksAddon', () => { before(async function(): Promise { const browserType = getBrowserType(); - browser = await browserType.launch({ + browser = await browserType.launch({ dumpio: true, headless: process.argv.indexOf('--headless') !== -1, args: [`--window-size=${width},${height}`, `--no-sandbox`] }); diff --git a/addons/xterm-addon-webgl/src/WebglRenderer.api.ts b/addons/xterm-addon-webgl/src/WebglRenderer.api.ts index cd90ddd9..a38210e6 100644 --- a/addons/xterm-addon-webgl/src/WebglRenderer.api.ts +++ b/addons/xterm-addon-webgl/src/WebglRenderer.api.ts @@ -899,7 +899,7 @@ async function getCellColor(col: number, row: number): Promise { async function setupBrowser(options: ITerminalOptions = { rendererType: 'dom' }): Promise { const browserType = getBrowserType(); - browser = await browserType.launch({ + browser = await browserType.launch({ dumpio: true, headless: process.argv.indexOf('--headless') !== -1, args: [`--window-size=${width},${height}`, `--no-sandbox`] }); diff --git a/test/api/CharWidth.api.ts b/test/api/CharWidth.api.ts index b5cb5838..9e484738 100644 --- a/test/api/CharWidth.api.ts +++ b/test/api/CharWidth.api.ts @@ -16,7 +16,7 @@ const height = 600; describe('CharWidth Integration Tests', function(): void { before(async function(): Promise { const browserType = getBrowserType(); - browser = await browserType.launch({ + browser = await browserType.launch({ dumpio: true, headless: process.argv.indexOf('--headless') !== -1, args: [`--window-size=${width},${height}`, `--no-sandbox`] }); diff --git a/test/api/InputHandler.api.ts b/test/api/InputHandler.api.ts index d4018d90..0070f1a4 100644 --- a/test/api/InputHandler.api.ts +++ b/test/api/InputHandler.api.ts @@ -21,7 +21,7 @@ describe('InputHandler Integration Tests', function(): void { before(async function(): Promise { const browserType = getBrowserType(); isChromium = browserType.name() === 'chromium'; - browser = await browserType.launch({ + browser = await browserType.launch({ dumpio: true, headless: process.argv.indexOf('--headless') !== -1, args: [`--window-size=${width},${height}`, `--no-sandbox`] }); diff --git a/test/api/MouseTracking.api.ts b/test/api/MouseTracking.api.ts index 4d10a987..934a9ce5 100644 --- a/test/api/MouseTracking.api.ts +++ b/test/api/MouseTracking.api.ts @@ -213,7 +213,7 @@ describe('Mouse Tracking Tests', async () => { const itMouse = isChromium ? it : it.skip; before(async function(): Promise { - browser = await browserType.launch({ + browser = await browserType.launch({ dumpio: true, headless: process.argv.indexOf('--headless') !== -1, args: [`--window-size=${width},${height}`, `--no-sandbox`] }); diff --git a/test/api/Parser.api.ts b/test/api/Parser.api.ts index 29dcbb0b..0ba3248b 100644 --- a/test/api/Parser.api.ts +++ b/test/api/Parser.api.ts @@ -17,7 +17,7 @@ const height = 600; describe('Parser Integration Tests', function(): void { before(async function(): Promise { const browserType = getBrowserType(); - browser = await browserType.launch({ + browser = await browserType.launch({ dumpio: true, headless: process.argv.indexOf('--headless') !== -1, args: [`--window-size=${width},${height}`, `--no-sandbox`] }); diff --git a/test/api/Terminal.api.ts b/test/api/Terminal.api.ts index fce17511..996e9ccd 100644 --- a/test/api/Terminal.api.ts +++ b/test/api/Terminal.api.ts @@ -17,7 +17,7 @@ const height = 600; describe('API Integration Tests', function(): void { before(async () => { const browserType = getBrowserType(); - browser = await browserType.launch({ + browser = await browserType.launch({ dumpio: true, headless: process.argv.indexOf('--headless') !== -1, args: [`--window-size=${width},${height}`, `--no-sandbox`] }); From a18bac7380d832d82aceabc63c47becee16fd9b0 Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Tue, 18 Feb 2020 07:47:01 -0800 Subject: [PATCH 3/9] Remove browser args --- addons/xterm-addon-attach/src/AttachAddon.api.ts | 3 +-- addons/xterm-addon-fit/src/FitAddon.api.ts | 3 +-- addons/xterm-addon-search/src/SearchAddon.api.ts | 3 +-- addons/xterm-addon-serialize/src/SerializeAddon.api.ts | 3 +-- addons/xterm-addon-unicode11/src/Unicode11Addon.api.ts | 3 +-- addons/xterm-addon-web-links/src/WebLinksAddon.api.ts | 3 +-- addons/xterm-addon-webgl/src/WebglRenderer.api.ts | 3 +-- test/api/CharWidth.api.ts | 3 +-- test/api/InputHandler.api.ts | 3 +-- test/api/MouseTracking.api.ts | 3 +-- test/api/Parser.api.ts | 3 +-- test/api/Terminal.api.ts | 3 +-- 12 files changed, 12 insertions(+), 24 deletions(-) diff --git a/addons/xterm-addon-attach/src/AttachAddon.api.ts b/addons/xterm-addon-attach/src/AttachAddon.api.ts index 6727fb72..6816a5f1 100644 --- a/addons/xterm-addon-attach/src/AttachAddon.api.ts +++ b/addons/xterm-addon-attach/src/AttachAddon.api.ts @@ -18,8 +18,7 @@ describe('AttachAddon', () => { before(async function(): Promise { const browserType = getBrowserType(); browser = await browserType.launch({ dumpio: true, - headless: process.argv.indexOf('--headless') !== -1, - args: [`--window-size=${width},${height}`, `--no-sandbox`] + headless: process.argv.indexOf('--headless') !== -1 }); page = await (await browser.newContext()).newPage(); await page.setViewportSize({ width, height }); diff --git a/addons/xterm-addon-fit/src/FitAddon.api.ts b/addons/xterm-addon-fit/src/FitAddon.api.ts index 63c7f5a5..5eae6b6d 100644 --- a/addons/xterm-addon-fit/src/FitAddon.api.ts +++ b/addons/xterm-addon-fit/src/FitAddon.api.ts @@ -18,8 +18,7 @@ describe('FitAddon', () => { before(async function(): Promise { const browserType = getBrowserType(); browser = await browserType.launch({ dumpio: true, - headless: process.argv.indexOf('--headless') !== -1, - args: [`--window-size=${width},${height}`, `--no-sandbox`] + headless: process.argv.indexOf('--headless') !== -1 }); page = await (await browser.newContext()).newPage(); await page.setViewportSize({ width, height }); diff --git a/addons/xterm-addon-search/src/SearchAddon.api.ts b/addons/xterm-addon-search/src/SearchAddon.api.ts index ea3cdfa0..125e3dcb 100644 --- a/addons/xterm-addon-search/src/SearchAddon.api.ts +++ b/addons/xterm-addon-search/src/SearchAddon.api.ts @@ -20,8 +20,7 @@ describe('Search Tests', function(): void { before(async function(): Promise { const browserType = getBrowserType(); browser = await browserType.launch({ dumpio: true, - headless: process.argv.indexOf('--headless') !== -1, - args: [`--window-size=${width},${height}`, `--no-sandbox`] + headless: process.argv.indexOf('--headless') !== -1 }); page = await (await browser.newContext()).newPage(); await page.setViewportSize({ width, height }); diff --git a/addons/xterm-addon-serialize/src/SerializeAddon.api.ts b/addons/xterm-addon-serialize/src/SerializeAddon.api.ts index 4c830978..9e79de3f 100644 --- a/addons/xterm-addon-serialize/src/SerializeAddon.api.ts +++ b/addons/xterm-addon-serialize/src/SerializeAddon.api.ts @@ -18,8 +18,7 @@ describe('SerializeAddon', () => { before(async function(): Promise { const browserType = getBrowserType(); browser = await browserType.launch({ dumpio: true, - headless: process.argv.indexOf('--headless') !== -1, - args: [`--window-size=${width},${height}`] + headless: process.argv.indexOf('--headless') !== -1 }); page = await (await browser.newContext()).newPage(); await page.setViewportSize({ width, height }); diff --git a/addons/xterm-addon-unicode11/src/Unicode11Addon.api.ts b/addons/xterm-addon-unicode11/src/Unicode11Addon.api.ts index cf5331b0..8d521b2e 100644 --- a/addons/xterm-addon-unicode11/src/Unicode11Addon.api.ts +++ b/addons/xterm-addon-unicode11/src/Unicode11Addon.api.ts @@ -18,8 +18,7 @@ describe('Unicode11Addon', () => { before(async function(): Promise { const browserType = getBrowserType(); browser = await browserType.launch({ dumpio: true, - headless: process.argv.indexOf('--headless') !== -1, - args: [`--window-size=${width},${height}`, `--no-sandbox`] + headless: process.argv.indexOf('--headless') !== -1 }); page = await (await browser.newContext()).newPage(); await page.setViewportSize({ width, height }); diff --git a/addons/xterm-addon-web-links/src/WebLinksAddon.api.ts b/addons/xterm-addon-web-links/src/WebLinksAddon.api.ts index f35fc0e4..dc7317f0 100644 --- a/addons/xterm-addon-web-links/src/WebLinksAddon.api.ts +++ b/addons/xterm-addon-web-links/src/WebLinksAddon.api.ts @@ -18,8 +18,7 @@ describe('WebLinksAddon', () => { before(async function(): Promise { const browserType = getBrowserType(); browser = await browserType.launch({ dumpio: true, - headless: process.argv.indexOf('--headless') !== -1, - args: [`--window-size=${width},${height}`, `--no-sandbox`] + headless: process.argv.indexOf('--headless') !== -1 }); page = await (await browser.newContext()).newPage(); await page.setViewportSize({ width, height }); diff --git a/addons/xterm-addon-webgl/src/WebglRenderer.api.ts b/addons/xterm-addon-webgl/src/WebglRenderer.api.ts index a38210e6..591d7fff 100644 --- a/addons/xterm-addon-webgl/src/WebglRenderer.api.ts +++ b/addons/xterm-addon-webgl/src/WebglRenderer.api.ts @@ -900,8 +900,7 @@ async function getCellColor(col: number, row: number): Promise { async function setupBrowser(options: ITerminalOptions = { rendererType: 'dom' }): Promise { const browserType = getBrowserType(); browser = await browserType.launch({ dumpio: true, - headless: process.argv.indexOf('--headless') !== -1, - args: [`--window-size=${width},${height}`, `--no-sandbox`] + headless: process.argv.indexOf('--headless') !== -1 }); page = await (await browser.newContext()).newPage(); await page.setViewportSize({ width, height }); diff --git a/test/api/CharWidth.api.ts b/test/api/CharWidth.api.ts index 9e484738..705dde7c 100644 --- a/test/api/CharWidth.api.ts +++ b/test/api/CharWidth.api.ts @@ -17,8 +17,7 @@ describe('CharWidth Integration Tests', function(): void { before(async function(): Promise { const browserType = getBrowserType(); browser = await browserType.launch({ dumpio: true, - headless: process.argv.indexOf('--headless') !== -1, - args: [`--window-size=${width},${height}`, `--no-sandbox`] + headless: process.argv.indexOf('--headless') !== -1 }); page = await (await browser.newContext()).newPage(); await page.setViewportSize({ width, height }); diff --git a/test/api/InputHandler.api.ts b/test/api/InputHandler.api.ts index 0070f1a4..45aa7075 100644 --- a/test/api/InputHandler.api.ts +++ b/test/api/InputHandler.api.ts @@ -22,8 +22,7 @@ describe('InputHandler Integration Tests', function(): void { const browserType = getBrowserType(); isChromium = browserType.name() === 'chromium'; browser = await browserType.launch({ dumpio: true, - headless: process.argv.indexOf('--headless') !== -1, - args: [`--window-size=${width},${height}`, `--no-sandbox`] + headless: process.argv.indexOf('--headless') !== -1 }); page = await (await browser.newContext()).newPage(); await page.setViewportSize({ width, height }); diff --git a/test/api/MouseTracking.api.ts b/test/api/MouseTracking.api.ts index 934a9ce5..3ddf3a05 100644 --- a/test/api/MouseTracking.api.ts +++ b/test/api/MouseTracking.api.ts @@ -214,8 +214,7 @@ describe('Mouse Tracking Tests', async () => { before(async function(): Promise { browser = await browserType.launch({ dumpio: true, - headless: process.argv.indexOf('--headless') !== -1, - args: [`--window-size=${width},${height}`, `--no-sandbox`] + headless: process.argv.indexOf('--headless') !== -1 }); page = await (await browser.newContext()).newPage(); await page.setViewportSize({ width, height }); diff --git a/test/api/Parser.api.ts b/test/api/Parser.api.ts index 0ba3248b..a40fd504 100644 --- a/test/api/Parser.api.ts +++ b/test/api/Parser.api.ts @@ -18,8 +18,7 @@ describe('Parser Integration Tests', function(): void { before(async function(): Promise { const browserType = getBrowserType(); browser = await browserType.launch({ dumpio: true, - headless: process.argv.indexOf('--headless') !== -1, - args: [`--window-size=${width},${height}`, `--no-sandbox`] + headless: process.argv.indexOf('--headless') !== -1 }); page = await (await browser.newContext()).newPage(); await page.setViewportSize({ width, height }); diff --git a/test/api/Terminal.api.ts b/test/api/Terminal.api.ts index 996e9ccd..2c26bb08 100644 --- a/test/api/Terminal.api.ts +++ b/test/api/Terminal.api.ts @@ -18,8 +18,7 @@ describe('API Integration Tests', function(): void { before(async () => { const browserType = getBrowserType(); browser = await browserType.launch({ dumpio: true, - headless: process.argv.indexOf('--headless') !== -1, - args: [`--window-size=${width},${height}`, `--no-sandbox`] + headless: process.argv.indexOf('--headless') !== -1 }); page = await (await browser.newContext()).newPage(); await page.setViewportSize({ width, height }); From 88a6be16af510b1e66858ccca3d96f5491a9f02a Mon Sep 17 00:00:00 2001 From: Felix Seidl Date: Thu, 27 Feb 2020 23:03:23 +0100 Subject: [PATCH 4/9] use original css color string --- src/browser/ColorManager.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/browser/ColorManager.ts b/src/browser/ColorManager.ts index c8224a92..6ca4fd96 100644 --- a/src/browser/ColorManager.ts +++ b/src/browser/ColorManager.ts @@ -192,7 +192,7 @@ export class ColorManager implements IColorManager { const rgba: number = channels.toRgba(r, g, b, alpha); return { rgba, - css: channels.toCss(r, g, b, alpha) + css }; } From 47d7a71ad08a5fec5ccf72ed025ab96a93afb3d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Breitbart?= Date: Sun, 1 Mar 2020 13:29:18 +0100 Subject: [PATCH 5/9] fix cursor reset in DECSTR, some tests --- src/InputHandler.test.ts | 49 ++++++++++++++++++++++++++++++++++++++++ src/InputHandler.ts | 14 ++++++++++-- 2 files changed, 61 insertions(+), 2 deletions(-) diff --git a/src/InputHandler.test.ts b/src/InputHandler.test.ts index de43022b..9b3320b6 100644 --- a/src/InputHandler.test.ts +++ b/src/InputHandler.test.ts @@ -1445,4 +1445,53 @@ describe('InputHandler', () => { assert.deepEqual(getLines(term), ['¥¥ ¥¥', '¥¥ ¥', '¥¥ ¥', '¥¥¥¥¥', '']); }); }); + describe('DECSTR', () => { + let term: TestTerminal; + beforeEach(() => { + term = new TestTerminal({cols: 10, rows: 5, scrollback: 1}); + term.writeSync('01234567890123'); + }); + it('should reset IRM', () => { + term.writeSync('\x1b[4h'); + assert.equal(term.insertMode, true); + term.writeSync('\x1b[!p'); + assert.equal(term.insertMode, false); + }); + it('should reset cursor visibility', () => { + term.writeSync('\x1b[?25l'); + assert.equal((term as any)._coreService.isCursorHidden, true); + term.writeSync('\x1b[!p'); + assert.equal((term as any)._coreService.isCursorHidden, false); + }); + it('should reset scroll margins', () => { + term.writeSync('\x1b[2;4r'); + assert.equal((term as any)._bufferService.buffer.scrollTop, 1); + assert.equal((term as any)._bufferService.buffer.scrollBottom, 3); + term.writeSync('\x1b[!p'); + assert.equal((term as any)._bufferService.buffer.scrollTop, 0); + assert.equal((term as any)._bufferService.buffer.scrollBottom, term.rows - 1); + }); + it('should reset text attributes', () => { + term.writeSync('\x1b[1;2;32;43m'); + assert.equal(!!term.curAttrData.isBold(), true); + term.writeSync('\x1b[!p'); + assert.equal(!!term.curAttrData.isBold(), false); + assert.equal(term.curAttrData.fg, 0); + assert.equal(term.curAttrData.bg, 0); + }); + it('should reset DECSC data', () => { + term.writeSync('\x1b7'); + assert.equal((term as any)._bufferService.buffer.savedX, 4); + assert.equal((term as any)._bufferService.buffer.savedY, 1); + term.writeSync('\x1b[!p'); + assert.equal((term as any)._bufferService.buffer.savedX, 0); + assert.equal((term as any)._bufferService.buffer.savedY, 0); + }); + it('should reset DECOM', () => { + term.writeSync('\x1b[?6h'); + assert.equal((term as any)._coreService.decPrivateModes.origin, true); + term.writeSync('\x1b[!p'); + assert.equal((term as any)._coreService.decPrivateModes.origin, false); + }); + }); }); diff --git a/src/InputHandler.ts b/src/InputHandler.ts index fb37f4ab..82d4d157 100644 --- a/src/InputHandler.ts +++ b/src/InputHandler.ts @@ -2344,11 +2344,12 @@ export class InputHandler extends Disposable implements IInputHandler { * DECSTR only resets certain attributes. For most needs DECSTR should be sufficient. * * The following terminal attributes are reset to default values: - * - cursor is reset (default = visible, home position) * - IRM is reset (dafault = false) * - scroll margins are reset (default = viewport size) * - erase attributes are reset to default * - charsets are reset + * - DECSC data is reset to initial values + * - DECOM is reset to absolute mode * * * FIXME: there are several more attributes missing (see VT520 manual) @@ -2360,9 +2361,18 @@ export class InputHandler extends Disposable implements IInputHandler { this._bufferService.buffer.scrollTop = 0; this._bufferService.buffer.scrollBottom = this._bufferService.rows - 1; this._curAttrData = DEFAULT_ATTR_DATA.clone(); - this._bufferService.buffer.x = this._bufferService.buffer.y = 0; // ? this._coreService.reset(); this._charsetService.reset(); + + // reset DECSC data + this._bufferService.buffer.savedX = 0; + this._bufferService.buffer.savedY = this._bufferService.buffer.ybase; + this._bufferService.buffer.savedCurAttrData.fg = this._curAttrData.fg; + this._bufferService.buffer.savedCurAttrData.bg = this._curAttrData.bg; + this._bufferService.buffer.savedCharset = this._charsetService.charset; + + // reset DECOM + this._coreService.decPrivateModes.origin = false; } /** From 8b5a1331068a6bfb9d2face5c3f16c64fed8f8d7 Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Mon, 6 Apr 2020 05:32:11 -0700 Subject: [PATCH 6/9] Pause cursor render layer before resuming Fixes #2764 --- addons/xterm-addon-webgl/src/renderLayer/CursorRenderLayer.ts | 3 +++ src/browser/renderer/CursorRenderLayer.ts | 3 +++ 2 files changed, 6 insertions(+) diff --git a/addons/xterm-addon-webgl/src/renderLayer/CursorRenderLayer.ts b/addons/xterm-addon-webgl/src/renderLayer/CursorRenderLayer.ts index 2ade8007..35bd27bb 100644 --- a/addons/xterm-addon-webgl/src/renderLayer/CursorRenderLayer.ts +++ b/addons/xterm-addon-webgl/src/renderLayer/CursorRenderLayer.ts @@ -360,6 +360,9 @@ class CursorBlinkStateManager { } public resume(terminal: Terminal): void { + // Clear out any existing timers just in case + this.pause(); + this._animationTimeRestarted = undefined; this._restartInterval(); this.restartBlinkAnimation(terminal); diff --git a/src/browser/renderer/CursorRenderLayer.ts b/src/browser/renderer/CursorRenderLayer.ts index 8b25667b..dc58f2f7 100644 --- a/src/browser/renderer/CursorRenderLayer.ts +++ b/src/browser/renderer/CursorRenderLayer.ts @@ -364,6 +364,9 @@ class CursorBlinkStateManager { } public resume(): void { + // Clear out any existing timers just in case + this.pause(); + this._animationTimeRestarted = undefined; this._restartInterval(); this.restartBlinkAnimation(); From 59d28e7b99f0978a60f4428a7c69ff4937b62d93 Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Mon, 6 Apr 2020 05:33:09 -0700 Subject: [PATCH 7/9] Use browser types instead of nodejs --- addons/xterm-addon-webgl/src/renderLayer/CursorRenderLayer.ts | 4 ++-- src/browser/renderer/CursorRenderLayer.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/xterm-addon-webgl/src/renderLayer/CursorRenderLayer.ts b/addons/xterm-addon-webgl/src/renderLayer/CursorRenderLayer.ts index 35bd27bb..310236b6 100644 --- a/addons/xterm-addon-webgl/src/renderLayer/CursorRenderLayer.ts +++ b/addons/xterm-addon-webgl/src/renderLayer/CursorRenderLayer.ts @@ -302,7 +302,7 @@ class CursorBlinkStateManager { // the regular interval is setup in order to support restarting the blink // animation in a lightweight way (without thrashing clearInterval and // setInterval). - this._blinkStartTimeout = setTimeout(() => { + this._blinkStartTimeout = window.setTimeout(() => { // Check if another animation restart was requested while this was being // started if (this._animationTimeRestarted) { @@ -322,7 +322,7 @@ class CursorBlinkStateManager { }); // Setup the blink interval - this._blinkInterval = setInterval(() => { + this._blinkInterval = window.setInterval(() => { // Adjust the animation time if it was restarted if (this._animationTimeRestarted) { // calc time diff diff --git a/src/browser/renderer/CursorRenderLayer.ts b/src/browser/renderer/CursorRenderLayer.ts index dc58f2f7..607180ae 100644 --- a/src/browser/renderer/CursorRenderLayer.ts +++ b/src/browser/renderer/CursorRenderLayer.ts @@ -306,7 +306,7 @@ class CursorBlinkStateManager { // the regular interval is setup in order to support restarting the blink // animation in a lightweight way (without thrashing clearInterval and // setInterval). - this._blinkStartTimeout = setTimeout(() => { + this._blinkStartTimeout = window.setTimeout(() => { // Check if another animation restart was requested while this was being // started if (this._animationTimeRestarted) { @@ -326,7 +326,7 @@ class CursorBlinkStateManager { }); // Setup the blink interval - this._blinkInterval = setInterval(() => { + this._blinkInterval = window.setInterval(() => { // Adjust the animation time if it was restarted if (this._animationTimeRestarted) { // calc time diff From 951d342ed743f13a2a9c00cb44bafcb499e4ed28 Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Fri, 10 Apr 2020 06:38:54 -0700 Subject: [PATCH 8/9] Disable webkit --- azure-pipelines.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index fa90af21..05c3b03d 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -113,8 +113,6 @@ jobs: displayName: 'Integration tests (Chromium)' - script: xvfb-run --auto-servernum -- bash -c "yarn test-api-firefox --headless --forbid-only" displayName: 'Integration tests (Firefox)' - - script: xvfb-run --auto-servernum -- bash -c "yarn test-api-webkit --headless --forbid-only" - displayName: 'Integration tests (Webkit)' - job: macOS_IntegrationTests pool: From 996694aec48daef4882f933c9f261f6463edd678 Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Fri, 10 Apr 2020 07:50:06 -0700 Subject: [PATCH 9/9] Use debug log level for open not attached to the DOM It seems mostly harmless now Part of microsoft/vscode#88529 --- src/Terminal.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Terminal.ts b/src/Terminal.ts index 89fbf1e0..ee226115 100644 --- a/src/Terminal.ts +++ b/src/Terminal.ts @@ -476,7 +476,7 @@ export class Terminal extends Disposable implements ITerminal, IDisposable, IInp } if (!document.body.contains(parent)) { - this._logService.warn('Terminal.open was called on an element that was not attached to the DOM'); + this._logService.debug('Terminal.open was called on an element that was not attached to the DOM'); } this._document = parent.ownerDocument;