X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=src%2FInterfaces.ts;h=f55719a0a15d4718bc99e5d6ec89e59d6d0be2fa;hb=HEAD;hp=92094c9553a820042d8a16bb0d7d8e5292adab45;hpb=a14a0834e9326fdca50a402b80cd4e6aa2bbb881;p=mirror_xterm.js.git diff --git a/src/Interfaces.ts b/src/Interfaces.ts index 92094c9..f55719a 100644 --- a/src/Interfaces.ts +++ b/src/Interfaces.ts @@ -2,6 +2,9 @@ * @license MIT */ +import { LinkMatcherOptions } from './Interfaces'; +import { LinkMatcherHandler, LinkMatcherValidationCallback } from './Types'; + export interface IBrowser { isNode: boolean; userAgent: string; @@ -17,10 +20,10 @@ export interface IBrowser { export interface ITerminal { element: HTMLElement; rowContainer: HTMLElement; + selectionContainer: HTMLElement; + selectionManager: ISelectionManager; + charMeasure: ICharMeasure; textarea: HTMLTextAreaElement; - ybase: number; - ydisp: number; - lines: ICircularList; rows: number; cols: number; browser: IBrowser; @@ -28,9 +31,10 @@ export interface ITerminal { children: HTMLElement[]; cursorHidden: boolean; cursorState: number; - x: number; - y: number; defAttr: number; + scrollback: number; + buffers: IBufferSet; + buffer: IBuffer; /** * Emit the 'data' event and populate the given data. @@ -42,6 +46,35 @@ export interface ITerminal { cancel(ev: Event, force?: boolean); log(text: string): void; emit(event: string, data: any); + reset(): void; + showCursor(): void; + blankLine(cur?: boolean, isWrapped?: boolean, cols?: number); +} + +export interface IBuffer { + lines: ICircularList<[number, string, number][]>; + ydisp: number; + ybase: number; + y: number; + x: number; + tabs: any; +} + +export interface IBufferSet { + alt: IBuffer; + normal: IBuffer; + active: IBuffer; + + activateNormalBuffer(): void; + activateAltBuffer(): void; +} + +export interface ISelectionManager { + selectionText: string; + selectionStart: [number, number]; + selectionEnd: [number, number]; + + setSelection(row: number, col: number, length: number); } export interface ICharMeasure { @@ -50,11 +83,18 @@ export interface ICharMeasure { measure(): void; } -interface ICircularList { +export interface ILinkifier { + linkifyRow(rowIndex: number): void; + attachHypertextLinkHandler(handler: LinkMatcherHandler): void; + registerLinkMatcher(regex: RegExp, handler: LinkMatcherHandler, options?: LinkMatcherOptions): number; + deregisterLinkMatcher(matcherId: number): boolean; +} + +export interface ICircularList extends IEventEmitter { length: number; maxLength: number; + forEach: (callbackfn: (value: T, index: number) => void) => void; - forEach(callbackfn: (value: T, index: number, array: T[]) => void): void; get(index: number): T; set(index: number, value: T): void; push(value: T): void; @@ -64,6 +104,30 @@ interface ICircularList { shiftElements(start: number, count: number, offset: number): void; } +export interface IEventEmitter { + on(type, listener): void; + off(type, listener): void; +} + +export interface LinkMatcherOptions { + /** + * The index of the link from the regex.match(text) call. This defaults to 0 + * (for regular expressions without capture groups). + */ + matchIndex?: number; + /** + * A callback that validates an individual link, returning true if valid and + * false if invalid. + */ + validationCallback?: LinkMatcherValidationCallback; + /** + * The priority of the link matcher, this defines the order in which the link + * matcher is evaluated relative to others, from highest to lowest. The + * default value is 0. + */ + priority?: number; +} + /** * Handles actions generated by the parser. */