UNPKG

xterm

Version:

Full xterm terminal, in your browser

254 lines (225 loc) • 6.41 kB
/** * Copyright (c) 2018 The xterm.js authors. All rights reserved. * @license MIT */ import { IEvent, IEventEmitter } from 'common/EventEmitter'; import { IDeleteEvent, IInsertEvent } from 'common/CircularList'; export interface IDisposable { dispose(): void; } export type XtermListener = (...args: any[]) => void; /** * A keyboard event interface which does not depend on the DOM, KeyboardEvent implicitly extends * this event. */ export interface IKeyboardEvent { altKey: boolean; ctrlKey: boolean; shiftKey: boolean; metaKey: boolean; keyCode: number; key: string; type: string; } export interface ICircularList<T> { length: number; maxLength: number; isFull: boolean; onDeleteEmitter: IEventEmitter<IDeleteEvent>; onDelete: IEvent<IDeleteEvent>; onInsertEmitter: IEventEmitter<IInsertEvent>; onInsert: IEvent<IInsertEvent>; onTrimEmitter: IEventEmitter<number>; onTrim: IEvent<number>; get(index: number): T | undefined; set(index: number, value: T): void; push(value: T): void; recycle(): T | undefined; pop(): T | undefined; splice(start: number, deleteCount: number, ...items: T[]): void; trimStart(count: number): void; shiftElements(start: number, count: number, offset: number): void; } export const enum KeyboardResultType { SEND_KEY, SELECT_ALL, PAGE_UP, PAGE_DOWN } export interface IKeyboardResult { type: KeyboardResultType; cancel: boolean; key: string | undefined; } export interface ICharset { [key: string]: string; } export type CharData = [number, string, number, number]; export type IColorRGB = [number, number, number]; /** Attribute data */ export interface IAttributeData { fg: number; bg: number; clone(): IAttributeData; // flags isInverse(): number; isBold(): number; isUnderline(): number; isBlink(): number; isInvisible(): number; isItalic(): number; isDim(): number; // color modes getFgColorMode(): number; getBgColorMode(): number; isFgRGB(): boolean; isBgRGB(): boolean; isFgPalette(): boolean; isBgPalette(): boolean; isFgDefault(): boolean; isBgDefault(): boolean; // colors getFgColor(): number; getBgColor(): number; } /** Cell data */ export interface ICellData extends IAttributeData { content: number; combinedData: string; isCombined(): number; getWidth(): number; getChars(): string; getCode(): number; setFromCharData(value: CharData): void; getAsCharData(): CharData; } /** * Interface for a line in the terminal buffer. */ export interface IBufferLine { length: number; isWrapped: boolean; get(index: number): CharData; set(index: number, value: CharData): void; loadCell(index: number, cell: ICellData): ICellData; setCell(index: number, cell: ICellData): void; setCellFromCodePoint(index: number, codePoint: number, width: number, fg: number, bg: number): void; addCodepointToCell(index: number, codePoint: number): void; insertCells(pos: number, n: number, ch: ICellData): void; deleteCells(pos: number, n: number, fill: ICellData): void; replaceCells(start: number, end: number, fill: ICellData): void; resize(cols: number, fill: ICellData): void; fill(fillCellData: ICellData): void; copyFrom(line: IBufferLine): void; clone(): IBufferLine; getTrimmedLength(): number; translateToString(trimRight?: boolean, startCol?: number, endCol?: number): string; /* direct access to cell attrs */ getWidth(index: number): number; hasWidth(index: number): number; getFg(index: number): number; getBg(index: number): number; hasContent(index: number): number; getCodePoint(index: number): number; isCombined(index: number): number; getString(index: number): string; } export interface IMarker extends IDisposable { readonly id: number; readonly isDisposed: boolean; readonly line: number; } export interface IDecPrivateModes { applicationCursorKeys: boolean; } export interface IRowRange { start: number; end: number; } /** * Interface for mouse events in the core. */ export const enum CoreMouseButton { LEFT = 0, MIDDLE = 1, RIGHT = 2, NONE = 3, WHEEL = 4, // additional buttons 1..8 // untested! AUX1 = 8, AUX2 = 9, AUX3 = 10, AUX4 = 11, AUX5 = 12, AUX6 = 13, AUX7 = 14, AUX8 = 15 } export const enum CoreMouseAction { UP = 0, // buttons, wheel DOWN = 1, // buttons, wheel LEFT = 2, // wheel only RIGHT = 3, // wheel only MOVE = 32 // buttons only } export interface ICoreMouseEvent { /** column (zero based). */ col: number; /** row (zero based). */ row: number; /** * Button the action occured. Due to restrictions of the tracking protocols * it is not possible to report multiple buttons at once. * Wheel is treated as a button. * There are invalid combinations of buttons and actions possible * (like move + wheel), those are silently ignored by the CoreMouseService. */ button: CoreMouseButton; action: CoreMouseAction; /** * Modifier states. * Protocols will add/ignore those based on specific restrictions. */ ctrl?: boolean; alt?: boolean; shift?: boolean; } /** * CoreMouseEventType * To be reported to the browser component which events a mouse * protocol wants to be catched and forwarded as an ICoreMouseEvent * to CoreMouseService. */ export const enum CoreMouseEventType { NONE = 0, /** any mousedown event */ DOWN = 1, /** any mouseup event */ UP = 2, /** any mousemove event while a button is held */ DRAG = 4, /** any mousemove event without a button */ MOVE = 8, /** any wheel event */ WHEEL = 16 } /** * Mouse protocol interface. * A mouse protocol can be registered and activated at the CoreMouseService. * `events` should contain a list of needed events as a hint for the browser component * to install/remove the appropriate event handlers. * `restrict` applies further protocol specific restrictions like not allowed * modifiers or filtering invalid event types. */ export interface ICoreMouseProtocol { events: CoreMouseEventType; restrict: (e: ICoreMouseEvent) => boolean; } /** * CoreMouseEncoding * The tracking encoding can be registered and activated at the CoreMouseService. * If a ICoreMouseEvent passes all procotol restrictions it will be encoded * with the active encoding and sent out. */ export type CoreMouseEncoding = (event: ICoreMouseEvent) => string;