From 2f60c241ee0b46097fd8e915211dca14ea6f9d7c Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Fri, 18 Aug 2017 16:51:40 -0700 Subject: [PATCH] Use manual typings over automatically generated ones These are pulled from the typings I wrote for vscode Fixes #898 --- package.json | 2 +- tsconfig.json | 3 +- typings/xterm.d.ts | 194 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 196 insertions(+), 3 deletions(-) create mode 100644 typings/xterm.d.ts diff --git a/package.json b/package.json index a5f0bd75..9b550d67 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ ".gitignore" ], "main": "lib/Terminal.js", - "types": "lib/Terminal.d.ts", + "types": "typings/xterm.d.ts", "repository": "https://github.com/sourcelair/xterm.js", "license": "MIT", "files": [ diff --git a/tsconfig.json b/tsconfig.json index a3aa790c..38bfd2fa 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,8 +5,7 @@ "rootDir": "src", "outDir": "lib", "sourceMap": true, - "removeComments": true, - "declaration": true + "removeComments": true }, "include": [ "src/**/*" diff --git a/typings/xterm.d.ts b/typings/xterm.d.ts new file mode 100644 index 00000000..a64f132c --- /dev/null +++ b/typings/xterm.d.ts @@ -0,0 +1,194 @@ +/** + * @license MIT + */ + +declare module 'xterm' { + type LinkMatcherHandler = (event: MouseEvent, uri: string) => boolean | void; + + export class Terminal { + cols: number; + rows: number; + ydisp: number; + element: HTMLElement; + textarea: HTMLTextAreaElement; + + /** + * Creates a new `Terminal` object. + * + * @param {object} options An object containing a set of options. + */ + constructor(options?: any); + + /** + * Registers an event listener. + * @param eventName The name of the event. + * @param callback The callback. + */ + on(eventName: string, callback: (data: any) => void): void; + + /** + * Resizes the terminal. + * + * @param x The number of columns to resize to. + * @param y The number of rows to resize to. + */ + resize(columns: number, rows: number): void; + + /** + * Emits an event. + * @param eventName The name of the event. + * @param data The data attached to the event. + */ + emit(eventName: string, data: any): void; + + /** + * Writes text to the terminal, followed by a break line character (\n). + * @param data The text to write to the terminal. + */ + writeln(data: string): void; + + /** + * Opens the terminal within an element. + * @param parent The element to create the terminal within. + * @param focus Focus the terminal, after it gets instantiated in the + * DOM. + */ + open(parent: HTMLElement, focus: boolean): void; + + /** + * Attaches a custom key event handler which is run before keys are + * processed, giving consumers of xterm.js ultimate control as to what + * keys should be processed by the terminal and what keys should not. + * @param customKeyEventHandler The custom KeyboardEvent handler to + * attach. This is a function that takes a KeyboardEvent, allowing + * consumers to stop propogation and/or prevent the default action. The + * function returns whether the event should be processed by xterm.js. + */ + attachCustomKeyEventHandler(customKeyEventHandler: (...any) => boolean); + + /** + * Retrieves an option's value from the terminal. + * @param key The option key. + */ + getOption(key: string): any; + + /** + * Registers a link matcher, allowing custom link patterns to be matched and + * handled. + * @param {RegExp} regex The regular expression to search for, specifically + * this searches the textContent of the rows. You will want to use \s to match + * a space ' ' character for example. + * @param {LinkMatcherHandler} handler The callback when the link is called. + * @param {LinkMatcherOptions} [options] Options for the link matcher. + * @return {number} The ID of the new matcher, this can be used to deregister. + */ + registerLinkMatcher(regex: RegExp, handler: LinkMatcherHandler , options?: any); + + /** + * Deregisters a link matcher if it has been registered. + * @param matcherId The link matcher's ID (returned after register) + */ + deregisterLinkMatcher(matcherId: number): void; + + /** + * Gets whether the terminal has an active selection. + */ + hasSelection(): boolean; + + /** + * Gets the terminal's current selection, this is useful for implementing copy + * behavior outside of xterm.js. + */ + getSelection(): string; + + /** + * Clears the current terminal selection. + */ + clearSelection(): void; + + /** + * Selects all text within the terminal. + */ + selectAll(): void; + + /** + * Focus the terminal. Delegates focus handling to the terminal's DOM element. + */ + focus(): void; + + /** + * Find the next instance of the term, then scroll to and select it. If it + * doesn't exist, do nothing. + * @param term Tne search term. + * @return Whether a result was found. + */ + findNext(term: string): boolean; + + /** + * Find the previous instance of the term, then scroll to and select it. If it + * doesn't exist, do nothing. + * @param term Tne search term. + * @return Whether a result was found. + */ + findPrevious(term: string): boolean; + + /** + * Destroys the terminal. + */ + destroy(): void; + + /** + * Scroll the display of the terminal + * @param disp The number of lines to scroll down (negatives scroll up). + */ + scrollDisp(disp: number): void; + + /** + * Scroll the display of the terminal by a number of pages. + * @param {number} pageCount The number of pages to scroll (negative scrolls up). + */ + scrollPages(pageCount: number): void; + + /** + * Scrolls the display of the terminal to the top. + */ + scrollToTop(): void; + + /** + * Scrolls the display of the terminal to the bottom. + */ + scrollToBottom(): void; + + /** + * Clears the entire buffer, making the prompt line the new first line. + */ + clear(): void; + + /** + * Writes text to the terminal. + * @param data The text to write to the terminal. + */ + write(data: string): void; + + /** + * Sets an option on the terminal. + * @param key The option key. + * @param value The option value. + */ + setOption(key: string, value: any): void; + + /** + * Tells the renderer to refresh terminal content between two rows (inclusive) at the next + * opportunity. + * @param start The row to start from (between 0 and this.rows - 1). + * @param end The row to end at (between start and this.rows - 1). + */ + refresh(start: number, end: number): void; + + /** + * Loads an addon, attaching it to the Terminal prototype. + * @param addon The addon to load. + */ + static loadAddon(addon: string): void; + } +}