--- /dev/null
+/**
+ * Copyright (c) 2017 The xterm.js authors. All rights reserved.
+ * @license MIT
+ */
+
+import { ITerminalOptions as IPublicTerminalOptions, IDisposable, IMarker, ISelectionPosition } from 'xterm';
+import { ICharset, IAttributeData, CharData, CoreMouseEventType } from 'common/Types';
+import { IEvent, IEventEmitter } from 'common/EventEmitter';
+import { IColorSet, ILinkifier, ILinkMatcherOptions, IViewport } from 'browser/Types';
+import { IOptionsService } from 'common/services/Services';
+import { IBuffer, IBufferSet } from 'common/buffer/Types';
+import { IParams, IFunctionIdentifier } from 'common/parser/Types';
+
+export type CustomKeyEventHandler = (event: KeyboardEvent) => boolean;
+
+export type LineData = CharData[];
+
+/**
+ * This interface encapsulates everything needed from the Terminal by the
+ * InputHandler. This cleanly separates the large amount of methods needed by
+ * InputHandler cleanly from the ITerminal interface.
+ */
+export interface IInputHandlingTerminal {
+ element: HTMLElement;
+ options: ITerminalOptions;
+ cols: number;
+ rows: number;
+ charset: ICharset;
+ gcharset: number;
+ glevel: number;
+ charsets: ICharset[];
+ applicationKeypad: boolean;
+ originMode: boolean;
+ insertMode: boolean;
+ wraparoundMode: boolean;
+ bracketedPasteMode: boolean;
+ curAttrData: IAttributeData;
+ savedCols: number;
+ mouseEvents: CoreMouseEventType;
+ sendFocus: boolean;
+ cursorHidden: boolean;
+
+ buffers: IBufferSet;
+ buffer: IBuffer;
+ viewport: IViewport;
+
+ onA11yCharEmitter: IEventEmitter<string>;
+ onA11yTabEmitter: IEventEmitter<number>;
+
+ bell(): void;
+ focus(): void;
+ scroll(isWrapped?: boolean): void;
+ setgLevel(g: number): void;
+ eraseAttrData(): IAttributeData;
+ is(term: string): boolean;
+ setgCharset(g: number, charset: ICharset): void;
+ resize(x: number, y: number): void;
+ reset(): void;
+ showCursor(): void;
+ refresh(start: number, end: number): void;
+ handleTitle(title: string): void;
+}
+
+export interface ICompositionHelper {
+ compositionstart(): void;
+ compositionupdate(ev: CompositionEvent): void;
+ compositionend(): void;
+ updateCompositionElements(dontRecurse?: boolean): void;
+ keydown(ev: KeyboardEvent): boolean;
+}
+
+/**
+ * Calls the parser and handles actions generated by the parser.
+ */
+export interface IInputHandler {
+ parse(data: string | Uint8Array): void;
+ print(data: Uint32Array, start: number, end: number): void;
+
+ /** C0 BEL */ bell(): void;
+ /** C0 LF */ lineFeed(): void;
+ /** C0 CR */ carriageReturn(): void;
+ /** C0 BS */ backspace(): void;
+ /** C0 HT */ tab(): void;
+ /** C0 SO */ shiftOut(): void;
+ /** C0 SI */ shiftIn(): void;
+
+ /** CSI @ */ insertChars(params: IParams): void;
+ /** CSI SP @ */ scrollLeft(params: IParams): void;
+ /** CSI A */ cursorUp(params: IParams): void;
+ /** CSI SP A */ scrollRight(params: IParams): void;
+ /** CSI B */ cursorDown(params: IParams): void;
+ /** CSI C */ cursorForward(params: IParams): void;
+ /** CSI D */ cursorBackward(params: IParams): void;
+ /** CSI E */ cursorNextLine(params: IParams): void;
+ /** CSI F */ cursorPrecedingLine(params: IParams): void;
+ /** CSI G */ cursorCharAbsolute(params: IParams): void;
+ /** CSI H */ cursorPosition(params: IParams): void;
+ /** CSI I */ cursorForwardTab(params: IParams): void;
+ /** CSI J */ eraseInDisplay(params: IParams): void;
+ /** CSI K */ eraseInLine(params: IParams): void;
+ /** CSI L */ insertLines(params: IParams): void;
+ /** CSI M */ deleteLines(params: IParams): void;
+ /** CSI P */ deleteChars(params: IParams): void;
+ /** CSI S */ scrollUp(params: IParams): void;
+ /** CSI T */ scrollDown(params: IParams, collect?: string): void;
+ /** CSI X */ eraseChars(params: IParams): void;
+ /** CSI Z */ cursorBackwardTab(params: IParams): void;
+ /** CSI ` */ charPosAbsolute(params: IParams): void;
+ /** CSI a */ hPositionRelative(params: IParams): void;
+ /** CSI b */ repeatPrecedingCharacter(params: IParams): void;
+ /** CSI c */ sendDeviceAttributesPrimary(params: IParams): void;
+ /** CSI > c */ sendDeviceAttributesSecondary(params: IParams): void;
+ /** CSI d */ linePosAbsolute(params: IParams): void;
+ /** CSI e */ vPositionRelative(params: IParams): void;
+ /** CSI f */ hVPosition(params: IParams): void;
+ /** CSI g */ tabClear(params: IParams): void;
+ /** CSI h */ setMode(params: IParams, collect?: string): void;
+ /** CSI l */ resetMode(params: IParams, collect?: string): void;
+ /** CSI m */ charAttributes(params: IParams): void;
+ /** CSI n */ deviceStatus(params: IParams, collect?: string): void;
+ /** CSI p */ softReset(params: IParams, collect?: string): void;
+ /** CSI q */ setCursorStyle(params: IParams, collect?: string): void;
+ /** CSI r */ setScrollRegion(params: IParams, collect?: string): void;
+ /** CSI s */ saveCursor(params: IParams): void;
+ /** CSI u */ restoreCursor(params: IParams): void;
+ /** CSI ' } */ insertColumns(params: IParams): void;
+ /** CSI ' ~ */ deleteColumns(params: IParams): void;
+ /** OSC 0
+ OSC 2 */ setTitle(data: string): void;
+ /** ESC E */ nextLine(): void;
+ /** ESC = */ keypadApplicationMode(): void;
+ /** ESC > */ keypadNumericMode(): void;
+ /** ESC % G
+ ESC % @ */ selectDefaultCharset(): void;
+ /** ESC ( C
+ ESC ) C
+ ESC * C
+ ESC + C
+ ESC - C
+ ESC . C
+ ESC / C */ selectCharset(collectAndFlag: string): void;
+ /** ESC D */ index(): void;
+ /** ESC H */ tabSet(): void;
+ /** ESC M */ reverseIndex(): void;
+ /** ESC c */ reset(): void;
+ /** ESC n
+ ESC o
+ ESC |
+ ESC }
+ ESC ~ */ setgLevel(level: number): void;
+ /** ESC # 8 */ screenAlignmentPattern(): void;
+}
+
+export interface ITerminal extends IPublicTerminal, IElementAccessor, IBufferAccessor, ILinkifierAccessor {
+ screenElement: HTMLElement;
+ browser: IBrowser;
+ cursorHidden: boolean;
+ cursorState: number;
+ buffer: IBuffer;
+ buffers: IBufferSet;
+ isFocused: boolean;
+ viewport: IViewport;
+ bracketedPasteMode: boolean;
+ optionsService: IOptionsService;
+ // TODO: We should remove options once components adopt optionsService
+ options: ITerminalOptions;
+
+ onBlur: IEvent<void>;
+ onFocus: IEvent<void>;
+ onA11yChar: IEvent<string>;
+ onA11yTab: IEvent<number>;
+
+ scrollLines(disp: number, suppressScrollEvent?: boolean): void;
+ cancel(ev: Event, force?: boolean): boolean | void;
+ showCursor(): void;
+}
+
+// Portions of the public API that are required by the internal Terminal
+export interface IPublicTerminal extends IDisposable {
+ textarea: HTMLTextAreaElement | undefined;
+ rows: number;
+ cols: number;
+ buffer: IBuffer;
+ markers: IMarker[];
+ onCursorMove: IEvent<void>;
+ onData: IEvent<string>;
+ onKey: IEvent<{ key: string, domEvent: KeyboardEvent }>;
+ onLineFeed: IEvent<void>;
+ onScroll: IEvent<number>;
+ onSelectionChange: IEvent<void>;
+ onRender: IEvent<{ start: number, end: number }>;
+ onResize: IEvent<{ cols: number, rows: number }>;
+ onTitleChange: IEvent<string>;
+ blur(): void;
+ focus(): void;
+ resize(columns: number, rows: number): void;
+ open(parent: HTMLElement): void;
+ attachCustomKeyEventHandler(customKeyEventHandler: (event: KeyboardEvent) => boolean): void;
+ addCsiHandler(id: IFunctionIdentifier, callback: (params: IParams) => boolean): IDisposable;
+ addDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: IParams) => boolean): IDisposable;
+ addEscHandler(id: IFunctionIdentifier, callback: () => boolean): IDisposable;
+ addOscHandler(ident: number, callback: (data: string) => boolean): IDisposable;
+ registerLinkMatcher(regex: RegExp, handler: (event: MouseEvent, uri: string) => void, options?: ILinkMatcherOptions): number;
+ deregisterLinkMatcher(matcherId: number): void;
+ registerCharacterJoiner(handler: (text: string) => [number, number][]): number;
+ deregisterCharacterJoiner(joinerId: number): void;
+ addMarker(cursorYOffset: number): IMarker;
+ hasSelection(): boolean;
+ getSelection(): string;
+ getSelectionPosition(): ISelectionPosition | undefined;
+ clearSelection(): void;
+ select(column: number, row: number, length: number): void;
+ selectAll(): void;
+ selectLines(start: number, end: number): void;
+ dispose(): void;
+ scrollLines(amount: number): void;
+ scrollPages(pageCount: number): void;
+ scrollToTop(): void;
+ scrollToBottom(): void;
+ scrollToLine(line: number): void;
+ clear(): void;
+ write(data: string | Uint8Array, callback?: () => void): void;
+ paste(data: string): void;
+ refresh(start: number, end: number): void;
+ reset(): void;
+}
+
+export interface IBufferAccessor {
+ buffer: IBuffer;
+}
+
+export interface IElementAccessor {
+ readonly element: HTMLElement | undefined;
+}
+
+export interface ILinkifierAccessor {
+ linkifier: ILinkifier;
+}
+
+// TODO: The options that are not in the public API should be reviewed
+export interface ITerminalOptions extends IPublicTerminalOptions {
+ [key: string]: any;
+ cancelEvents?: boolean;
+ convertEol?: boolean;
+ handler?: (data: string) => void;
+ screenKeys?: boolean;
+ termName?: string;
+ useFlowControl?: boolean;
+}
+
+export interface IBrowser {
+ isNode: boolean;
+ userAgent: string;
+ platform: string;
+ isFirefox: boolean;
+ isMac: boolean;
+ isIpad: boolean;
+ isIphone: boolean;
+ isWindows: boolean;
+}