From df4b07f9f2841bbb9ca099422b070ac4aedd6c13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Breitbart?= Date: Sat, 4 Jan 2020 14:47:14 +0100 Subject: [PATCH] type fixes & docs --- addons/xterm-addon-unicode11/README.md | 3 +++ addons/xterm-addon-unicode11/src/UnicodeV11.ts | 2 +- src/Terminal.test.ts | 2 +- src/Terminal.ts | 14 +++++++------- src/TestUtils.test.ts | 3 ++- src/Types.d.ts | 3 ++- src/common/input/UnicodeV6.ts | 2 +- src/common/services/Services.ts | 2 +- src/public/Terminal.ts | 8 ++++---- typings/xterm.d.ts | 10 ++++++++-- 10 files changed, 30 insertions(+), 19 deletions(-) diff --git a/addons/xterm-addon-unicode11/README.md b/addons/xterm-addon-unicode11/README.md index eff46b39..ec01203e 100644 --- a/addons/xterm-addon-unicode11/README.md +++ b/addons/xterm-addon-unicode11/README.md @@ -17,4 +17,7 @@ import { Unicode11Addon } from 'xterm-addon-unicode11'; const terminal = new Terminal(); const unicode11Addon = new Unicode11Addon(); terminal.loadAddon(unicode11Addon); + +// activate the new version +terminal.unicode.activeVersion = '11'; ``` diff --git a/addons/xterm-addon-unicode11/src/UnicodeV11.ts b/addons/xterm-addon-unicode11/src/UnicodeV11.ts index d1525d25..d9d548d6 100644 --- a/addons/xterm-addon-unicode11/src/UnicodeV11.ts +++ b/addons/xterm-addon-unicode11/src/UnicodeV11.ts @@ -193,7 +193,7 @@ function bisearch(ucs: number, data: number[][]): boolean { export class UnicodeV11 implements IUnicodeVersionProvider { - public version = '11'; + public readonly version = '11'; constructor() { if (!table) { diff --git a/src/Terminal.test.ts b/src/Terminal.test.ts index 25a22176..d65c2478 100644 --- a/src/Terminal.test.ts +++ b/src/Terminal.test.ts @@ -1039,7 +1039,7 @@ describe('Terminal', () => { // to get the special handling of fullwidth, surrogate and combining chars in the input handler beforeEach(() => { terminal = new TestTerminal({ cols: 10, rows: 5 }); - linkifier = new TestLinkifier((terminal as any)._bufferService, (terminal as any)._unicodeService); + linkifier = new TestLinkifier((terminal as any)._bufferService, terminal.unicodeService); mouseZoneManager = new TestMouseZoneManager(); linkifier.attachToDom({} as any, mouseZoneManager); }); diff --git a/src/Terminal.ts b/src/Terminal.ts index 232f03ea..8ae36768 100644 --- a/src/Terminal.ts +++ b/src/Terminal.ts @@ -99,7 +99,7 @@ export class Terminal extends Disposable implements ITerminal, IDisposable, IInp private _instantiationService: IInstantiationService; private _logService: ILogService; public optionsService: IOptionsService; - private _unicodeService: IUnicodeService; + public unicodeService: IUnicodeService; // browser services private _charSizeService: ICharSizeService; @@ -211,8 +211,8 @@ export class Terminal extends Disposable implements ITerminal, IDisposable, IInp this._instantiationService.setService(ICoreMouseService, this._coreMouseService); this._dirtyRowService = this._instantiationService.createInstance(DirtyRowService); this._instantiationService.setService(IDirtyRowService, this._dirtyRowService); - this._unicodeService = this._instantiationService.createInstance(UnicodeService); - this._instantiationService.setService(IUnicodeService, this._unicodeService); + this.unicodeService = this._instantiationService.createInstance(UnicodeService); + this._instantiationService.setService(IUnicodeService, this.unicodeService); this._charsetService = this._instantiationService.createInstance(CharsetService); this._instantiationService.setService(ICharsetService, this._charsetService); @@ -248,7 +248,7 @@ export class Terminal extends Disposable implements ITerminal, IDisposable, IInp this._inputHandler.reset(); } else { // Register input handler and refire/handle events - this._inputHandler = new InputHandler(this, this._bufferService, this._charsetService, this._coreService, this._dirtyRowService, this._logService, this.optionsService, this._coreMouseService, this._unicodeService); + this._inputHandler = new InputHandler(this, this._bufferService, this._charsetService, this._coreService, this._dirtyRowService, this._logService, this.optionsService, this._coreMouseService, this.unicodeService); this._inputHandler.onRequestBell(() => this.bell()); this._inputHandler.onRequestRefreshRows((start, end) => this.refresh(start, end)); this._inputHandler.onRequestReset(() => this.reset()); @@ -258,7 +258,7 @@ export class Terminal extends Disposable implements ITerminal, IDisposable, IInp } if (!this.linkifier) { - this.linkifier = new Linkifier(this._bufferService, this._logService, this.optionsService, this._unicodeService); + this.linkifier = new Linkifier(this._bufferService, this._logService, this.optionsService, this.unicodeService); } if (this.options.windowsMode) { @@ -348,8 +348,8 @@ export class Terminal extends Disposable implements ITerminal, IDisposable, IInp } break; case 'unicodeVersion': - if (this._unicodeService.activeVersion !== this.optionsService.options.unicodeVersion) { - this._unicodeService.activeVersion = this.optionsService.options.unicodeVersion; + if (this.unicodeService.activeVersion !== this.optionsService.options.unicodeVersion) { + this.unicodeService.activeVersion = this.optionsService.options.unicodeVersion; } break; } diff --git a/src/TestUtils.test.ts b/src/TestUtils.test.ts index 57a9fe78..c6e193a7 100644 --- a/src/TestUtils.test.ts +++ b/src/TestUtils.test.ts @@ -13,7 +13,7 @@ import { IDisposable, IMarker, IEvent, ISelectionPosition } from 'xterm'; import { Terminal } from './Terminal'; import { AttributeData } from 'common/buffer/AttributeData'; import { IColorManager, IColorSet, ILinkMatcherOptions, ILinkifier, IViewport } from 'browser/Types'; -import { IOptionsService } from 'common/services/Services'; +import { IOptionsService, IUnicodeService } from 'common/services/Services'; import { EventEmitter } from 'common/EventEmitter'; import { IParams, IFunctionIdentifier } from 'common/parser/Types'; import { ISelectionService } from 'browser/services/Services'; @@ -41,6 +41,7 @@ export class MockTerminal implements ITerminal { onResize: IEvent<{ cols: number; rows: number; }>; markers: IMarker[]; optionsService: IOptionsService; + unicodeService: IUnicodeService; addMarker(cursorYOffset: number): IMarker { throw new Error('Method not implemented.'); } diff --git a/src/Types.d.ts b/src/Types.d.ts index ebc5d338..0b875029 100644 --- a/src/Types.d.ts +++ b/src/Types.d.ts @@ -7,7 +7,7 @@ import { ITerminalOptions as IPublicTerminalOptions, IDisposable, IMarker, ISele import { ICharset, IAttributeData, CharData, CoreMouseEventType } from 'common/Types'; import { IEvent, IEventEmitter } from 'common/EventEmitter'; import { IColorSet, ILinkifier, ILinkMatcherOptions, IViewport } from 'browser/Types'; -import { IOptionsService } from 'common/services/Services'; +import { IOptionsService, IUnicodeService } from 'common/services/Services'; import { IBuffer, IBufferSet } from 'common/buffer/Types'; import { IParams, IFunctionIdentifier } from 'common/parser/Types'; @@ -140,6 +140,7 @@ export interface ITerminal extends IPublicTerminal, IElementAccessor, IBufferAcc optionsService: IOptionsService; // TODO: We should remove options once components adopt optionsService options: ITerminalOptions; + unicodeService: IUnicodeService; onBlur: IEvent; onFocus: IEvent; diff --git a/src/common/input/UnicodeV6.ts b/src/common/input/UnicodeV6.ts index d6bb7458..b3082030 100644 --- a/src/common/input/UnicodeV6.ts +++ b/src/common/input/UnicodeV6.ts @@ -84,7 +84,7 @@ function bisearch(ucs: number, data: number[][]): boolean { } export class UnicodeV6 implements IUnicodeVersionProvider { - public version = '6'; + public readonly version = '6'; constructor() { // init lookup table once diff --git a/src/common/services/Services.ts b/src/common/services/Services.ts index f6bd47a8..ce24e5c1 100644 --- a/src/common/services/Services.ts +++ b/src/common/services/Services.ts @@ -328,6 +328,6 @@ export interface IUnicodeService { } export interface IUnicodeVersionProvider { - version: string; + readonly version: string; wcwidth(ucs: number): 0 | 1 | 2; } diff --git a/src/public/Terminal.ts b/src/public/Terminal.ts index ce432ce1..4f70e347 100644 --- a/src/public/Terminal.ts +++ b/src/public/Terminal.ts @@ -263,18 +263,18 @@ class UnicodeApi implements IUnicodeHandling { constructor(private _core: ITerminal) {} public register(provider: IUnicodeVersionProvider): void { - (this._core as any)._unicodeService.register(provider); + this._core.unicodeService.register(provider); } public get versions(): string[] { - return (this._core as any)._unicodeService.versions; + return this._core.unicodeService.versions; } public get activeVersion(): string { - return (this._core as any)._unicodeService.activeVersion; + return this._core.unicodeService.activeVersion; } public set activeVersion(version: string) { - (this._core as any)._unicodeService.activeVersion = version; + this._core.unicodeService.activeVersion = version; } } diff --git a/typings/xterm.d.ts b/typings/xterm.d.ts index 3229b158..8a7464a6 100644 --- a/typings/xterm.d.ts +++ b/typings/xterm.d.ts @@ -217,6 +217,7 @@ declare module 'xterm' { /** * Unicode version to be used for wcwidth. Default is version 6. + * New unicode versions can be registered through the `Terminal.unicode.register` API. */ unicodeVersion?: string; @@ -1173,7 +1174,7 @@ declare module 'xterm' { */ export interface IUnicodeVersionProvider { /** String indicating the Unicode version provided. */ - version: string; + readonly version: string; /** Unicode version dependent wcwidth implementation. */ wcwidth(codepoint: number): 0 | 1 | 2; } @@ -1189,6 +1190,11 @@ declare module 'xterm' { /** * Registered Unicode versions. */ - versions: string[]; + readonly versions: ReadonlyArray; + /** + * Getter/setter for activate Unicode version. + * FIXME: Should we go with this instead of get/SetOption? + */ + activeVersion: string; } }