--- /dev/null
+/**
+ * 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;