From 9c7e2ea98e94c706d4d4f53d17ba7dbdc4710ba0 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Sun, 14 Jul 2024 08:17:16 -0700 Subject: [PATCH] Remove IEvent and runAndSubscribe --- addons/addon-canvas/src/Types.ts | 6 +-- src/browser/CoreBrowserTerminal.ts | 18 ++++----- src/browser/TestUtils.test.ts | 55 ++++++++++++++-------------- src/browser/Types.ts | 20 +++++----- src/browser/Viewport.ts | 7 ++-- src/browser/public/Terminal.ts | 26 ++++++------- src/browser/renderer/shared/Types.ts | 8 ++-- src/browser/services/Services.ts | 26 ++++++------- src/common/CoreTerminal.ts | 6 +-- src/common/EventEmitter.ts | 12 +----- src/common/TestUtils.test.ts | 21 +++++------ src/common/Types.ts | 13 +++---- src/common/buffer/Types.ts | 4 +- src/common/services/Services.ts | 25 ++++++------- src/headless/public/Terminal.ts | 20 +++++----- 15 files changed, 126 insertions(+), 141 deletions(-) diff --git a/addons/addon-canvas/src/Types.ts b/addons/addon-canvas/src/Types.ts index 73e6c836..9b06129e 100644 --- a/addons/addon-canvas/src/Types.ts +++ b/addons/addon-canvas/src/Types.ts @@ -4,8 +4,8 @@ */ import { IDisposable } from 'common/Types'; -import { IEvent } from 'common/EventEmitter'; import { IRenderDimensions } from 'browser/renderer/shared/Types'; +import type { Event } from 'vs/base/common/event'; export interface IRequestRedrawEvent { start: number; @@ -23,7 +23,7 @@ export interface IRenderer extends IDisposable { * Fires when the renderer is requesting to be redrawn on the next animation * frame but is _not_ a result of content changing (eg. selection changes). */ - readonly onRequestRedraw: IEvent; + readonly onRequestRedraw: Event; handleDevicePixelRatioChange(): void; handleResize(cols: number, rows: number): void; @@ -42,7 +42,7 @@ export interface IRenderLayer extends IDisposable { readonly canvas: HTMLCanvasElement; readonly cacheCanvas: HTMLCanvasElement; - readonly onAddTextureAtlasCanvas: IEvent; + readonly onAddTextureAtlasCanvas: Event; /** * Called when the terminal loses focus. */ diff --git a/src/browser/CoreBrowserTerminal.ts b/src/browser/CoreBrowserTerminal.ts index 4ebe988f..9504d511 100644 --- a/src/browser/CoreBrowserTerminal.ts +++ b/src/browser/CoreBrowserTerminal.ts @@ -44,7 +44,7 @@ import { ICharSizeService, ICharacterJoinerService, ICoreBrowserService, ILinkPr import { ThemeService } from 'browser/services/ThemeService'; import { channels, color } from 'common/Color'; import { CoreTerminal } from 'common/CoreTerminal'; -import { IEvent, forwardEvent } from 'common/EventEmitter'; +import { forwardEvent } from 'common/EventEmitter'; import { MutableDisposable, toDisposable } from 'common/Lifecycle'; import * as Browser from 'common/Platform'; import { ColorRequestType, CoreMouseAction, CoreMouseButton, CoreMouseEventType, IColorEvent, ITerminalOptions, KeyboardResultType, SpecialColorIndex } from 'common/Types'; @@ -58,7 +58,7 @@ import { IDecorationService } from 'common/services/Services'; import { WindowsOptionsReportType } from '../common/InputHandler'; import { AccessibilityManager } from './AccessibilityManager'; import { Linkifier } from './Linkifier'; -import { Emitter } from 'vs/base/common/event'; +import { Emitter, type Event } from 'vs/base/common/event'; export class CoreBrowserTerminal extends CoreTerminal implements ITerminal { public textarea: HTMLTextAreaElement | undefined; @@ -136,15 +136,15 @@ export class CoreBrowserTerminal extends CoreTerminal implements ITerminal { public readonly onBell = this._onBell.event; private _onFocus = this.register(new Emitter()); - public get onFocus(): IEvent { return this._onFocus.event; } + public get onFocus(): Event { return this._onFocus.event; } private _onBlur = this.register(new Emitter()); - public get onBlur(): IEvent { return this._onBlur.event; } + public get onBlur(): Event { return this._onBlur.event; } private _onA11yCharEmitter = this.register(new Emitter()); - public get onA11yChar(): IEvent { return this._onA11yCharEmitter.event; } + public get onA11yChar(): Event { return this._onA11yCharEmitter.event; } private _onA11yTabEmitter = this.register(new Emitter()); - public get onA11yTab(): IEvent { return this._onA11yTabEmitter.event; } + public get onA11yTab(): Event { return this._onA11yTabEmitter.event; } private _onWillOpen = this.register(new Emitter()); - public get onWillOpen(): IEvent { return this._onWillOpen.event; } + public get onWillOpen(): Event { return this._onWillOpen.event; } constructor( options: Partial = {} @@ -673,7 +673,7 @@ export class CoreBrowserTerminal extends CoreTerminal implements ITerminal { * Note: 'mousedown' currently is "always on" and not managed * by onProtocolChange. */ - const requestedEvents: { [key: string]: ((ev: Event) => void) | null } = { + const requestedEvents: { [key: string]: ((ev: MouseEvent | WheelEvent) => void) | null } = { mouseup: null, wheel: null, mousedrag: null, @@ -1293,7 +1293,7 @@ export class CoreBrowserTerminal extends CoreTerminal implements ITerminal { } // TODO: Remove cancel function and cancelEvents option - public cancel(ev: Event, force?: boolean): boolean | undefined { + public cancel(ev: MouseEvent | WheelEvent | KeyboardEvent | InputEvent, force?: boolean): boolean | undefined { if (!this.options.cancelEvents && !force) { return; } diff --git a/src/browser/TestUtils.test.ts b/src/browser/TestUtils.test.ts index 7c9d0b61..cf878cbc 100644 --- a/src/browser/TestUtils.test.ts +++ b/src/browser/TestUtils.test.ts @@ -4,7 +4,6 @@ */ import { IDisposable, IMarker, ILinkProvider, IDecorationOptions, IDecoration } from '@xterm/xterm'; -import { IEvent } from 'common/EventEmitter'; import { ICharacterJoinerService, ICharSizeService, ICoreBrowserService, IMouseService, IRenderService, ISelectionService, IThemeService } from 'browser/services/Services'; import { IRenderDimensions, IRenderer, IRequestRedrawEvent } from 'browser/renderer/shared/Types'; import { IColorSet, ITerminal, ILinkifier2, IBrowser, IViewport, ICompositionHelper, CharacterJoinerHandler, IBufferRange, ReadonlyColorSet, IBufferElementProvider } from 'browser/Types'; @@ -19,7 +18,7 @@ import { AttributeData } from 'common/buffer/AttributeData'; import { ISelectionRedrawRequestEvent, ISelectionRequestScrollLinesEvent } from 'browser/selection/Types'; import { css } from 'common/Color'; import { createRenderDimensions } from 'browser/renderer/shared/RendererUtils'; -import { Emitter } from 'vs/base/common/event'; +import { Emitter, type Event } from 'vs/base/common/event'; export class TestTerminal extends CoreBrowserTerminal { public get curAttrData(): IAttributeData { return (this as any)._inputHandler._curAttrData; } @@ -31,23 +30,23 @@ export class TestTerminal extends CoreBrowserTerminal { } export class MockTerminal implements ITerminal { - public onBlur!: IEvent; - public onFocus!: IEvent; - public onA11yChar!: IEvent; - public onWriteParsed!: IEvent; - public onA11yTab!: IEvent; - public onCursorMove!: IEvent; - public onLineFeed!: IEvent; - public onSelectionChange!: IEvent; - public onData!: IEvent; - public onBinary!: IEvent; - public onTitleChange!: IEvent; - public onBell!: IEvent; - public onScroll!: IEvent; - public onWillOpen!: IEvent; - public onKey!: IEvent<{ key: string, domEvent: KeyboardEvent }>; - public onRender!: IEvent<{ start: number, end: number }>; - public onResize!: IEvent<{ cols: number, rows: number }>; + public onBlur!: Event; + public onFocus!: Event; + public onA11yChar!: Event; + public onWriteParsed!: Event; + public onA11yTab!: Event; + public onCursorMove!: Event; + public onLineFeed!: Event; + public onSelectionChange!: Event; + public onData!: Event; + public onBinary!: Event; + public onTitleChange!: Event; + public onBell!: Event; + public onScroll!: Event; + public onWillOpen!: Event; + public onKey!: Event<{ key: string, domEvent: KeyboardEvent }>; + public onRender!: Event<{ start: number, end: number }>; + public onResize!: Event<{ cols: number, rows: number }>; public markers!: IMarker[]; public linkifier: ILinkifier2 | undefined; public coreMouseService!: ICoreMouseService; @@ -194,7 +193,7 @@ export class MockTerminal implements ITerminal { public scrollToRow(absoluteRow: number): number { throw new Error('Method not implemented.'); } - public cancel(ev: Event, force?: boolean): void { + public cancel(ev: MouseEvent | WheelEvent | KeyboardEvent | InputEvent, force?: boolean): void { throw new Error('Method not implemented.'); } public log(text: string): void { @@ -268,9 +267,9 @@ export class MockBuffer implements IBuffer { } export class MockRenderer implements IRenderer { - public onRequestRedraw!: IEvent; - public onCanvasResize!: IEvent<{ width: number, height: number }>; - public onRender!: IEvent<{ start: number, end: number }>; + public onRequestRedraw!: Event; + public onCanvasResize!: Event<{ width: number, height: number }>; + public onRender!: Event<{ start: number, end: number }>; public dispose(): void { throw new Error('Method not implemented.'); } @@ -373,7 +372,7 @@ export class MockCoreBrowserService implements ICoreBrowserService { export class MockCharSizeService implements ICharSizeService { public serviceBrand: undefined; public get hasValidSize(): boolean { return this.width > 0 && this.height > 0; } - public onCharSizeChange: IEvent = new Emitter().event; + public onCharSizeChange: Event = new Emitter().event; constructor(public width: number, public height: number) {} public measure(): void {} } @@ -391,10 +390,10 @@ export class MockMouseService implements IMouseService { export class MockRenderService implements IRenderService { public serviceBrand: undefined; - public onDimensionsChange: IEvent = new Emitter().event; - public onRenderedViewportChange: IEvent<{ start: number, end: number }, void> = new Emitter<{ start: number, end: number }>().event; - public onRender: IEvent<{ start: number, end: number }, void> = new Emitter<{ start: number, end: number }>().event; - public onRefreshRequest: IEvent<{ start: number, end: number}, void> = new Emitter<{ start: number, end: number }>().event; + public onDimensionsChange: Event = new Emitter().event; + public onRenderedViewportChange: Event<{ start: number, end: number }> = new Emitter<{ start: number, end: number }>().event; + public onRender: Event<{ start: number, end: number }> = new Emitter<{ start: number, end: number }>().event; + public onRefreshRequest: Event<{ start: number, end: number}> = new Emitter<{ start: number, end: number }>().event; public dimensions: IRenderDimensions = createRenderDimensions(); public refreshRows(start: number, end: number): void { throw new Error('Method not implemented.'); diff --git a/src/browser/Types.ts b/src/browser/Types.ts index 43e1f9e2..10e60411 100644 --- a/src/browser/Types.ts +++ b/src/browser/Types.ts @@ -3,11 +3,11 @@ * @license MIT */ -import { IEvent } from 'common/EventEmitter'; import { CharData, IColor, ICoreTerminal, ITerminalOptions } from 'common/Types'; import { IBuffer } from 'common/buffer/Types'; import { IDisposable, Terminal as ITerminalApi } from '@xterm/xterm'; import { channels, css } from 'common/Color'; +import type { Event } from 'vs/base/common/event'; /** * A portion of the public API that are implemented identially internally and simply passed through. @@ -21,13 +21,13 @@ export interface ITerminal extends InternalPassthroughApis, ICoreTerminal { linkifier: ILinkifier2 | undefined; options: Required; - onBlur: IEvent; - onFocus: IEvent; - onA11yChar: IEvent; - onA11yTab: IEvent; - onWillOpen: IEvent; + onBlur: Event; + onFocus: Event; + onA11yChar: Event; + onA11yTab: Event; + onWillOpen: Event; - cancel(ev: Event, force?: boolean): boolean | void; + cancel(ev: MouseEvent | WheelEvent | KeyboardEvent | InputEvent, force?: boolean): boolean | void; } export type CustomKeyEventHandler = (event: KeyboardEvent) => boolean; @@ -98,7 +98,7 @@ export interface IPartialColorSet { export interface IViewport extends IDisposable { scrollBarWidth: number; - readonly onRequestScrollLines: IEvent<{ amount: number, suppressScrollEvent: boolean }>; + readonly onRequestScrollLines: Event<{ amount: number, suppressScrollEvent: boolean }>; syncScrollArea(immediate?: boolean, force?: boolean): void; getLinesScrolled(ev: WheelEvent): number; getBufferElements(startLine: number, endLine?: number): { bufferElements: HTMLElement[], cursorElement?: HTMLElement }; @@ -128,8 +128,8 @@ export interface ILinkWithState { } export interface ILinkifier2 extends IDisposable { - onShowLinkUnderline: IEvent; - onHideLinkUnderline: IEvent; + onShowLinkUnderline: Event; + onHideLinkUnderline: Event; readonly currentLink: ILinkWithState | undefined; } diff --git a/src/browser/Viewport.ts b/src/browser/Viewport.ts index 2e4db12c..221420a2 100644 --- a/src/browser/Viewport.ts +++ b/src/browser/Viewport.ts @@ -5,14 +5,13 @@ import { ICoreBrowserService, IRenderService, IThemeService } from 'browser/services/Services'; import { ViewportConstants } from 'browser/shared/Constants'; -import { runAndSubscribe } from 'common/EventEmitter'; import { Disposable, toDisposable } from 'common/Lifecycle'; import { IBufferService, ICoreMouseService, IOptionsService } from 'common/services/Services'; import { CoreMouseEventType } from 'common/Types'; import { scheduleAtNextAnimationFrame } from 'vs/base/browser/dom'; import { SmoothScrollableElement } from 'vs/base/browser/ui/scrollbar/scrollableElement'; import type { ScrollableElementChangeOptions } from 'vs/base/browser/ui/scrollbar/scrollableElementOptions'; -import { Emitter } from 'vs/base/common/event'; +import { Emitter, Event } from 'vs/base/common/event'; import { Scrollable, ScrollbarVisibility, type ScrollEvent } from 'vs/base/common/scrollable'; export class Viewport extends Disposable { @@ -71,7 +70,7 @@ export class Viewport extends Disposable { })); this._scrollableElement.setScrollDimensions({ height: 0, scrollHeight: 0 }); - this.register(runAndSubscribe(themeService.onChangeColors, () => { + this.register(Event.runAndSubscribe(themeService.onChangeColors, () => { this._scrollableElement.getDomNode().style.backgroundColor = themeService.colors.background.css; })); element.appendChild(this._scrollableElement.getDomNode()); @@ -80,7 +79,7 @@ export class Viewport extends Disposable { this._styleElement = coreBrowserService.window.document.createElement('style'); screenElement.appendChild(this._styleElement); this.register(toDisposable(() => this._styleElement.remove())); - this.register(runAndSubscribe(themeService.onChangeColors, () => { + this.register(Event.runAndSubscribe(themeService.onChangeColors, () => { this._styleElement.textContent = [ `.xterm .xterm-scrollable-element > .scrollbar > .slider {`, ` background: ${themeService.colors.scrollbarSliderBackground.css};`, diff --git a/src/browser/public/Terminal.ts b/src/browser/public/Terminal.ts index 572bac04..d41b0883 100644 --- a/src/browser/public/Terminal.ts +++ b/src/browser/public/Terminal.ts @@ -6,7 +6,6 @@ import * as Strings from 'browser/LocalizableStrings'; import { CoreBrowserTerminal as TerminalCore } from 'browser/CoreBrowserTerminal'; import { IBufferRange, ITerminal } from 'browser/Types'; -import { IEvent } from 'common/EventEmitter'; import { Disposable } from 'common/Lifecycle'; import { ITerminalOptions } from 'common/Types'; import { AddonManager } from 'common/public/AddonManager'; @@ -14,6 +13,7 @@ import { BufferNamespaceApi } from 'common/public/BufferNamespaceApi'; import { ParserApi } from 'common/public/ParserApi'; import { UnicodeApi } from 'common/public/UnicodeApi'; import { IBufferNamespace as IBufferNamespaceApi, IDecoration, IDecorationOptions, IDisposable, ILinkProvider, ILocalizableStrings, IMarker, IModes, IParser, ITerminalAddon, Terminal as ITerminalApi, ITerminalInitOnlyOptions, IUnicodeHandling } from '@xterm/xterm'; +import type { Event } from 'vs/base/common/event'; /** * The set of options that only have an effect when set in the Terminal constructor. @@ -68,18 +68,18 @@ export class Terminal extends Disposable implements ITerminalApi { } } - public get onBell(): IEvent { return this._core.onBell; } - public get onBinary(): IEvent { return this._core.onBinary; } - public get onCursorMove(): IEvent { return this._core.onCursorMove; } - public get onData(): IEvent { return this._core.onData; } - public get onKey(): IEvent<{ key: string, domEvent: KeyboardEvent }> { return this._core.onKey; } - public get onLineFeed(): IEvent { return this._core.onLineFeed; } - public get onRender(): IEvent<{ start: number, end: number }> { return this._core.onRender; } - public get onResize(): IEvent<{ cols: number, rows: number }> { return this._core.onResize; } - public get onScroll(): IEvent { return this._core.onScroll; } - public get onSelectionChange(): IEvent { return this._core.onSelectionChange; } - public get onTitleChange(): IEvent { return this._core.onTitleChange; } - public get onWriteParsed(): IEvent { return this._core.onWriteParsed; } + public get onBell(): Event { return this._core.onBell; } + public get onBinary(): Event { return this._core.onBinary; } + public get onCursorMove(): Event { return this._core.onCursorMove; } + public get onData(): Event { return this._core.onData; } + public get onKey(): Event<{ key: string, domEvent: KeyboardEvent }> { return this._core.onKey; } + public get onLineFeed(): Event { return this._core.onLineFeed; } + public get onRender(): Event<{ start: number, end: number }> { return this._core.onRender; } + public get onResize(): Event<{ cols: number, rows: number }> { return this._core.onResize; } + public get onScroll(): Event { return this._core.onScroll; } + public get onSelectionChange(): Event { return this._core.onSelectionChange; } + public get onTitleChange(): Event { return this._core.onTitleChange; } + public get onWriteParsed(): Event { return this._core.onWriteParsed; } public get element(): HTMLElement | undefined { return this._core.element; } public get parser(): IParser { diff --git a/src/browser/renderer/shared/Types.ts b/src/browser/renderer/shared/Types.ts index c0d5e9d6..3b3c7659 100644 --- a/src/browser/renderer/shared/Types.ts +++ b/src/browser/renderer/shared/Types.ts @@ -6,7 +6,7 @@ import { FontWeight, Terminal } from '@xterm/xterm'; import { IColorSet, ITerminal } from 'browser/Types'; import { IDisposable } from 'common/Types'; -import { IEvent } from 'common/EventEmitter'; +import type { Event } from 'vs/base/common/event'; export interface ICharAtlasConfig { customGlyphs: boolean; @@ -71,7 +71,7 @@ export interface IRenderer extends IDisposable { * Fires when the renderer is requesting to be redrawn on the next animation * frame but is _not_ a result of content changing (eg. selection changes). */ - readonly onRequestRedraw: IEvent; + readonly onRequestRedraw: Event; dispose(): void; handleDevicePixelRatioChange(): void; @@ -89,8 +89,8 @@ export interface IRenderer extends IDisposable { export interface ITextureAtlas extends IDisposable { readonly pages: { canvas: HTMLCanvasElement, version: number }[]; - onAddTextureAtlasCanvas: IEvent; - onRemoveTextureAtlasCanvas: IEvent; + onAddTextureAtlasCanvas: Event; + onRemoveTextureAtlasCanvas: Event; /** * Warm up the texture atlas, adding common glyphs to avoid slowing early frame. diff --git a/src/browser/services/Services.ts b/src/browser/services/Services.ts index a82eabd0..19a8fcbc 100644 --- a/src/browser/services/Services.ts +++ b/src/browser/services/Services.ts @@ -3,12 +3,12 @@ * @license MIT */ -import { IEvent } from 'common/EventEmitter'; import { IRenderDimensions, IRenderer } from 'browser/renderer/shared/Types'; import { IColorSet, ILink, ReadonlyColorSet } from 'browser/Types'; import { ISelectionRedrawRequestEvent as ISelectionRequestRedrawEvent, ISelectionRequestScrollLinesEvent } from 'browser/selection/Types'; import { createDecorator } from 'common/services/ServiceRegistry'; import { AllColorIndex, IDisposable } from 'common/Types'; +import type { Event } from 'vs/base/common/event'; export const ICharSizeService = createDecorator('CharSizeService'); export interface ICharSizeService { @@ -18,7 +18,7 @@ export interface ICharSizeService { readonly height: number; readonly hasValidSize: boolean; - readonly onCharSizeChange: IEvent; + readonly onCharSizeChange: Event; measure(): void; } @@ -29,8 +29,8 @@ export interface ICoreBrowserService { readonly isFocused: boolean; - readonly onDprChange: IEvent; - readonly onWindowChange: IEvent; + readonly onDprChange: Event; + readonly onWindowChange: Event; /** * Gets or sets the parent window that the terminal is rendered into. DOM and rendering APIs (e.g. @@ -61,17 +61,17 @@ export const IRenderService = createDecorator('RenderService'); export interface IRenderService extends IDisposable { serviceBrand: undefined; - onDimensionsChange: IEvent; + onDimensionsChange: Event; /** * Fires when buffer changes are rendered. This does not fire when only cursor * or selections are rendered. */ - onRenderedViewportChange: IEvent<{ start: number, end: number }>; + onRenderedViewportChange: Event<{ start: number, end: number }>; /** * Fires on render */ - onRender: IEvent<{ start: number, end: number }>; - onRefreshRequest: IEvent<{ start: number, end: number }>; + onRender: Event<{ start: number, end: number }>; + onRefreshRequest: Event<{ start: number, end: number }>; dimensions: IRenderDimensions; @@ -101,10 +101,10 @@ export interface ISelectionService { readonly selectionStart: [number, number] | undefined; readonly selectionEnd: [number, number] | undefined; - readonly onLinuxMouseSelection: IEvent; - readonly onRequestRedraw: IEvent; - readonly onRequestScrollLines: IEvent; - readonly onSelectionChange: IEvent; + readonly onLinuxMouseSelection: Event; + readonly onRequestRedraw: Event; + readonly onRequestScrollLines: Event; + readonly onSelectionChange: Event; disable(): void; enable(): void; @@ -136,7 +136,7 @@ export interface IThemeService { readonly colors: ReadonlyColorSet; - readonly onChangeColors: IEvent; + readonly onChangeColors: Event; restoreColor(slot?: AllColorIndex): void; /** diff --git a/src/common/CoreTerminal.ts b/src/common/CoreTerminal.ts index 60b369d6..331b1b15 100644 --- a/src/common/CoreTerminal.ts +++ b/src/common/CoreTerminal.ts @@ -29,7 +29,7 @@ import { BufferService, MINIMUM_COLS, MINIMUM_ROWS } from 'common/services/Buffe import { OptionsService } from 'common/services/OptionsService'; import { IDisposable, IAttributeData, ICoreTerminal, IScrollEvent } from 'common/Types'; import { CoreService } from 'common/services/CoreService'; -import { IEvent, forwardEvent } from 'common/EventEmitter'; +import { forwardEvent } from 'common/EventEmitter'; import { CoreMouseService } from 'common/services/CoreMouseService'; import { UnicodeService } from 'common/services/UnicodeService'; import { CharsetService } from 'common/services/CharsetService'; @@ -39,7 +39,7 @@ import { IBufferSet } from 'common/buffer/Types'; import { InputHandler } from 'common/InputHandler'; import { WriteBuffer } from 'common/input/WriteBuffer'; import { OscLinkService } from 'common/services/OscLinkService'; -import { Emitter } from 'vs/base/common/event'; +import { Emitter, type Event } from 'vs/base/common/event'; // Only trigger this warning a single time per session let hasWriteSyncWarnHappened = false; @@ -77,7 +77,7 @@ export abstract class CoreTerminal extends Disposable implements ICoreTerminal { */ protected _onScrollApi?: Emitter; protected _onScroll = this.register(new Emitter()); - public get onScroll(): IEvent { + public get onScroll(): Event { if (!this._onScrollApi) { this._onScrollApi = this.register(new Emitter()); this._onScroll.event(ev => { diff --git a/src/common/EventEmitter.ts b/src/common/EventEmitter.ts index 64edd095..8505bf28 100644 --- a/src/common/EventEmitter.ts +++ b/src/common/EventEmitter.ts @@ -6,16 +6,6 @@ import { IDisposable } from 'common/Types'; import type { Emitter, Event } from 'vs/base/common/event'; -export interface IEvent { - (listener: (arg1: T, arg2: U) => any): IDisposable; -} - -export function forwardEvent(from: IEvent | Event, to: Emitter): IDisposable { +export function forwardEvent(from: Event, to: Emitter): IDisposable { return from(e => to.fire(e)); } - -/** @deprecated Use vs/base/common/events version */ -export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => any): IDisposable { - handler(undefined); - return event(e => handler(e)); -} diff --git a/src/common/TestUtils.test.ts b/src/common/TestUtils.test.ts index f21f3dec..8c9634db 100644 --- a/src/common/TestUtils.test.ts +++ b/src/common/TestUtils.test.ts @@ -5,7 +5,6 @@ import { IBufferService, ICoreService, ILogService, IOptionsService, ITerminalOptions, ICoreMouseService, ICharsetService, UnicodeCharProperties, UnicodeCharWidth, IUnicodeService, IUnicodeVersionProvider, LogLevelEnum, IDecorationService, IInternalDecoration, IOscLinkService } from 'common/services/Services'; import { UnicodeService } from 'common/services/UnicodeService'; -import { IEvent } from 'common/EventEmitter'; import { clone } from 'common/Clone'; import { DEFAULT_OPTIONS } from 'common/services/OptionsService'; import { IBufferSet, IBuffer } from 'common/buffer/Types'; @@ -13,14 +12,14 @@ import { BufferSet } from 'common/buffer/BufferSet'; import { IDecPrivateModes, ICoreMouseEvent, CoreMouseEventType, ICharset, IModes, IAttributeData, IOscLinkData, IDisposable } from 'common/Types'; import { UnicodeV6 } from 'common/input/UnicodeV6'; import { IDecorationOptions, IDecoration } from '@xterm/xterm'; -import { Emitter } from 'vs/base/common/event'; +import { Emitter, type Event } from 'vs/base/common/event'; export class MockBufferService implements IBufferService { public serviceBrand: any; public get buffer(): IBuffer { return this.buffers.active; } public buffers: IBufferSet = {} as any; - public onResize: IEvent<{ cols: number, rows: number }> = new Emitter<{ cols: number, rows: number }>().event; - public onScroll: IEvent = new Emitter().event; + public onResize: Event<{ cols: number, rows: number }> = new Emitter<{ cols: number, rows: number }>().event; + public onScroll: Event = new Emitter().event; public isUserScrolling: boolean = false; constructor( public cols: number, @@ -63,7 +62,7 @@ export class MockCoreMouseService implements ICoreMouseService { public addProtocol(name: string): void { } public reset(): void { } public triggerMouseEvent(event: ICoreMouseEvent): boolean { return false; } - public onProtocolChange: IEvent = new Emitter().event; + public onProtocolChange: Event = new Emitter().event; public explainEvents(events: CoreMouseEventType): { [event: string]: boolean } { throw new Error('Method not implemented.'); } @@ -95,10 +94,10 @@ export class MockCoreService implements ICoreService { sendFocus: false, wraparound: true }; - public onData: IEvent = new Emitter().event; - public onUserInput: IEvent = new Emitter().event; - public onBinary: IEvent = new Emitter().event; - public onRequestScrollToBottom: IEvent = new Emitter().event; + public onData: Event = new Emitter().event; + public onUserInput: Event = new Emitter().event; + public onBinary: Event = new Emitter().event; + public onRequestScrollToBottom: Event = new Emitter().event; public reset(): void { } public triggerDataEvent(data: string, wasUserInput?: boolean): void { } public triggerBinaryEvent(data: string): void { } @@ -118,7 +117,7 @@ export class MockOptionsService implements IOptionsService { public serviceBrand: any; public readonly rawOptions: Required = clone(DEFAULT_OPTIONS); public options: Required = this.rawOptions; - public onOptionChange: IEvent = new Emitter().event; + public onOptionChange: Event = new Emitter().event; constructor(testOptions?: Partial) { if (testOptions) { for (const key of Object.keys(testOptions)) { @@ -170,7 +169,7 @@ export class MockUnicodeService implements IUnicodeService { } public versions: string[] = []; public activeVersion: string = ''; - public onChange: IEvent = new Emitter().event; + public onChange: Event = new Emitter().event; public wcwidth = (codepoint: number): UnicodeCharWidth => this._provider.wcwidth(codepoint); public charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties { let width = this.wcwidth(codepoint); diff --git a/src/common/Types.ts b/src/common/Types.ts index ad1a8d3f..289aa1f6 100644 --- a/src/common/Types.ts +++ b/src/common/Types.ts @@ -4,13 +4,12 @@ */ import { IDeleteEvent, IInsertEvent } from 'common/CircularList'; -import { IEvent } from 'common/EventEmitter'; import { Attributes, UnderlineStyle } from 'common/buffer/Constants'; // eslint-disable-line no-unused-vars import { IBufferSet } from 'common/buffer/Types'; import { IParams } from 'common/parser/Types'; import { ICoreMouseService, ICoreService, IOptionsService, IUnicodeService } from 'common/services/Services'; import { IFunctionIdentifier, ITerminalOptions as IPublicTerminalOptions } from '@xterm/xterm'; -import type { Emitter } from 'vs/base/common/event'; +import type { Emitter, Event } from 'vs/base/common/event'; export interface ICoreTerminal { coreMouseService: ICoreMouseService; @@ -69,11 +68,11 @@ export interface ICircularList { isFull: boolean; onDeleteEmitter: Emitter; - onDelete: IEvent; + onDelete: Event; onInsertEmitter: Emitter; - onInsert: IEvent; + onInsert: Event; onTrimEmitter: Emitter; - onTrim: IEvent; + onTrim: Event; get(index: number): T | undefined; set(index: number, value: T): void; @@ -259,7 +258,7 @@ export interface IMarker extends IDisposable { readonly id: number; readonly isDisposed: boolean; readonly line: number; - onDispose: IEvent; + onDispose: Event; } export interface IModes { insertMode: boolean; @@ -447,7 +446,7 @@ export type IColorEvent = (IColorReportRequest | IColorSetRequest | IColorRestor * Calls the parser and handles actions generated by the parser. */ export interface IInputHandler { - onTitleChange: IEvent; + onTitleChange: Event; parse(data: string | Uint8Array, promiseResult?: boolean): void | Promise; print(data: Uint32Array, start: number, end: number): void; diff --git a/src/common/buffer/Types.ts b/src/common/buffer/Types.ts index 78f01d55..a59c0e17 100644 --- a/src/common/buffer/Types.ts +++ b/src/common/buffer/Types.ts @@ -4,7 +4,7 @@ */ import { IAttributeData, ICircularList, IBufferLine, ICellData, IMarker, ICharset, IDisposable } from 'common/Types'; -import { IEvent } from 'common/EventEmitter'; +import type { Event } from 'vs/base/common/event'; // BufferIndex denotes a position in the buffer: [rowIndex, colIndex] export type BufferIndex = [number, number]; @@ -42,7 +42,7 @@ export interface IBufferSet extends IDisposable { normal: IBuffer; active: IBuffer; - onBufferActivate: IEvent<{ activeBuffer: IBuffer, inactiveBuffer: IBuffer }>; + onBufferActivate: Event<{ activeBuffer: IBuffer, inactiveBuffer: IBuffer }>; activateNormalBuffer(): void; activateAltBuffer(fillAttr?: IAttributeData): void; diff --git a/src/common/services/Services.ts b/src/common/services/Services.ts index a98929e0..d677556c 100644 --- a/src/common/services/Services.ts +++ b/src/common/services/Services.ts @@ -4,11 +4,10 @@ */ import { IDecoration, IDecorationOptions, ILinkHandler, ILogger, IWindowsPty } from '@xterm/xterm'; -import { IEvent } from 'common/EventEmitter'; import { CoreMouseEncoding, CoreMouseEventType, CursorInactiveStyle, CursorStyle, IAttributeData, ICharset, IColor, ICoreMouseEvent, ICoreMouseProtocol, IDecPrivateModes, IDisposable, IModes, IOscLinkData, IWindowOptions } from 'common/Types'; import { IBuffer, IBufferSet } from 'common/buffer/Types'; import { createDecorator } from 'common/services/ServiceRegistry'; -import type { Emitter } from 'vs/base/common/event'; +import type { Emitter, Event } from 'vs/base/common/event'; export const IBufferService = createDecorator('BufferService'); export interface IBufferService { @@ -19,8 +18,8 @@ export interface IBufferService { readonly buffer: IBuffer; readonly buffers: IBufferSet; isUserScrolling: boolean; - onResize: IEvent<{ cols: number, rows: number }>; - onScroll: IEvent; + onResize: Event<{ cols: number, rows: number }>; + onScroll: Event; scroll(eraseAttr: IAttributeData, isWrapped?: boolean): void; scrollLines(disp: number, suppressScrollEvent?: boolean): void; resize(cols: number, rows: number): void; @@ -53,7 +52,7 @@ export interface ICoreMouseService { /** * Event to announce changes in mouse tracking. */ - onProtocolChange: IEvent; + onProtocolChange: Event; /** * Human readable version of mouse events. @@ -75,10 +74,10 @@ export interface ICoreService { readonly modes: IModes; readonly decPrivateModes: IDecPrivateModes; - readonly onData: IEvent; - readonly onUserInput: IEvent; - readonly onBinary: IEvent; - readonly onRequestScrollToBottom: IEvent; + readonly onData: Event; + readonly onUserInput: Event; + readonly onBinary: Event; + readonly onRequestScrollToBottom: Event; reset(): void; @@ -187,7 +186,7 @@ export interface IOptionsService { /** * Adds an event listener for when any option changes. */ - readonly onOptionChange: IEvent; + readonly onOptionChange: Event; /** * Adds an event listener for when a specific option changes, this is a convenience method that is @@ -339,7 +338,7 @@ export interface IUnicodeService { /** Currently active version. */ activeVersion: string; /** Event triggered, when activate version changed. */ - readonly onChange: IEvent; + readonly onChange: Event; /** * Unicode version dependent @@ -364,8 +363,8 @@ export const IDecorationService = createDecorator('Decoratio export interface IDecorationService extends IDisposable { serviceBrand: undefined; readonly decorations: IterableIterator; - readonly onDecorationRegistered: IEvent; - readonly onDecorationRemoved: IEvent; + readonly onDecorationRegistered: Event; + readonly onDecorationRemoved: Event; registerDecoration(decorationOptions: IDecorationOptions): IDecoration | undefined; reset(): void; /** diff --git a/src/headless/public/Terminal.ts b/src/headless/public/Terminal.ts index 1b39c184..c2d3bcb6 100644 --- a/src/headless/public/Terminal.ts +++ b/src/headless/public/Terminal.ts @@ -3,7 +3,6 @@ * @license MIT */ -import { IEvent } from 'common/EventEmitter'; import { BufferNamespaceApi } from 'common/public/BufferNamespaceApi'; import { ParserApi } from 'common/public/ParserApi'; import { UnicodeApi } from 'common/public/UnicodeApi'; @@ -12,6 +11,7 @@ import { Terminal as TerminalCore } from 'headless/Terminal'; import { AddonManager } from 'common/public/AddonManager'; import { ITerminalOptions } from 'common/Types'; import { Disposable } from 'common/Lifecycle'; +import type { Event } from 'vs/base/common/event'; /** * The set of options that only have an effect when set in the Terminal constructor. */ @@ -72,15 +72,15 @@ export class Terminal extends Disposable implements ITerminalApi { } } - public get onBell(): IEvent { return this._core.onBell; } - public get onBinary(): IEvent { return this._core.onBinary; } - public get onCursorMove(): IEvent { return this._core.onCursorMove; } - public get onData(): IEvent { return this._core.onData; } - public get onLineFeed(): IEvent { return this._core.onLineFeed; } - public get onResize(): IEvent<{ cols: number, rows: number }> { return this._core.onResize; } - public get onScroll(): IEvent { return this._core.onScroll; } - public get onTitleChange(): IEvent { return this._core.onTitleChange; } - public get onWriteParsed(): IEvent { return this._core.onWriteParsed; } + public get onBell(): Event { return this._core.onBell; } + public get onBinary(): Event { return this._core.onBinary; } + public get onCursorMove(): Event { return this._core.onCursorMove; } + public get onData(): Event { return this._core.onData; } + public get onLineFeed(): Event { return this._core.onLineFeed; } + public get onResize(): Event<{ cols: number, rows: number }> { return this._core.onResize; } + public get onScroll(): Event { return this._core.onScroll; } + public get onTitleChange(): Event { return this._core.onTitleChange; } + public get onWriteParsed(): Event { return this._core.onWriteParsed; } public get parser(): IParser { this._checkProposedApi();