xterm
[VSoRC/.git] / node_modules / xterm / src / common / Types.d.ts
1 /**
2  * Copyright (c) 2018 The xterm.js authors. All rights reserved.
3  * @license MIT
4  */
5
6 import { IEvent, IEventEmitter } from 'common/EventEmitter';
7 import { IDeleteEvent, IInsertEvent } from 'common/CircularList';
8
9 export interface IDisposable {
10   dispose(): void;
11 }
12
13 export type XtermListener = (...args: any[]) => void;
14
15 /**
16  * A keyboard event interface which does not depend on the DOM, KeyboardEvent implicitly extends
17  * this event.
18  */
19 export interface IKeyboardEvent {
20   altKey: boolean;
21   ctrlKey: boolean;
22   shiftKey: boolean;
23   metaKey: boolean;
24   keyCode: number;
25   key: string;
26   type: string;
27 }
28
29 export interface ICircularList<T> {
30   length: number;
31   maxLength: number;
32   isFull: boolean;
33
34   onDeleteEmitter: IEventEmitter<IDeleteEvent>;
35   onDelete: IEvent<IDeleteEvent>;
36   onInsertEmitter: IEventEmitter<IInsertEvent>;
37   onInsert: IEvent<IInsertEvent>;
38   onTrimEmitter: IEventEmitter<number>;
39   onTrim: IEvent<number>;
40
41   get(index: number): T | undefined;
42   set(index: number, value: T): void;
43   push(value: T): void;
44   recycle(): T | undefined;
45   pop(): 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;
49 }
50
51 export const enum KeyboardResultType {
52   SEND_KEY,
53   SELECT_ALL,
54   PAGE_UP,
55   PAGE_DOWN
56 }
57
58 export interface IKeyboardResult {
59   type: KeyboardResultType;
60   cancel: boolean;
61   key: string | undefined;
62 }
63
64 export interface ICharset {
65   [key: string]: string;
66 }
67
68 export type CharData = [number, string, number, number];
69 export type IColorRGB = [number, number, number];
70
71 /** Attribute data */
72 export interface IAttributeData {
73   fg: number;
74   bg: number;
75
76   clone(): IAttributeData;
77
78   // flags
79   isInverse(): number;
80   isBold(): number;
81   isUnderline(): number;
82   isBlink(): number;
83   isInvisible(): number;
84   isItalic(): number;
85   isDim(): number;
86
87   // color modes
88   getFgColorMode(): number;
89   getBgColorMode(): number;
90   isFgRGB(): boolean;
91   isBgRGB(): boolean;
92   isFgPalette(): boolean;
93   isBgPalette(): boolean;
94   isFgDefault(): boolean;
95   isBgDefault(): boolean;
96
97   // colors
98   getFgColor(): number;
99   getBgColor(): number;
100 }
101
102 /** Cell data */
103 export interface ICellData extends IAttributeData {
104   content: number;
105   combinedData: string;
106   isCombined(): number;
107   getWidth(): number;
108   getChars(): string;
109   getCode(): number;
110   setFromCharData(value: CharData): void;
111   getAsCharData(): CharData;
112 }
113
114 /**
115  * Interface for a line in the terminal buffer.
116  */
117 export interface IBufferLine {
118   length: number;
119   isWrapped: boolean;
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;
135
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;
145 }
146
147 export interface IMarker extends IDisposable {
148   readonly id: number;
149   readonly isDisposed: boolean;
150   readonly line: number;
151 }
152
153 export interface IDecPrivateModes {
154   applicationCursorKeys: boolean;
155 }
156
157 export interface IRowRange {
158   start: number;
159   end: number;
160 }
161
162 /**
163  * Interface for mouse events in the core.
164  */
165 export const enum CoreMouseButton {
166   LEFT = 0,
167   MIDDLE = 1,
168   RIGHT = 2,
169   NONE = 3,
170   WHEEL = 4,
171   // additional buttons 1..8
172   // untested!
173   AUX1 = 8,
174   AUX2 = 9,
175   AUX3 = 10,
176   AUX4 = 11,
177   AUX5 = 12,
178   AUX6 = 13,
179   AUX7 = 14,
180   AUX8 = 15
181 }
182
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
189 }
190
191 export interface ICoreMouseEvent {
192   /** column (zero based). */
193   col: number;
194   /** row (zero based). */
195   row: number;
196   /**
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.
202    */
203   button: CoreMouseButton;
204   action: CoreMouseAction;
205   /**
206    * Modifier states.
207    * Protocols will add/ignore those based on specific restrictions.
208    */
209   ctrl?: boolean;
210   alt?: boolean;
211   shift?: boolean;
212 }
213
214 /**
215  * CoreMouseEventType
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.
219  */
220 export const enum CoreMouseEventType {
221   NONE = 0,
222   /** any mousedown event */
223   DOWN = 1,
224   /** any mouseup event */
225   UP = 2,
226   /** any mousemove event while a button is held */
227   DRAG = 4,
228   /** any mousemove event without a button */
229   MOVE = 8,
230   /** any wheel event */
231   WHEEL = 16
232 }
233
234 /**
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.
241  */
242 export interface ICoreMouseProtocol {
243   events: CoreMouseEventType;
244   restrict: (e: ICoreMouseEvent) => boolean;
245 }
246
247 /**
248  * CoreMouseEncoding
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.
252  */
253 export type CoreMouseEncoding = (event: ICoreMouseEvent) => string;