2 * Copyright (c) 2018 The xterm.js authors. All rights reserved.
6 import { IEvent, IEventEmitter } from 'common/EventEmitter';
7 import { IDeleteEvent, IInsertEvent } from 'common/CircularList';
9 export interface IDisposable {
13 export type XtermListener = (...args: any[]) => void;
16 * A keyboard event interface which does not depend on the DOM, KeyboardEvent implicitly extends
19 export interface IKeyboardEvent {
29 export interface ICircularList<T> {
34 onDeleteEmitter: IEventEmitter<IDeleteEvent>;
35 onDelete: IEvent<IDeleteEvent>;
36 onInsertEmitter: IEventEmitter<IInsertEvent>;
37 onInsert: IEvent<IInsertEvent>;
38 onTrimEmitter: IEventEmitter<number>;
39 onTrim: IEvent<number>;
41 get(index: number): T | undefined;
42 set(index: number, value: T): void;
44 recycle(): T | undefined;
46 splice(start: number, deleteCount: number, ...items: T[]): void;
47 trimStart(count: number): void;
48 shiftElements(start: number, count: number, offset: number): void;
51 export const enum KeyboardResultType {
58 export interface IKeyboardResult {
59 type: KeyboardResultType;
61 key: string | undefined;
64 export interface ICharset {
65 [key: string]: string;
68 export type CharData = [number, string, number, number];
69 export type IColorRGB = [number, number, number];
72 export interface IAttributeData {
76 clone(): IAttributeData;
81 isUnderline(): number;
83 isInvisible(): number;
88 getFgColorMode(): number;
89 getBgColorMode(): number;
92 isFgPalette(): boolean;
93 isBgPalette(): boolean;
94 isFgDefault(): boolean;
95 isBgDefault(): boolean;
103 export interface ICellData extends IAttributeData {
105 combinedData: string;
106 isCombined(): number;
110 setFromCharData(value: CharData): void;
111 getAsCharData(): CharData;
115 * Interface for a line in the terminal buffer.
117 export interface IBufferLine {
120 get(index: number): CharData;
121 set(index: number, value: CharData): void;
122 loadCell(index: number, cell: ICellData): ICellData;
123 setCell(index: number, cell: ICellData): void;
124 setCellFromCodePoint(index: number, codePoint: number, width: number, fg: number, bg: number): void;
125 addCodepointToCell(index: number, codePoint: number): void;
126 insertCells(pos: number, n: number, ch: ICellData): void;
127 deleteCells(pos: number, n: number, fill: ICellData): void;
128 replaceCells(start: number, end: number, fill: ICellData): void;
129 resize(cols: number, fill: ICellData): void;
130 fill(fillCellData: ICellData): void;
131 copyFrom(line: IBufferLine): void;
132 clone(): IBufferLine;
133 getTrimmedLength(): number;
134 translateToString(trimRight?: boolean, startCol?: number, endCol?: number): string;
136 /* direct access to cell attrs */
137 getWidth(index: number): number;
138 hasWidth(index: number): number;
139 getFg(index: number): number;
140 getBg(index: number): number;
141 hasContent(index: number): number;
142 getCodePoint(index: number): number;
143 isCombined(index: number): number;
144 getString(index: number): string;
147 export interface IMarker extends IDisposable {
149 readonly isDisposed: boolean;
150 readonly line: number;
153 export interface IDecPrivateModes {
154 applicationCursorKeys: boolean;
157 export interface IRowRange {
163 * Interface for mouse events in the core.
165 export const enum CoreMouseButton {
171 // additional buttons 1..8
183 export const enum CoreMouseAction {
184 UP = 0, // buttons, wheel
185 DOWN = 1, // buttons, wheel
186 LEFT = 2, // wheel only
187 RIGHT = 3, // wheel only
188 MOVE = 32 // buttons only
191 export interface ICoreMouseEvent {
192 /** column (zero based). */
194 /** row (zero based). */
197 * Button the action occured. Due to restrictions of the tracking protocols
198 * it is not possible to report multiple buttons at once.
199 * Wheel is treated as a button.
200 * There are invalid combinations of buttons and actions possible
201 * (like move + wheel), those are silently ignored by the CoreMouseService.
203 button: CoreMouseButton;
204 action: CoreMouseAction;
207 * Protocols will add/ignore those based on specific restrictions.
216 * To be reported to the browser component which events a mouse
217 * protocol wants to be catched and forwarded as an ICoreMouseEvent
218 * to CoreMouseService.
220 export const enum CoreMouseEventType {
222 /** any mousedown event */
224 /** any mouseup event */
226 /** any mousemove event while a button is held */
228 /** any mousemove event without a button */
230 /** any wheel event */
235 * Mouse protocol interface.
236 * A mouse protocol can be registered and activated at the CoreMouseService.
237 * `events` should contain a list of needed events as a hint for the browser component
238 * to install/remove the appropriate event handlers.
239 * `restrict` applies further protocol specific restrictions like not allowed
240 * modifiers or filtering invalid event types.
242 export interface ICoreMouseProtocol {
243 events: CoreMouseEventType;
244 restrict: (e: ICoreMouseEvent) => boolean;
249 * The tracking encoding can be registered and activated at the CoreMouseService.
250 * If a ICoreMouseEvent passes all procotol restrictions it will be encoded
251 * with the active encoding and sent out.
253 export type CoreMouseEncoding = (event: ICoreMouseEvent) => string;