Move insertMode into core service

This commit is contained in:
Daniel Imms
2020-04-25 11:26:20 -07:00
parent 4cec11be9c
commit d5729f9216
10 changed files with 35 additions and 35 deletions
+7 -7
View File
@@ -102,16 +102,16 @@ describe('InputHandler', () => {
}); });
}); });
describe('setMode', () => { describe('setMode', () => {
it('should toggle Terminal.bracketedPasteMode', () => { it('should toggle bracketedPasteMode', () => {
const terminal = new MockInputHandlingTerminal(); const terminal = new MockInputHandlingTerminal();
terminal.bracketedPasteMode = false; const coreService = new MockCoreService();
const inputHandler = new InputHandler(terminal, new MockBufferService(80, 30), new MockCharsetService(), new MockCoreService(), new MockDirtyRowService(), new MockLogService(), new MockOptionsService(), new MockCoreMouseService(), new MockUnicodeService(), {} as any); const inputHandler = new InputHandler(terminal, new MockBufferService(80, 30), new MockCharsetService(), coreService, new MockDirtyRowService(), new MockLogService(), new MockOptionsService(), new MockCoreMouseService(), new MockUnicodeService(), {} as any);
// Set bracketed paste mode // Set bracketed paste mode
inputHandler.setModePrivate(Params.fromArray([2004])); inputHandler.setModePrivate(Params.fromArray([2004]));
assert.equal(terminal.bracketedPasteMode, true); assert.equal(coreService.decPrivateModes.bracketedPasteMode, true);
// Reset bracketed paste mode // Reset bracketed paste mode
inputHandler.resetModePrivate(Params.fromArray([2004])); inputHandler.resetModePrivate(Params.fromArray([2004]));
assert.equal(terminal.bracketedPasteMode, false); assert.equal(coreService.decPrivateModes.bracketedPasteMode, false);
}); });
}); });
describe('regression tests', function(): void { describe('regression tests', function(): void {
@@ -1453,9 +1453,9 @@ describe('InputHandler', () => {
}); });
it('should reset IRM', () => { it('should reset IRM', () => {
term.writeSync('\x1b[4h'); term.writeSync('\x1b[4h');
assert.equal(term.insertMode, true); assert.equal((term as any)._coreService.modes.insertMode, true);
term.writeSync('\x1b[!p'); term.writeSync('\x1b[!p');
assert.equal(term.insertMode, false); assert.equal((term as any)._coreService.modes.insertMode, false);
}); });
it('should reset cursor visibility', () => { it('should reset cursor visibility', () => {
term.writeSync('\x1b[?25l'); term.writeSync('\x1b[?25l');
+3 -7
View File
@@ -489,7 +489,7 @@ export class InputHandler extends Disposable implements IInputHandler {
const screenReaderMode = this._optionsService.options.screenReaderMode; const screenReaderMode = this._optionsService.options.screenReaderMode;
const cols = this._bufferService.cols; const cols = this._bufferService.cols;
const wraparoundMode = this._coreService.decPrivateModes.wraparound; const wraparoundMode = this._coreService.decPrivateModes.wraparound;
const insertMode = this._terminal.insertMode; const insertMode = this._coreService.modes.insertMode;
const curAttr = this._curAttrData; const curAttr = this._curAttrData;
let bufferRow = buffer.lines.get(buffer.y + buffer.ybase); let bufferRow = buffer.lines.get(buffer.y + buffer.ybase);
@@ -1587,15 +1587,12 @@ export class InputHandler extends Disposable implements IInputHandler {
* | 4 | Insert Mode (IRM). | #Y | * | 4 | Insert Mode (IRM). | #Y |
* | 12 | Send/receive (SRM). Always off. | #N | * | 12 | Send/receive (SRM). Always off. | #N |
* | 20 | Automatic Newline (LNM). Always off. | #N | * | 20 | Automatic Newline (LNM). Always off. | #N |
*
*
* FIXME: why is LNM commented out?
*/ */
public setMode(params: IParams): void { public setMode(params: IParams): void {
for (let i = 0; i < params.length; i++) { for (let i = 0; i < params.length; i++) {
switch (params.params[i]) { switch (params.params[i]) {
case 4: case 4:
this._terminal.insertMode = true; this._coreService.modes.insertMode = true;
break; break;
case 20: case 20:
// this._t.convertEol = true; // this._t.convertEol = true;
@@ -1833,7 +1830,7 @@ export class InputHandler extends Disposable implements IInputHandler {
for (let i = 0; i < params.length; i++) { for (let i = 0; i < params.length; i++) {
switch (params.params[i]) { switch (params.params[i]) {
case 4: case 4:
this._terminal.insertMode = false; this._coreService.modes.insertMode = false;
break; break;
case 20: case 20:
// this._t.convertEol = false; // this._t.convertEol = false;
@@ -2356,7 +2353,6 @@ export class InputHandler extends Disposable implements IInputHandler {
*/ */
public softReset(params: IParams): void { public softReset(params: IParams): void {
this._coreService.isCursorHidden = false; this._coreService.isCursorHidden = false;
this._terminal.insertMode = false;
this._terminal.viewport?.syncScrollArea(); this._terminal.viewport?.syncScrollArea();
this._bufferService.buffer.scrollTop = 0; this._bufferService.buffer.scrollTop = 0;
this._bufferService.buffer.scrollBottom = this._bufferService.rows - 1; this._bufferService.buffer.scrollBottom = this._bufferService.rows - 1;
+3 -3
View File
@@ -991,7 +991,7 @@ describe('Terminal', () => {
term.writeSync(Array(9).join('0123456789').slice(-80)); term.writeSync(Array(9).join('0123456789').slice(-80));
term.buffer.x = 10; term.buffer.x = 10;
term.buffer.y = 0; term.buffer.y = 0;
term.insertMode = true; term.write('\x1b[4h');
term.writeSync('abcde'); term.writeSync('abcde');
expect(term.buffer.lines.get(0).length).eql(term.cols); expect(term.buffer.lines.get(0).length).eql(term.cols);
expect(term.buffer.lines.get(0).loadCell(10, cell).getChars()).eql('a'); expect(term.buffer.lines.get(0).loadCell(10, cell).getChars()).eql('a');
@@ -1003,7 +1003,7 @@ describe('Terminal', () => {
term.writeSync(Array(9).join('0123456789').slice(-80)); term.writeSync(Array(9).join('0123456789').slice(-80));
term.buffer.x = 10; term.buffer.x = 10;
term.buffer.y = 0; term.buffer.y = 0;
term.insertMode = true; term.write('\x1b[4h');
term.writeSync('¥¥¥'); term.writeSync('¥¥¥');
expect(term.buffer.lines.get(0).length).eql(term.cols); expect(term.buffer.lines.get(0).length).eql(term.cols);
expect(term.buffer.lines.get(0).loadCell(10, cell).getChars()).eql('¥'); expect(term.buffer.lines.get(0).loadCell(10, cell).getChars()).eql('¥');
@@ -1016,7 +1016,7 @@ describe('Terminal', () => {
term.writeSync(Array(41).join('¥')); term.writeSync(Array(41).join('¥'));
term.buffer.x = 10; term.buffer.x = 10;
term.buffer.y = 0; term.buffer.y = 0;
term.insertMode = true; term.write('\x1b[4h');
term.writeSync('a'); term.writeSync('a');
expect(term.buffer.lines.get(0).length).eql(term.cols); expect(term.buffer.lines.get(0).length).eql(term.cols);
expect(term.buffer.lines.get(0).loadCell(10, cell).getChars()).eql('a'); expect(term.buffer.lines.get(0).loadCell(10, cell).getChars()).eql('a');
+5 -12
View File
@@ -88,9 +88,6 @@ export class Terminal extends CoreTerminal implements ITerminal, IInputHandlingT
private _selectionService: ISelectionService; private _selectionService: ISelectionService;
private _soundService: ISoundService; private _soundService: ISoundService;
// modes
public insertMode: boolean;
// mouse properties // mouse properties
public mouseEvents: CoreMouseEventType = CoreMouseEventType.NONE; public mouseEvents: CoreMouseEventType = CoreMouseEventType.NONE;
public sendFocus: boolean; public sendFocus: boolean;
@@ -179,15 +176,6 @@ export class Terminal extends CoreTerminal implements ITerminal, IInputHandlingT
} }
protected _setup(): void { protected _setup(): void {
super._setup();
this._customKeyEventHandler = null;
// modes
this.insertMode = false;
this._userScrolling = false;
if (this._inputHandler) { if (this._inputHandler) {
this._inputHandler.reset(); this._inputHandler.reset();
} else { } else {
@@ -201,6 +189,11 @@ export class Terminal extends CoreTerminal implements ITerminal, IInputHandlingT
this.register(this._inputHandler); this.register(this._inputHandler);
} }
super._setup();
this._customKeyEventHandler = null;
this._userScrolling = false;
if (!this.linkifier) { if (!this.linkifier) {
this.linkifier = this._instantiationService.createInstance(Linkifier); this.linkifier = this._instantiationService.createInstance(Linkifier);
} }
-2
View File
@@ -203,8 +203,6 @@ export class MockTerminal implements ITerminal {
export class MockInputHandlingTerminal implements IInputHandlingTerminal { export class MockInputHandlingTerminal implements IInputHandlingTerminal {
public onA11yCharEmitter: EventEmitter<string>; public onA11yCharEmitter: EventEmitter<string>;
public onA11yTabEmitter: EventEmitter<number>; public onA11yTabEmitter: EventEmitter<number>;
public insertMode: boolean;
public bracketedPasteMode: boolean;
public sendFocus: boolean; public sendFocus: boolean;
public buffers: IBufferSet; public buffers: IBufferSet;
public buffer: IBuffer = new MockBuffer(); public buffer: IBuffer = new MockBuffer();
-1
View File
@@ -21,7 +21,6 @@ export type LineData = CharData[];
* InputHandler cleanly from the ITerminal interface. * InputHandler cleanly from the ITerminal interface.
*/ */
export interface IInputHandlingTerminal { export interface IInputHandlingTerminal {
insertMode: boolean;
sendFocus: boolean; sendFocus: boolean;
buffers: IBufferSet; buffers: IBufferSet;
+4 -1
View File
@@ -9,7 +9,7 @@ import { clone } from 'common/Clone';
import { DEFAULT_OPTIONS } from 'common/services/OptionsService'; import { DEFAULT_OPTIONS } from 'common/services/OptionsService';
import { IBufferSet, IBuffer } from 'common/buffer/Types'; import { IBufferSet, IBuffer } from 'common/buffer/Types';
import { BufferSet } from 'common/buffer/BufferSet'; import { BufferSet } from 'common/buffer/BufferSet';
import { IDecPrivateModes, ICoreMouseEvent, CoreMouseEventType, ICharset } from 'common/Types'; import { IDecPrivateModes, ICoreMouseEvent, CoreMouseEventType, ICharset, IModes } from 'common/Types';
import { UnicodeV6 } from 'common/input/UnicodeV6'; import { UnicodeV6 } from 'common/input/UnicodeV6';
export class MockBufferService implements IBufferService { export class MockBufferService implements IBufferService {
@@ -58,6 +58,9 @@ export class MockCoreService implements ICoreService {
public isCursorInitialized: boolean = false; public isCursorInitialized: boolean = false;
public isCursorHidden: boolean = false; public isCursorHidden: boolean = false;
public isFocused: boolean = false; public isFocused: boolean = false;
public modes: IModes = {
insertMode: false
};
public decPrivateModes: IDecPrivateModes = { public decPrivateModes: IDecPrivateModes = {
applicationCursorKeys: false, applicationCursorKeys: false,
applicationKeypad: false, applicationKeypad: false,
+3
View File
@@ -159,6 +159,9 @@ export interface IMarker extends IDisposable {
readonly isDisposed: boolean; readonly isDisposed: boolean;
readonly line: number; readonly line: number;
} }
export interface IModes {
insertMode: boolean;
}
export interface IDecPrivateModes { export interface IDecPrivateModes {
applicationCursorKeys: boolean; applicationCursorKeys: boolean;
+8 -1
View File
@@ -5,9 +5,13 @@
import { ICoreService, ILogService, IOptionsService, IBufferService } from 'common/services/Services'; import { ICoreService, ILogService, IOptionsService, IBufferService } from 'common/services/Services';
import { EventEmitter, IEvent } from 'common/EventEmitter'; import { EventEmitter, IEvent } from 'common/EventEmitter';
import { IDecPrivateModes } from 'common/Types'; import { IDecPrivateModes, IModes } from 'common/Types';
import { clone } from 'common/Clone'; import { clone } from 'common/Clone';
const DEFAULT_MODES: IModes = Object.freeze({
insertMode: false
});
const DEFAULT_DEC_PRIVATE_MODES: IDecPrivateModes = Object.freeze({ const DEFAULT_DEC_PRIVATE_MODES: IDecPrivateModes = Object.freeze({
applicationCursorKeys: false, applicationCursorKeys: false,
applicationKeypad: false, applicationKeypad: false,
@@ -21,6 +25,7 @@ export class CoreService implements ICoreService {
public isCursorInitialized: boolean = false; public isCursorInitialized: boolean = false;
public isCursorHidden: boolean = false; public isCursorHidden: boolean = false;
public modes: IModes;
public decPrivateModes: IDecPrivateModes; public decPrivateModes: IDecPrivateModes;
private _onData = new EventEmitter<string>(); private _onData = new EventEmitter<string>();
@@ -37,10 +42,12 @@ export class CoreService implements ICoreService {
@ILogService private readonly _logService: ILogService, @ILogService private readonly _logService: ILogService,
@IOptionsService private readonly _optionsService: IOptionsService @IOptionsService private readonly _optionsService: IOptionsService
) { ) {
this.modes = clone(DEFAULT_MODES);
this.decPrivateModes = clone(DEFAULT_DEC_PRIVATE_MODES); this.decPrivateModes = clone(DEFAULT_DEC_PRIVATE_MODES);
} }
public reset(): void { public reset(): void {
this.modes = clone(DEFAULT_MODES);
this.decPrivateModes = clone(DEFAULT_DEC_PRIVATE_MODES); this.decPrivateModes = clone(DEFAULT_DEC_PRIVATE_MODES);
} }
+2 -1
View File
@@ -5,7 +5,7 @@
import { IEvent } from 'common/EventEmitter'; import { IEvent } from 'common/EventEmitter';
import { IBuffer, IBufferSet } from 'common/buffer/Types'; import { IBuffer, IBufferSet } from 'common/buffer/Types';
import { IDecPrivateModes, ICoreMouseEvent, CoreMouseEncoding, ICoreMouseProtocol, CoreMouseEventType, ICharset, IWindowOptions } from 'common/Types'; import { IDecPrivateModes, ICoreMouseEvent, CoreMouseEncoding, ICoreMouseProtocol, CoreMouseEventType, ICharset, IWindowOptions, IModes } from 'common/Types';
import { createDecorator } from 'common/services/ServiceRegistry'; import { createDecorator } from 'common/services/ServiceRegistry';
export const IBufferService = createDecorator<IBufferService>('BufferService'); export const IBufferService = createDecorator<IBufferService>('BufferService');
@@ -65,6 +65,7 @@ export interface ICoreService {
isCursorInitialized: boolean; isCursorInitialized: boolean;
isCursorHidden: boolean; isCursorHidden: boolean;
readonly modes: IModes;
readonly decPrivateModes: IDecPrivateModes; readonly decPrivateModes: IDecPrivateModes;
readonly onData: IEvent<string>; readonly onData: IEvent<string>;