diff --git a/src/Buffer.test.ts b/src/Buffer.test.ts
index 210d2971..b2522d1c 100644
--- a/src/Buffer.test.ts
+++ b/src/Buffer.test.ts
@@ -4,7 +4,7 @@
*/
import { assert } from 'chai';
-import { ITerminal } from './Interfaces';
+import { ITerminal } from '../typings/xterm-internal';
import { Buffer } from './Buffer';
import { CircularList } from './utils/CircularList';
import { MockTerminal } from './utils/TestUtils.test';
diff --git a/src/Buffer.ts b/src/Buffer.ts
index 623c3854..f8610ea7 100644
--- a/src/Buffer.ts
+++ b/src/Buffer.ts
@@ -3,9 +3,8 @@
* @license MIT
*/
-import { ITerminal, IBuffer } from './Interfaces';
+import { ITerminal, IBuffer, LineData, CharData } from '../typings/xterm-internal';
import { CircularList } from './utils/CircularList';
-import { LineData, CharData } from './Types';
export const CHAR_DATA_ATTR_INDEX = 0;
export const CHAR_DATA_CHAR_INDEX = 1;
diff --git a/src/BufferSet.test.ts b/src/BufferSet.test.ts
index b9c1824d..921b5442 100644
--- a/src/BufferSet.test.ts
+++ b/src/BufferSet.test.ts
@@ -4,7 +4,7 @@
*/
import { assert } from 'chai';
-import { ITerminal } from './Interfaces';
+import { ITerminal } from '../typings/xterm-internal';
import { BufferSet } from './BufferSet';
import { Buffer } from './Buffer';
import { MockTerminal } from './utils/TestUtils.test';
diff --git a/src/BufferSet.ts b/src/BufferSet.ts
index e31d2278..eb6f4507 100644
--- a/src/BufferSet.ts
+++ b/src/BufferSet.ts
@@ -3,7 +3,7 @@
* @license MIT
*/
-import { ITerminal, IBufferSet } from './Interfaces';
+import { ITerminal, IBufferSet } from '../typings/xterm-internal';
import { Buffer } from './Buffer';
import { EventEmitter } from './EventEmitter';
diff --git a/src/CompositionHelper.ts b/src/CompositionHelper.ts
index e588be78..7c1888dd 100644
--- a/src/CompositionHelper.ts
+++ b/src/CompositionHelper.ts
@@ -3,7 +3,7 @@
* @license MIT
*/
-import { ITerminal } from './Interfaces';
+import { ITerminal } from '../typings/xterm-internal';
interface IPosition {
start: number;
diff --git a/src/InputHandler.ts b/src/InputHandler.ts
index 7d3a4d24..42b89543 100644
--- a/src/InputHandler.ts
+++ b/src/InputHandler.ts
@@ -4,10 +4,10 @@
* @license MIT
*/
-import { IInputHandler, ITerminal, IInputHandlingTerminal } from './Interfaces';
+import { CharData, ITerminal } from '../typings/xterm-internal';
+import { IInputHandler, IInputHandlingTerminal } from './Interfaces';
import { C0 } from './EscapeSequences';
import { DEFAULT_CHARSET } from './Charsets';
-import { CharData } from './Types';
import { CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX } from './Buffer';
import { FLAGS } from './renderer/Types';
import { wcwidth } from './CharWidth';
diff --git a/src/Interfaces.ts b/src/Interfaces.ts
index b5026df6..b639d5a3 100644
--- a/src/Interfaces.ts
+++ b/src/Interfaces.ts
@@ -3,64 +3,11 @@
* @license MIT
*/
-///
+import { IEventEmitter } from 'xterm';
+import { ITerminalOptions, ILinkMatcherOptions, IMouseZoneManager, LinkMatcherHandler, LinkMatcherValidationCallback, LineData, IColorSet, IRenderer, IBufferSet, IBuffer, ISelectionManager } from '../typings/xterm-internal';
+import { ICharset } from './Interfaces';
-import { Terminal as PublicTerminal, ITerminalOptions as IPublicTerminalOptions, IEventEmitter } from 'xterm';
-import { ICharset, ILinkMatcherOptions } from './Interfaces';
-import { LinkMatcherHandler, LinkMatcherValidationCallback, LineData } from './Types';
-import { IColorSet, IRenderer } from './renderer/Interfaces';
-import { IMouseZoneManager } from './input/Interfaces';
-export interface IBrowser {
- isNode: boolean;
- userAgent: string;
- platform: string;
- isFirefox: boolean;
- isMSIE: boolean;
- isMac: boolean;
- isIpad: boolean;
- isIphone: boolean;
- isMSWindows: boolean;
-}
-
-export interface IBufferAccessor {
- buffer: IBuffer;
-}
-
-export interface IElementAccessor {
- element: HTMLElement;
-}
-
-export interface ILinkifierAccessor {
- linkifier: ILinkifier;
-}
-
-export interface ITerminal extends PublicTerminal, ILinkifierAccessor, IBufferAccessor, IElementAccessor {
- selectionManager: ISelectionManager;
- charMeasure: ICharMeasure;
- renderer: IRenderer;
- browser: IBrowser;
- writeBuffer: string[];
- cursorHidden: boolean;
- cursorState: number;
- defAttr: number;
- options: ITerminalOptions;
- buffers: IBufferSet;
- isFocused: boolean;
- mouseHelper: IMouseHelper;
- bracketedPasteMode: boolean;
-
- /**
- * Emit the 'data' event and populate the given data.
- * @param data The data to populate in the event.
- */
- handler(data: string): void;
- scrollLines(disp: number, suppressScrollEvent?: boolean): void;
- cancel(ev: Event, force?: boolean): boolean | void;
- log(text: string): void;
- showCursor(): void;
- blankLine(cur?: boolean, isWrapped?: boolean, cols?: number): LineData;
-}
/**
* This interface encapsulates everything needed from the Terminal by the
@@ -125,48 +72,6 @@ export interface IInputHandlingTerminal extends IEventEmitter {
setOption(key: string, value: any): void;
}
-// TODO: The options that are not in the public API should be reviewed
-export interface ITerminalOptions extends IPublicTerminalOptions {
- cancelEvents?: boolean;
- convertEol?: boolean;
- debug?: boolean;
- handler?: (data: string) => void;
- screenKeys?: boolean;
- termName?: string;
- useFlowControl?: boolean;
-}
-
-export interface IBuffer {
- lines: ICircularList;
- ydisp: number;
- ybase: number;
- y: number;
- x: number;
- tabs: any;
- scrollBottom: number;
- scrollTop: number;
- savedY: number;
- savedX: number;
- isCursorInViewport: boolean;
- translateBufferLineToString(lineIndex: number, trimRight: boolean, startCol?: number, endCol?: number): string;
- nextStop(x?: number): number;
- prevStop(x?: number): number;
-}
-
-export interface IBufferSet {
- alt: IBuffer;
- normal: IBuffer;
- active: IBuffer;
-
- activateNormalBuffer(): void;
- activateAltBuffer(): void;
-}
-
-export interface IMouseHelper {
- getCoords(event: {pageX: number, pageY: number}, element: HTMLElement, charMeasure: ICharMeasure, lineHeight: number, colCount: number, rowCount: number, isSelection?: boolean): [number, number];
- getRawByteCoords(event: MouseEvent, element: HTMLElement, charMeasure: ICharMeasure, lineHeight: number, colCount: number, rowCount: number): { x: number, y: number };
-}
-
export interface IViewport {
syncScrollArea(): void;
onWheel(ev: WheelEvent): void;
@@ -175,17 +80,6 @@ export interface IViewport {
onThemeChanged(colors: IColorSet): void;
}
-export interface ISelectionManager {
- selectionText: string;
- selectionStart: [number, number];
- selectionEnd: [number, number];
-
- disable(): void;
- enable(): void;
- setBuffer(buffer: IBuffer): void;
- setSelection(row: number, col: number, length: number): void;
-}
-
export interface ICompositionHelper {
compositionstart(): void;
compositionupdate(ev: CompositionEvent): void;
@@ -194,62 +88,6 @@ export interface ICompositionHelper {
keydown(ev: KeyboardEvent): boolean;
}
-export interface ICharMeasure {
- width: number;
- height: number;
- measure(options: ITerminalOptions): void;
-}
-
-export interface ILinkifier extends IEventEmitter {
- attachToDom(mouseZoneManager: IMouseZoneManager): void;
- linkifyRows(start: number, end: number): void;
- setHypertextLinkHandler(handler: LinkMatcherHandler): void;
- setHypertextValidationCallback(callback: LinkMatcherValidationCallback): void;
- registerLinkMatcher(regex: RegExp, handler: LinkMatcherHandler, options?: ILinkMatcherOptions): number;
- deregisterLinkMatcher(matcherId: number): boolean;
-}
-
-export interface ICircularList extends IEventEmitter {
- length: number;
- maxLength: number;
- forEach: (callbackfn: (value: T, index: number) => void) => void;
-
- get(index: number): T;
- set(index: number, value: T): void;
- push(value: T): void;
- pop(): T;
- splice(start: number, deleteCount: number, ...items: T[]): void;
- trimStart(count: number): void;
- shiftElements(start: number, count: number, offset: number): void;
-}
-
-export interface ILinkMatcherOptions {
- /**
- * 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;
- /**
- * A callback that fires when the mouse hovers over a link.
- */
- tooltipCallback?: LinkMatcherHandler;
- /**
- * A callback that fires when the mouse leaves a link that was hovered.
- */
- leaveCallback?: () => void;
- /**
- * 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.
*/
@@ -302,30 +140,6 @@ export interface IInputHandler {
/** CSI u */ restoreCursor(params?: number[]): void;
}
-export interface ITheme {
- foreground?: string;
- background?: string;
- cursor?: string;
- cursorAccent?: string;
- selection?: string;
- black?: string;
- red?: string;
- green?: string;
- yellow?: string;
- blue?: string;
- magenta?: string;
- cyan?: string;
- white?: string;
- brightBlack?: string;
- brightRed?: string;
- brightGreen?: string;
- brightYellow?: string;
- brightBlue?: string;
- brightMagenta?: string;
- brightCyan?: string;
- brightWhite?: string;
-}
-
export interface ILinkMatcher {
id: number;
regex: RegExp;
diff --git a/src/Linkifier.test.ts b/src/Linkifier.test.ts
index 8b66dcaa..1a7c6047 100644
--- a/src/Linkifier.test.ts
+++ b/src/Linkifier.test.ts
@@ -4,10 +4,9 @@
*/
import { assert } from 'chai';
-import { ITerminal, ILinkifier, ILinkMatcher, IBuffer, IBufferAccessor, IElementAccessor } from './Interfaces';
+import { ITerminal, ILinkifier, IBuffer, IBufferAccessor, IElementAccessor, LineData, IMouseZoneManager, IMouseZone } from '../typings/xterm-internal';
+import { ILinkMatcher } from './Interfaces';
import { Linkifier } from './Linkifier';
-import { LineData } from './Types';
-import { IMouseZoneManager, IMouseZone } from './input/Interfaces';
import { MockBuffer } from './utils/TestUtils.test';
import { CircularList } from './utils/CircularList';
diff --git a/src/Linkifier.ts b/src/Linkifier.ts
index 76771930..5d601fce 100644
--- a/src/Linkifier.ts
+++ b/src/Linkifier.ts
@@ -3,9 +3,9 @@
* @license MIT
*/
-import { ILinkHoverEvent, ILinkMatcher, ILinkMatcherOptions, ITerminal, IBufferAccessor, ILinkifier, IElementAccessor } from './Interfaces';
-import { LinkMatcherHandler, LinkMatcherValidationCallback, LineData, LinkHoverEventTypes } from './Types';
-import { IMouseZoneManager } from './input/Interfaces';
+import { ILinkMatcherOptions, ITerminal, IBufferAccessor, ILinkifier, IElementAccessor, LinkMatcherHandler, LinkMatcherValidationCallback, LineData, IMouseZoneManager } from '../typings/xterm-internal';
+import { ILinkHoverEvent, ILinkMatcher } from './Interfaces';
+import { LinkHoverEventTypes } from './Types';
import { MouseZone } from './input/MouseZoneManager';
import { EventEmitter } from './EventEmitter';
diff --git a/src/SelectionManager.test.ts b/src/SelectionManager.test.ts
index a10dc669..08f2d981 100644
--- a/src/SelectionManager.test.ts
+++ b/src/SelectionManager.test.ts
@@ -4,15 +4,14 @@
*/
import jsdom = require('jsdom');
+import { ITerminal, ICircularList, IBuffer, LineData, CharData } from '../typings/xterm-internal';
import { assert } from 'chai';
-import { ITerminal, ICircularList, IBuffer } from './Interfaces';
import { CharMeasure } from './utils/CharMeasure';
import { CircularList } from './utils/CircularList';
import { SelectionManager } from './SelectionManager';
import { SelectionModel } from './SelectionModel';
import { BufferSet } from './BufferSet';
import { MockTerminal } from './utils/TestUtils.test';
-import { LineData, CharData } from './Types';
class TestMockTerminal extends MockTerminal {
emit(event: string, data: any): void {}
diff --git a/src/SelectionManager.ts b/src/SelectionManager.ts
index cd6fc996..5061fd9d 100644
--- a/src/SelectionManager.ts
+++ b/src/SelectionManager.ts
@@ -3,14 +3,13 @@
* @license MIT
*/
+import { ITerminal, ICircularList, ISelectionManager, IBuffer, LineData, CharData } from '../typings/xterm-internal';
import { MouseHelper } from './utils/MouseHelper';
import * as Browser from './utils/Browser';
import { CharMeasure } from './utils/CharMeasure';
import { CircularList } from './utils/CircularList';
import { EventEmitter } from './EventEmitter';
-import { ITerminal, ICircularList, ISelectionManager, IBuffer } from './Interfaces';
import { SelectionModel } from './SelectionModel';
-import { LineData, CharData } from './Types';
import { CHAR_DATA_WIDTH_INDEX, CHAR_DATA_CHAR_INDEX } from './Buffer';
/**
diff --git a/src/SelectionModel.test.ts b/src/SelectionModel.test.ts
index eda94718..b84fef5e 100644
--- a/src/SelectionModel.test.ts
+++ b/src/SelectionModel.test.ts
@@ -4,7 +4,7 @@
*/
import { assert } from 'chai';
-import { ITerminal } from './Interfaces';
+import { ITerminal } from '../typings/xterm-internal';
import { SelectionModel } from './SelectionModel';
import { BufferSet } from './BufferSet';
import { MockTerminal } from './utils/TestUtils.test';
diff --git a/src/SelectionModel.ts b/src/SelectionModel.ts
index 5982b1e9..1e0f816d 100644
--- a/src/SelectionModel.ts
+++ b/src/SelectionModel.ts
@@ -3,7 +3,7 @@
* @license MIT
*/
-import { ITerminal } from './Interfaces';
+import { ITerminal } from '../typings/xterm-internal';
/**
* Represents a selection within the buffer. This model only cares about column
diff --git a/src/Terminal.ts b/src/Terminal.ts
index b6637297..dbdd700b 100644
--- a/src/Terminal.ts
+++ b/src/Terminal.ts
@@ -21,6 +21,7 @@
* http://linux.die.net/man/7/urxvt
*/
+import { ITerminalOptions, ITerminal, IBrowser, IRenderer, ILinkifier, IMouseZoneManager, ITheme, LinkMatcherHandler, LinkMatcherValidationCallback, ILinkMatcherOptions, CharData, LineData } from '../typings/xterm-internal';
import { BufferSet } from './BufferSet';
import { Buffer, MAX_BUFFER_SIZE } from './Buffer';
import { CompositionHelper } from './CompositionHelper';
@@ -38,14 +39,12 @@ import { CharMeasure } from './utils/CharMeasure';
import * as Browser from './utils/Browser';
import { MouseHelper } from './utils/MouseHelper';
import { CHARSETS } from './Charsets';
-import { CustomKeyEventHandler, LinkMatcherHandler, LinkMatcherValidationCallback, CharData, LineData } from './Types';
-import { ITerminal, IBrowser, ICharset, ITerminalOptions, IInputHandlingTerminal, ILinkMatcherOptions, IViewport, ICompositionHelper, ITheme, ILinkifier } from './Interfaces';
+import { CustomKeyEventHandler } from './Types';
+import { ICharset, IInputHandlingTerminal, IViewport, ICompositionHelper } from './Interfaces';
import { BELL_SOUND } from './utils/Sounds';
import { DEFAULT_ANSI_COLORS } from './renderer/ColorManager';
-import { IMouseZoneManager } from './input/Interfaces';
import { MouseZoneManager } from './input/MouseZoneManager';
import { initialize as initializeCharAtlas } from './renderer/CharAtlas';
-import { IRenderer } from './renderer/Interfaces';
// Let it work inside Node.js for automated testing purposes.
const document = (typeof window !== 'undefined') ? window.document : null;
diff --git a/src/Types.ts b/src/Types.ts
index 3263282e..e112d6d9 100644
--- a/src/Types.ts
+++ b/src/Types.ts
@@ -3,14 +3,8 @@
* @license MIT
*/
-export type LinkMatcherHandler = (event: MouseEvent, uri: string) => boolean | void;
-export type LinkMatcherValidationCallback = (uri: string, callback: (isValid: boolean) => void) => void;
-
export type CustomKeyEventHandler = (event: KeyboardEvent) => boolean;
-export type CharData = [number, string, number, number];
-export type LineData = CharData[];
-
export enum LinkHoverEventTypes {
HOVER = 'linkhover',
TOOLTIP = 'linktooltip',
diff --git a/src/Viewport.ts b/src/Viewport.ts
index fcac68ad..147cc90e 100644
--- a/src/Viewport.ts
+++ b/src/Viewport.ts
@@ -3,9 +3,9 @@
* @license MIT
*/
-import { ITerminal, IViewport } from './Interfaces';
+import { ITerminal, IColorSet } from '../typings/xterm-internal';
+import { IViewport } from './Interfaces';
import { CharMeasure } from './utils/CharMeasure';
-import { IColorSet } from './renderer/Interfaces';
/**
* Represents the viewport of a terminal, the visible area within the larger buffer of output.
diff --git a/src/handlers/Clipboard.ts b/src/handlers/Clipboard.ts
index cf6661fe..1974ef88 100644
--- a/src/handlers/Clipboard.ts
+++ b/src/handlers/Clipboard.ts
@@ -3,7 +3,7 @@
* @license MIT
*/
-import { ITerminal, ISelectionManager } from '../Interfaces';
+import { ITerminal, ISelectionManager } from '../../typings/xterm-internal';
interface IWindow extends Window {
clipboardData?: {
diff --git a/src/input/Interfaces.ts b/src/input/Interfaces.ts
deleted file mode 100644
index 21514a53..00000000
--- a/src/input/Interfaces.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-/**
- * Copyright (c) 2017 The xterm.js authors. All rights reserved.
- * @license MIT
- */
-
-export interface IMouseZoneManager {
- add(zone: IMouseZone): void;
- clearAll(start?: number, end?: number): void;
-}
-
-export interface IMouseZone {
- x1: number;
- x2: number;
- y: number;
- clickCallback: (e: MouseEvent) => any;
- hoverCallback?: (e: MouseEvent) => any;
- tooltipCallback?: (e: MouseEvent) => any;
- leaveCallback?: () => any;
-}
diff --git a/src/input/MouseZoneManager.ts b/src/input/MouseZoneManager.ts
index 6fbe1c67..f9413e62 100644
--- a/src/input/MouseZoneManager.ts
+++ b/src/input/MouseZoneManager.ts
@@ -3,8 +3,7 @@
* @license MIT
*/
-import { IMouseZoneManager, IMouseZone } from './Interfaces';
-import { ITerminal } from '../Interfaces';
+import { IMouseZoneManager, IMouseZone, ITerminal } from '../../typings/xterm-internal';
const HOVER_DURATION = 500;
diff --git a/src/renderer/BaseRenderLayer.ts b/src/renderer/BaseRenderLayer.ts
index b4becbce..299d8b6f 100644
--- a/src/renderer/BaseRenderLayer.ts
+++ b/src/renderer/BaseRenderLayer.ts
@@ -3,10 +3,9 @@
* @license MIT
*/
-import { IRenderLayer, IColorSet, IRenderDimensions } from './Interfaces';
-import { ITerminal, ITerminalOptions } from '../Interfaces';
+import { IColorSet, IRenderDimensions, ITerminal, ITerminalOptions, CharData } from '../../typings/xterm-internal';
+import { IRenderLayer } from './Interfaces';
import { acquireCharAtlas, CHAR_ATLAS_CELL_SPACING } from './CharAtlas';
-import { CharData } from '../Types';
import { CHAR_DATA_WIDTH_INDEX, CHAR_DATA_CHAR_INDEX } from '../Buffer';
export const INVERTED_DEFAULT_COLOR = -1;
diff --git a/src/renderer/CharAtlas.ts b/src/renderer/CharAtlas.ts
index 9ac1e161..3a7886ff 100644
--- a/src/renderer/CharAtlas.ts
+++ b/src/renderer/CharAtlas.ts
@@ -3,8 +3,7 @@
* @license MIT
*/
-import { ITerminal, ITheme } from '../Interfaces';
-import { IColorSet } from '../renderer/Interfaces';
+import { ITerminal, ITheme, IColorSet } from '../../typings/xterm-internal';
import { isFirefox } from '../utils/Browser';
export const CHAR_ATLAS_CELL_SPACING = 1;
diff --git a/src/renderer/ColorManager.ts b/src/renderer/ColorManager.ts
index 6c0d2945..53fb165e 100644
--- a/src/renderer/ColorManager.ts
+++ b/src/renderer/ColorManager.ts
@@ -3,8 +3,7 @@
* @license MIT
*/
-import { IColorSet, IColorManager } from './Interfaces';
-import { ITheme } from '../Interfaces';
+import { IColorSet, IColorManager, ITheme } from '../../typings/xterm-internal';
const DEFAULT_FOREGROUND = '#ffffff';
const DEFAULT_BACKGROUND = '#000000';
diff --git a/src/renderer/CursorRenderLayer.ts b/src/renderer/CursorRenderLayer.ts
index 6ac489fc..f6bbc0a6 100644
--- a/src/renderer/CursorRenderLayer.ts
+++ b/src/renderer/CursorRenderLayer.ts
@@ -3,13 +3,12 @@
* @license MIT
*/
-import { IColorSet, IRenderDimensions } from './Interfaces';
-import { IBuffer, ICharMeasure, ITerminal, ITerminalOptions } from '../Interfaces';
+import { IColorSet, IRenderDimensions, IBuffer, ICharMeasure, ITerminal, ITerminalOptions, CharData } from '../../typings/xterm-internal';
import { CHAR_DATA_WIDTH_INDEX, CHAR_DATA_CODE_INDEX, CHAR_DATA_CHAR_INDEX } from '../Buffer';
import { GridCache } from './GridCache';
import { FLAGS } from './Types';
import { BaseRenderLayer } from './BaseRenderLayer';
-import { CharData } from '../Types';
+import { } from '../Types';
interface ICursorState {
x: number;
diff --git a/src/renderer/Interfaces.ts b/src/renderer/Interfaces.ts
index 2c07b3a9..d65c9d35 100644
--- a/src/renderer/Interfaces.ts
+++ b/src/renderer/Interfaces.ts
@@ -3,26 +3,10 @@
* @license MIT
*/
-import { ITerminal, ITerminalOptions, ITheme } from '../Interfaces';
+import { IColorSet, IRenderDimensions, ITerminal } from '../../typings/xterm-internal';
+
import { IEventEmitter } from 'xterm';
-export interface IRenderer extends IEventEmitter {
- dimensions: IRenderDimensions;
- colorManager: IColorManager;
-
- setTheme(theme: ITheme): IColorSet;
- onWindowResize(devicePixelRatio: number): void;
- onResize(cols: number, rows: number, didCharSizeChange: boolean): void;
- onCharSizeChanged(): void;
- onBlur(): void;
- onFocus(): void;
- onSelectionChanged(start: [number, number], end: [number, number]): void;
- onCursorMove(): void;
- onOptionsChanged(): void;
- clear(): void;
- queueRefresh(start: number, end: number): void;
-}
-
export interface IRenderLayer {
/**
* Called when the terminal loses focus.
@@ -70,31 +54,3 @@ export interface IRenderLayer {
*/
reset(terminal: ITerminal): void;
}
-
-export interface IColorManager {
- colors: IColorSet;
-}
-
-export interface IColorSet {
- foreground: string;
- background: string;
- cursor: string;
- cursorAccent: string;
- selection: string;
- ansi: string[];
-}
-
-export interface IRenderDimensions {
- scaledCharWidth: number;
- scaledCharHeight: number;
- scaledCellWidth: number;
- scaledCellHeight: number;
- scaledCharLeft: number;
- scaledCharTop: number;
- scaledCanvasWidth: number;
- scaledCanvasHeight: number;
- canvasWidth: number;
- canvasHeight: number;
- actualCellWidth: number;
- actualCellHeight: number;
-}
diff --git a/src/renderer/LinkRenderLayer.ts b/src/renderer/LinkRenderLayer.ts
index 87fbddbd..24bc89b4 100644
--- a/src/renderer/LinkRenderLayer.ts
+++ b/src/renderer/LinkRenderLayer.ts
@@ -3,8 +3,8 @@
* @license MIT
*/
-import { IColorSet, IRenderDimensions } from './Interfaces';
-import { IBuffer, ICharMeasure, ILinkHoverEvent, ITerminal, ILinkifierAccessor } from '../Interfaces';
+import { IColorSet, IRenderDimensions, ITerminal, ILinkifierAccessor, IBuffer, ICharMeasure } from '../../typings/xterm-internal';
+import { ILinkHoverEvent } from '../Interfaces';
import { CHAR_DATA_ATTR_INDEX } from '../Buffer';
import { GridCache } from './GridCache';
import { FLAGS } from './Types';
diff --git a/src/renderer/Renderer.ts b/src/renderer/Renderer.ts
index 680d9490..afeefe3d 100644
--- a/src/renderer/Renderer.ts
+++ b/src/renderer/Renderer.ts
@@ -3,14 +3,14 @@
* @license MIT
*/
-import { ITerminal, ITheme } from '../Interfaces';
+import { ITerminal, ITheme, IColorSet, IRenderer, IRenderDimensions } from '../../typings/xterm-internal';
import { CHAR_DATA_WIDTH_INDEX, CHAR_DATA_CHAR_INDEX } from '../Buffer';
import { TextRenderLayer } from './TextRenderLayer';
import { SelectionRenderLayer } from './SelectionRenderLayer';
import { CursorRenderLayer } from './CursorRenderLayer';
import { ColorManager } from './ColorManager';
import { BaseRenderLayer } from './BaseRenderLayer';
-import { IRenderLayer, IColorSet, IRenderer, IRenderDimensions } from './Interfaces';
+import { IRenderLayer } from './Interfaces';
import { LinkRenderLayer } from './LinkRenderLayer';
import { EventEmitter } from '../EventEmitter';
import { ScreenDprMonitor } from '../utils/ScreenDprMonitor';
diff --git a/src/renderer/SelectionRenderLayer.ts b/src/renderer/SelectionRenderLayer.ts
index 9740bb9a..033da76a 100644
--- a/src/renderer/SelectionRenderLayer.ts
+++ b/src/renderer/SelectionRenderLayer.ts
@@ -3,8 +3,7 @@
* @license MIT
*/
-import { IColorSet, IRenderDimensions } from './Interfaces';
-import { IBuffer, ICharMeasure, ITerminal } from '../Interfaces';
+import { IColorSet, IRenderDimensions, IBuffer, ICharMeasure, ITerminal } from '../../typings/xterm-internal';
import { CHAR_DATA_ATTR_INDEX } from '../Buffer';
import { GridCache } from './GridCache';
import { FLAGS } from './Types';
diff --git a/src/renderer/TextRenderLayer.ts b/src/renderer/TextRenderLayer.ts
index 99a6feae..f8d6a5bb 100644
--- a/src/renderer/TextRenderLayer.ts
+++ b/src/renderer/TextRenderLayer.ts
@@ -3,12 +3,10 @@
* @license MIT
*/
-import { IColorSet, IRenderDimensions } from './Interfaces';
-import { IBuffer, ICharMeasure, ITerminal } from '../Interfaces';
+import { IBuffer, ICharMeasure, ITerminal, IColorSet, IRenderDimensions, CharData } from '../../typings/xterm-internal';
import { CHAR_DATA_ATTR_INDEX, CHAR_DATA_CODE_INDEX, CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX } from '../Buffer';
import { FLAGS } from './Types';
import { GridCache } from './GridCache';
-import { CharData } from '../Types';
import { BaseRenderLayer, INVERTED_DEFAULT_COLOR } from './BaseRenderLayer';
/**
diff --git a/src/utils/CharMeasure.test.ts b/src/utils/CharMeasure.test.ts
index f50ce96b..a706ea3b 100644
--- a/src/utils/CharMeasure.test.ts
+++ b/src/utils/CharMeasure.test.ts
@@ -4,8 +4,8 @@
*/
import jsdom = require('jsdom');
+import { ICharMeasure, ITerminal } from '../../typings/xterm-internal';
import { assert } from 'chai';
-import { ICharMeasure, ITerminal } from '../Interfaces';
import { CharMeasure } from './CharMeasure';
describe('CharMeasure', () => {
diff --git a/src/utils/CharMeasure.ts b/src/utils/CharMeasure.ts
index 62291ab2..d91c10a4 100644
--- a/src/utils/CharMeasure.ts
+++ b/src/utils/CharMeasure.ts
@@ -3,8 +3,8 @@
* @license MIT
*/
+import { ICharMeasure, ITerminal, ITerminalOptions } from '../../typings/xterm-internal';
import { EventEmitter } from '../EventEmitter';
-import { ICharMeasure, ITerminal, ITerminalOptions } from '../Interfaces';
/**
* Utility class that measures the size of a character. Measurements are done in
diff --git a/src/utils/CircularList.ts b/src/utils/CircularList.ts
index 97a32b79..f8c60b5a 100644
--- a/src/utils/CircularList.ts
+++ b/src/utils/CircularList.ts
@@ -4,7 +4,7 @@
*/
import { EventEmitter } from '../EventEmitter';
-import { ICircularList } from '../Interfaces';
+import { ICircularList } from '../../typings/xterm-internal';
/**
* Represents a circular list; a list with a maximum size that wraps around when push is called,
diff --git a/src/utils/MouseHelper.ts b/src/utils/MouseHelper.ts
index d7d8f698..de07dda7 100644
--- a/src/utils/MouseHelper.ts
+++ b/src/utils/MouseHelper.ts
@@ -3,8 +3,7 @@
* @license MIT
*/
-import { ICharMeasure } from '../Interfaces';
-import { IRenderer } from '../renderer/Interfaces';
+import { ICharMeasure, IRenderer } from '../../typings/xterm-internal';
export class MouseHelper {
constructor(private _renderer: IRenderer) {}
@@ -24,7 +23,7 @@ export class MouseHelper {
while (element) {
x -= element.offsetLeft;
y -= element.offsetTop;
- element = 'offsetParent' in element ? element.offsetParent : element.parentElement;
+ element = element.offsetParent;
}
element = originalElement;
while (element && element !== element.ownerDocument.body) {
diff --git a/src/utils/TestUtils.test.ts b/src/utils/TestUtils.test.ts
index 12b03298..34f3ced8 100644
--- a/src/utils/TestUtils.test.ts
+++ b/src/utils/TestUtils.test.ts
@@ -3,11 +3,11 @@
* @license MIT
*/
-import { ITerminal, IBuffer, IBufferSet, IBrowser, ICharMeasure, ISelectionManager, ITerminalOptions, IInputHandlingTerminal, IViewport, ICircularList, ICompositionHelper, ITheme, ILinkifier, IMouseHelper, ILinkMatcherOptions } from '../Interfaces';
-import { LineData } from '../Types';
+import { ITerminal, IBuffer, IBufferSet, IBrowser, ICharMeasure, ISelectionManager, ITerminalOptions, ICircularList, ITheme, ILinkifier, IMouseHelper, ILinkMatcherOptions, LineData, IColorSet, IRenderer, IRenderDimensions, IColorManager } from '../../typings/xterm-internal';
+import { IInputHandlingTerminal, IViewport, ICompositionHelper } from '../Interfaces';
+import { } from '../Types';
import { Buffer } from '../Buffer';
import * as Browser from './Browser';
-import { IColorSet, IRenderer, IRenderDimensions, IColorManager } from '../renderer/Interfaces';
export class MockTerminal implements ITerminal {
getOption(key: any): any {
diff --git a/typings/xterm-internal.d.ts b/typings/xterm-internal.d.ts
new file mode 100644
index 00000000..eca7fe33
--- /dev/null
+++ b/typings/xterm-internal.d.ts
@@ -0,0 +1,259 @@
+/**
+ * Copyright (c) 2018 The xterm.js authors. All rights reserved.
+ * @license MIT
+ */
+
+///
+
+import { Terminal as PublicTerminal, ITerminalOptions as IPublicTerminalOptions, IEventEmitter } from 'xterm';
+
+export type CharData = [number, string, number, number];
+export type LineData = CharData[];
+
+export type LinkMatcherHandler = (event: MouseEvent, uri: string) => boolean | void;
+export type LinkMatcherValidationCallback = (uri: string, callback: (isValid: boolean) => void) => void;
+
+export interface ITerminal extends PublicTerminal, IElementAccessor, IBufferAccessor, ILinkifierAccessor {
+ selectionManager: ISelectionManager;
+ charMeasure: ICharMeasure;
+ renderer: IRenderer;
+ browser: IBrowser;
+ writeBuffer: string[];
+ cursorHidden: boolean;
+ cursorState: number;
+ defAttr: number;
+ options: ITerminalOptions;
+ buffer: IBuffer;
+ buffers: IBufferSet;
+ isFocused: boolean;
+ mouseHelper: IMouseHelper;
+ bracketedPasteMode: boolean;
+
+ /**
+ * Emit the 'data' event and populate the given data.
+ * @param data The data to populate in the event.
+ */
+ handler(data: string): void;
+ scrollLines(disp: number, suppressScrollEvent?: boolean): void;
+ cancel(ev: Event, force?: boolean): boolean | void;
+ log(text: string): void;
+ showCursor(): void;
+ blankLine(cur?: boolean, isWrapped?: boolean, cols?: number): LineData;
+}
+
+export interface IBufferAccessor {
+ buffer: IBuffer;
+}
+
+export interface IElementAccessor {
+ element: HTMLElement;
+}
+
+export interface ILinkifierAccessor {
+ linkifier: ILinkifier;
+}
+
+export interface IMouseHelper {
+ getCoords(event: {pageX: number, pageY: number}, element: HTMLElement, charMeasure: ICharMeasure, lineHeight: number, colCount: number, rowCount: number, isSelection?: boolean): [number, number];
+ getRawByteCoords(event: MouseEvent, element: HTMLElement, charMeasure: ICharMeasure, lineHeight: number, colCount: number, rowCount: number): { x: number, y: number };
+}
+
+export interface ICharMeasure {
+ width: number;
+ height: number;
+ measure(options: ITerminalOptions): void;
+}
+
+// TODO: The options that are not in the public API should be reviewed
+export interface ITerminalOptions extends IPublicTerminalOptions {
+ cancelEvents?: boolean;
+ convertEol?: boolean;
+ debug?: boolean;
+ handler?: (data: string) => void;
+ screenKeys?: boolean;
+ termName?: string;
+ useFlowControl?: boolean;
+}
+
+export interface IBuffer {
+ lines: ICircularList;
+ ydisp: number;
+ ybase: number;
+ y: number;
+ x: number;
+ tabs: any;
+ scrollBottom: number;
+ scrollTop: number;
+ savedY: number;
+ savedX: number;
+ isCursorInViewport: boolean;
+ translateBufferLineToString(lineIndex: number, trimRight: boolean, startCol?: number, endCol?: number): string;
+ nextStop(x?: number): number;
+ prevStop(x?: number): number;
+}
+
+export interface IBufferSet {
+ alt: IBuffer;
+ normal: IBuffer;
+ active: IBuffer;
+
+ activateNormalBuffer(): void;
+ activateAltBuffer(): void;
+}
+
+export interface ICircularList extends IEventEmitter {
+ length: number;
+ maxLength: number;
+ forEach: (callbackfn: (value: T, index: number) => void) => void;
+
+ get(index: number): T;
+ set(index: number, value: T): void;
+ push(value: T): void;
+ pop(): T;
+ splice(start: number, deleteCount: number, ...items: T[]): void;
+ trimStart(count: number): void;
+ shiftElements(start: number, count: number, offset: number): void;
+}
+
+export interface ISelectionManager {
+ selectionText: string;
+ selectionStart: [number, number];
+ selectionEnd: [number, number];
+
+ disable(): void;
+ enable(): void;
+ setBuffer(buffer: IBuffer): void;
+ setSelection(row: number, col: number, length: number): void;
+}
+
+export interface ILinkifier extends IEventEmitter {
+ attachToDom(mouseZoneManager: IMouseZoneManager): void;
+ linkifyRows(start: number, end: number): void;
+ setHypertextLinkHandler(handler: LinkMatcherHandler): void;
+ setHypertextValidationCallback(callback: LinkMatcherValidationCallback): void;
+ registerLinkMatcher(regex: RegExp, handler: LinkMatcherHandler, options?: ILinkMatcherOptions): number;
+ deregisterLinkMatcher(matcherId: number): boolean;
+}
+
+export interface ILinkMatcherOptions {
+ /**
+ * 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;
+ /**
+ * A callback that fires when the mouse hovers over a link.
+ */
+ tooltipCallback?: LinkMatcherHandler;
+ /**
+ * A callback that fires when the mouse leaves a link that was hovered.
+ */
+ leaveCallback?: () => void;
+ /**
+ * 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;
+}
+
+export interface IBrowser {
+ isNode: boolean;
+ userAgent: string;
+ platform: string;
+ isFirefox: boolean;
+ isMSIE: boolean;
+ isMac: boolean;
+ isIpad: boolean;
+ isIphone: boolean;
+ isMSWindows: boolean;
+}
+
+export interface IMouseZoneManager {
+ add(zone: IMouseZone): void;
+ clearAll(start?: number, end?: number): void;
+}
+
+export interface IMouseZone {
+ x1: number;
+ x2: number;
+ y: number;
+ clickCallback: (e: MouseEvent) => any;
+ hoverCallback?: (e: MouseEvent) => any;
+ tooltipCallback?: (e: MouseEvent) => any;
+ leaveCallback?: () => any;
+}
+
+export interface IRenderer extends IEventEmitter {
+ dimensions: IRenderDimensions;
+ colorManager: IColorManager;
+
+ setTheme(theme: ITheme): IColorSet;
+ onWindowResize(devicePixelRatio: number): void;
+ onResize(cols: number, rows: number, didCharSizeChange: boolean): void;
+ onCharSizeChanged(): void;
+ onBlur(): void;
+ onFocus(): void;
+ onSelectionChanged(start: [number, number], end: [number, number]): void;
+ onCursorMove(): void;
+ onOptionsChanged(): void;
+ clear(): void;
+ queueRefresh(start: number, end: number): void;
+}
+
+export interface IColorManager {
+ colors: IColorSet;
+}
+
+export interface IColorSet {
+ foreground: string;
+ background: string;
+ cursor: string;
+ cursorAccent: string;
+ selection: string;
+ ansi: string[];
+}
+
+export interface IRenderDimensions {
+ scaledCharWidth: number;
+ scaledCharHeight: number;
+ scaledCellWidth: number;
+ scaledCellHeight: number;
+ scaledCharLeft: number;
+ scaledCharTop: number;
+ scaledCanvasWidth: number;
+ scaledCanvasHeight: number;
+ canvasWidth: number;
+ canvasHeight: number;
+ actualCellWidth: number;
+ actualCellHeight: number;
+}
+
+export interface ITheme {
+ foreground?: string;
+ background?: string;
+ cursor?: string;
+ cursorAccent?: string;
+ selection?: string;
+ black?: string;
+ red?: string;
+ green?: string;
+ yellow?: string;
+ blue?: string;
+ magenta?: string;
+ cyan?: string;
+ white?: string;
+ brightBlack?: string;
+ brightRed?: string;
+ brightGreen?: string;
+ brightYellow?: string;
+ brightBlue?: string;
+ brightMagenta?: string;
+ brightCyan?: string;
+ brightWhite?: string;
+}