xterm-headless modes api, tests for headless

This commit is contained in:
Daniel Imms
2021-08-16 15:01:30 -07:00
parent 6affe68ca3
commit 8c25d57c26
4 changed files with 1325 additions and 1170 deletions
+82
View File
@@ -367,6 +367,88 @@ describe('Headless API Tests', function(): void {
});
});
describe('modes', () => {
it('defaults', () => {
deepStrictEqual(term.modes, {
applicationCursorKeysMode: false,
applicationKeypadMode: false,
bracketedPasteMode: false,
insertMode: false,
mouseTrackingMode: 'none',
originMode: false,
reverseWraparoundMode: false,
sendFocusMode: false,
wraparoundMode: true
});
});
it('applicationCursorKeysMode', async () => {
await writeSync('\x1b[?1h');
strictEqual(term.modes.applicationCursorKeysMode, true);
await writeSync('\x1b[?1l');
strictEqual(term.modes.applicationCursorKeysMode, false);
});
it('applicationKeypadMode', async () => {
await writeSync('\x1b[?66h');
strictEqual(term.modes.applicationKeypadMode, true);
await writeSync('\x1b[?66l');
strictEqual(term.modes.applicationKeypadMode, false);
});
it('bracketedPasteMode', async () => {
await writeSync('\x1b[?2004h');
strictEqual(term.modes.bracketedPasteMode, true);
await writeSync('\x1b[?2004l');
strictEqual(term.modes.bracketedPasteMode, false);
});
it('insertMode', async () => {
await writeSync('\x1b[4h');
strictEqual(term.modes.insertMode, true);
await writeSync('\x1b[4l');
strictEqual(term.modes.insertMode, false);
});
it('mouseTrackingMode', async () => {
await writeSync('\x1b[?9h');
strictEqual(term.modes.mouseTrackingMode, 'x10');
await writeSync('\x1b[?9l');
strictEqual(term.modes.mouseTrackingMode, 'none');
await writeSync('\x1b[?1000h');
strictEqual(term.modes.mouseTrackingMode, 'vt200');
await writeSync('\x1b[?1000l');
strictEqual(term.modes.mouseTrackingMode, 'none');
await writeSync('\x1b[?1002h');
strictEqual(term.modes.mouseTrackingMode, 'drag');
await writeSync('\x1b[?1002l');
strictEqual(term.modes.mouseTrackingMode, 'none');
await writeSync('\x1b[?1003h');
strictEqual(term.modes.mouseTrackingMode, 'any');
await writeSync('\x1b[?1003l');
strictEqual(term.modes.mouseTrackingMode, 'none');
});
it('originMode', async () => {
await writeSync('\x1b[?6h');
strictEqual(term.modes.originMode, true);
await writeSync('\x1b[?6l');
strictEqual(term.modes.originMode, false);
});
it('reverseWraparoundMode', async () => {
await writeSync('\x1b[?45h');
strictEqual(term.modes.reverseWraparoundMode, true);
await writeSync('\x1b[?45l');
strictEqual(term.modes.reverseWraparoundMode, false);
});
it('sendFocusMode', async () => {
await writeSync('\x1b[?1004h');
strictEqual(term.modes.sendFocusMode, true);
await writeSync('\x1b[?1004l');
strictEqual(term.modes.sendFocusMode, false);
});
it('wraparoundMode', async () => {
await writeSync('\x1b[?7h');
strictEqual(term.modes.wraparoundMode, true);
await writeSync('\x1b[?7l');
strictEqual(term.modes.wraparoundMode, false);
});
});
it('dispose', async () => {
term.dispose();
strictEqual((term as any)._core._isDisposed, true);
+22 -1
View File
@@ -7,7 +7,7 @@ import { IEvent } from 'common/EventEmitter';
import { BufferNamespaceApi } from 'common/public/BufferNamespaceApi';
import { ParserApi } from 'common/public/ParserApi';
import { UnicodeApi } from 'common/public/UnicodeApi';
import { IBufferNamespace as IBufferNamespaceApi, IMarker, IParser, ITerminalAddon, ITerminalOptions, IUnicodeHandling, Terminal as ITerminalApi } from 'xterm-headless';
import { IBufferNamespace as IBufferNamespaceApi, IMarker, IModes, IParser, ITerminalAddon, ITerminalOptions, IUnicodeHandling, Terminal as ITerminalApi } from 'xterm-headless';
import { Terminal as TerminalCore } from 'headless/Terminal';
import { AddonManager } from 'common/public/AddonManager';
@@ -61,6 +61,27 @@ export class Terminal implements ITerminalApi {
this._checkProposedApi();
return this._core.markers;
}
public get modes(): IModes {
const m = this._core.coreService.decPrivateModes;
let mouseTrackingMode: 'none' | 'x10' | 'vt200' | 'drag' | 'any' = 'none';
switch (this._core.coreMouseService.activeProtocol) {
case 'X10': mouseTrackingMode = 'x10'; break;
case 'VT200': mouseTrackingMode = 'vt200'; break;
case 'DRAG': mouseTrackingMode = 'drag'; break;
case 'ANY': mouseTrackingMode = 'any'; break;
}
return {
applicationCursorKeysMode: m.applicationCursorKeys,
applicationKeypadMode: m.applicationKeypad,
bracketedPasteMode: m.bracketedPasteMode,
insertMode: this._core.coreService.modes.insertMode,
mouseTrackingMode: mouseTrackingMode,
originMode: m.origin,
reverseWraparoundMode: m.reverseWraparound,
sendFocusMode: m.sendFocus,
wraparoundMode: m.wraparound
};
}
public resize(columns: number, rows: number): void {
this._verifyIntegers(columns, rows);
this._core.resize(columns, rows);
+1220 -1168
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -1666,7 +1666,7 @@ declare module 'xterm' {
*/
readonly reverseWraparoundMode: boolean;
/**
* Send FocusIn/FocusOut events: `CSI ? 1 0 0 3 h`
* Send FocusIn/FocusOut events: `CSI ? 1 0 0 4 h`
*/
readonly sendFocusMode: boolean;
/**