663 lines
13 KiB
Markdown
663 lines
13 KiB
Markdown
# API Reference
|
|
|
|
### Application
|
|
|
|
- [XTerminal](#xterminal) extends [XEventEmitter](#xeventemitter)
|
|
- [XTerminal.version](#xterminal-version)
|
|
- [XTerminal.XEventEmitter](#xterminal-xeventemitter)
|
|
- [term.mount()](#term-mount)
|
|
- [term.dispose()](#term-dispose)
|
|
|
|
### Input
|
|
|
|
- [term.focus()](#term-focus)
|
|
- [term.blur()](#term-blur)
|
|
- [term.pause()](#term-pause)
|
|
- [term.resume()](#term-resume)
|
|
- [term.setInput()](#term-setinput)
|
|
- [term.clearInput()](#term-clearinput)
|
|
- [term.setCompleter()](#term-setcompleter)
|
|
|
|
### Output
|
|
|
|
- [XTerminal.escapeHTML()](#xterminal-escapehtml)
|
|
- [term.write()](#term-write)
|
|
- [term.writeln()](#term-writeln)
|
|
- [term.writeSafe()](#term-writesafe)
|
|
- [term.writelnSafe()](#term-writelnsafe)
|
|
- [term.clear()](#term-clear)
|
|
- [term.clearLast()](#term-clearlast)
|
|
|
|
### History
|
|
|
|
- [term.history](#term-history)
|
|
- [term.clearHistory()](#term-clearhistory)
|
|
|
|
---
|
|
|
|
## XEventEmitter
|
|
|
|
Event emitter
|
|
|
|
- **Type**
|
|
|
|
```ts
|
|
// Event Identifier
|
|
type IEventName = string | symbol;
|
|
|
|
// Event Listener
|
|
type IEventListener = (...args: unknown[]) => void;
|
|
|
|
type IEventHandler = (ev: IEventName, listener: IEventListener) => void;
|
|
|
|
interface IEventEmitter {
|
|
on: IEventHandler;
|
|
once: IEventHandler;
|
|
off: IEventHandler;
|
|
emit(ev: IEventName, ...args: unknown[]): void;
|
|
}
|
|
```
|
|
|
|
- **Details**
|
|
|
|
**Methods**
|
|
|
|
`on`: Appends a event listener to the specified event
|
|
|
|
`once`: Appends a **one-time** event listener to the specified event
|
|
|
|
`off`: Removes an event listener from the specified event
|
|
|
|
`emit`: Triggers an event with arguments if any
|
|
|
|
- **See also:** [Guide - Events](../guide/events.md)
|
|
|
|
## XTerminal
|
|
|
|
Creates a terminal instance
|
|
|
|
- **Type**
|
|
|
|
```ts
|
|
interface XTerminal {
|
|
// ...
|
|
}
|
|
|
|
interface TerminalOptions {
|
|
target: HTMLElement | string;
|
|
}
|
|
|
|
class Terminal extends XEventEmitter implements XTerminal {
|
|
constructor(options: TerminalOptions);
|
|
}
|
|
```
|
|
|
|
- **Details**
|
|
|
|
The constructor takes one argument, `options` containing the `target` element reference.
|
|
|
|
If the `target` element is provided, the [term.mount()](#term-mount) method is called automatically.
|
|
|
|
- **Example**
|
|
|
|
```js
|
|
import XTerminal from 'xterminal';
|
|
|
|
const term = new XTerminal({/* options */});
|
|
```
|
|
|
|
- **See also:** [Guide - Creating a Terminal](../guide/initialization.md#creating-your-first-terminal)
|
|
|
|
## XTerminal.version
|
|
|
|
The version number
|
|
|
|
- **Type**
|
|
|
|
```ts
|
|
interface XTerminal {
|
|
readonly version: string;
|
|
}
|
|
```
|
|
|
|
- **Details**
|
|
|
|
This is a static property that stores the version used. It is important when reporting bugs or issues.
|
|
|
|
- **Example**
|
|
|
|
```js
|
|
import XTerminal from 'xterminal';
|
|
|
|
console.log(XTerminal.version);
|
|
```
|
|
|
|
## XTerminal.XEventEmitter
|
|
|
|
The event emitter class
|
|
|
|
- **Type**
|
|
|
|
Same as [XEventEmitter](#xeventemitter).
|
|
|
|
- **Details**
|
|
|
|
This is a static property (class) that can be used to create independent instances of the event emitter
|
|
|
|
- **Example**
|
|
|
|
```js
|
|
const emitter = new XTerminal.XEventEmitter();
|
|
```
|
|
|
|
## XTerminal.escapeHTML()
|
|
|
|
Escapes user input so it can be safely rendered as HTML text.
|
|
|
|
- **Type**
|
|
|
|
```ts
|
|
interface XTerminal {
|
|
static escapeHTML(data?: string): string;
|
|
}
|
|
```
|
|
|
|
- **Details**
|
|
|
|
It preserves all characters by converting them to HTML entities where needed.
|
|
This is **recommended** for use on user input or any arbitrary data.
|
|
|
|
- **Example**
|
|
|
|
```js
|
|
XTerminal.escapeHTML("<b>hello</b>");
|
|
// => <b>hello</b>
|
|
```
|
|
|
|
- **See also:** [Guide - Safe Output](../guide/output.md#safe-output)
|
|
|
|
## term.mount()
|
|
|
|
Mounts the terminal instance structure to the specified DOM element.
|
|
|
|
- **Type**
|
|
|
|
```ts
|
|
interface XTerminal {
|
|
mount(target: HTMLElement | string): void;
|
|
}
|
|
```
|
|
|
|
- **Details**
|
|
|
|
It takes one argument that must be an actual DOM element or a CSS selector. The element's `innerHTML` is cleared first and then the terminal structure is rendered.
|
|
|
|
If no argument is passed, it throws an error and nothing is rendered.
|
|
|
|
The `term.mount()` method should only be called once for each terminal instance only if the `target` element option in the [constructor](#xterminal) is not provided.
|
|
|
|
- **Example**
|
|
|
|
```js
|
|
import XTerminal from 'xterminal';
|
|
|
|
const term = new XTerminal();
|
|
term.mount('#app');
|
|
```
|
|
|
|
or mount to an actual DOM element directly:
|
|
|
|
```js
|
|
term.mount(
|
|
document.getElementById('app')
|
|
);
|
|
```
|
|
|
|
- **See also:** [Guide - Creating a Terminal](../guide/initialization.md#creating-your-first-terminal)
|
|
|
|
|
|
## term.dispose()
|
|
|
|
Gracefully close the terminal instance.
|
|
|
|
- **Type**
|
|
|
|
```ts
|
|
interface XTerminal {
|
|
dispose(): void;
|
|
}
|
|
```
|
|
|
|
- **Details**
|
|
|
|
This detaches all event listeners, unmounts the terminal from the DOM and clears the backing functionality of the terminal.
|
|
|
|
_The terminal should not be used again once disposed._
|
|
|
|
- **Example**
|
|
|
|
Dispose on window unload event
|
|
|
|
```js
|
|
window.onunload = () => term.dispose();
|
|
```
|
|
|
|
- **See also:** [Guide - Disposal](../guide/disposal.md)
|
|
|
|
## term.focus()
|
|
|
|
Focus the terminal input component - ready for input.
|
|
|
|
- **Type**
|
|
|
|
```ts
|
|
interface XTerminal {
|
|
focus(): void;
|
|
}
|
|
```
|
|
|
|
- **Details**
|
|
|
|
This method takes no argument. It focuses the underlying input component of the terminal.
|
|
|
|
Clicking or tapping in the terminal also invokes the method.
|
|
|
|
- **Example**
|
|
|
|
After mounting the terminal instance
|
|
|
|
```js
|
|
term.focus();
|
|
```
|
|
|
|
## term.blur()
|
|
|
|
Blurs the terminal input component.
|
|
|
|
- **Type**
|
|
|
|
```ts
|
|
interface XTerminal {
|
|
blur(): void;
|
|
}
|
|
```
|
|
|
|
- **Details**
|
|
|
|
This method blurs the input component of the terminal.
|
|
|
|
- **Example**
|
|
|
|
```js
|
|
term.blur();
|
|
```
|
|
|
|
## term.pause()
|
|
|
|
Deactivate the terminal input component.
|
|
|
|
- **Type**
|
|
|
|
```ts
|
|
interface XTerminal {
|
|
pause(): void;
|
|
}
|
|
```
|
|
|
|
- **Details**
|
|
|
|
This method will stop events and input from being written to the terminal but rather input will be buffered.
|
|
|
|
**NB:** It is used in conjuction with [term.resume()](#term-resume).
|
|
|
|
- **Example**
|
|
|
|
Prevent a user from sending input (non-interactive mode)
|
|
|
|
```js
|
|
term.pause();
|
|
```
|
|
|
|
- **See also:** [Guide - Pause & Resume](../guide/prompt.md#pause-resume)
|
|
|
|
## term.resume()
|
|
|
|
Activate the terminal input component
|
|
|
|
- **Type**
|
|
|
|
```ts
|
|
interface XTerminal {
|
|
resume(): void;
|
|
}
|
|
```
|
|
|
|
- **Details**
|
|
|
|
This method will enable events dispatch and user input if they were deactivate using [term.pause()](#term-pause).
|
|
|
|
- **Example**
|
|
|
|
Pause the terminal until user input is required
|
|
|
|
```js
|
|
term.pause();
|
|
// ...
|
|
// do something
|
|
// ...
|
|
term.resume();
|
|
```
|
|
|
|
- **See also:** [Guide - Pause & Resume](../guide/prompt.md#pause-resume)
|
|
|
|
## term.setInput()
|
|
|
|
Sets the value of the terminal input buffer
|
|
|
|
- **Type**
|
|
|
|
```ts
|
|
interface XTerminal {
|
|
setInput(value: string): void;
|
|
}
|
|
```
|
|
|
|
- **Details**
|
|
|
|
This method will set/modify the contents of the input buffer.
|
|
|
|
- **Example**
|
|
|
|
Presetting some input when the terminal is loaded or resumed
|
|
|
|
```js
|
|
term.setInput("echo 'Hello World'");
|
|
```
|
|
|
|
- **See also:** [Guide - Set & Clear](../guide/prompt.md#set-clear)
|
|
|
|
## term.clearInput()
|
|
|
|
Clears the terminal input buffer
|
|
|
|
- **Type**
|
|
|
|
```ts
|
|
interface XTerminal {
|
|
clearInput(): void;
|
|
}
|
|
```
|
|
|
|
- **Details**
|
|
|
|
This method will empty/clear the contents of the input buffer.
|
|
|
|
- **Example**
|
|
|
|
Clearing the input buffer when the terminal [resumes](#term-resume)
|
|
|
|
```js
|
|
term.clearInput();
|
|
```
|
|
|
|
- **See also:** [Guide - Set & Clear](../guide/prompt.md#set-clear)
|
|
|
|
## term.setCompleter()
|
|
|
|
Sets the autocomplete function that is invoked on Tab key.
|
|
|
|
- **Type**
|
|
|
|
```ts
|
|
interface XTerminal {
|
|
setCompleter(fn: (data: string) => string): void;
|
|
}
|
|
```
|
|
|
|
- **Details**
|
|
|
|
This method take one argument that is a function which takes a string parameter and returns a string.
|
|
|
|
The autocomplete functionality depends highly on the completer function `fn`.
|
|
|
|
The `fn` parameter should return a better match for the input data string.
|
|
|
|
- **Example**
|
|
|
|
```js
|
|
term.setCompleter(data => {
|
|
const options = ['.help', '.clear', '.exit'];
|
|
return options.filter(s => s.startsWith(data))[0] || '';
|
|
});
|
|
```
|
|
|
|
- **See also:** [Guide - Autocomplete](../guide/autocomplete.md)
|
|
|
|
## term.write()
|
|
|
|
Write data to the terminal.
|
|
|
|
- **Type**
|
|
|
|
```ts
|
|
interface XTerminal {
|
|
write(data: string | number, callback?: () => void): void;
|
|
}
|
|
```
|
|
|
|
- **Details**
|
|
|
|
`data`: The data to write to the terminal
|
|
|
|
`callback`: Optional function invoked on successful write
|
|
|
|
- **Example**
|
|
|
|
```js
|
|
term.write('John: Hello ');
|
|
term.write('from the Eastside', () => console.log('Done!'));
|
|
```
|
|
|
|
- **See also:** [Guide - Output](../guide/output.md#output)
|
|
|
|
## term.writeln()
|
|
|
|
Write data to the terminal, followed by a break line character (\n).
|
|
|
|
- **Type**
|
|
|
|
```ts
|
|
interface XTerminal {
|
|
writeln(data: string | number, callback?: () => void): void;
|
|
}
|
|
```
|
|
|
|
- **Details**
|
|
|
|
`data`: The data to write to the terminal
|
|
|
|
`callback`: Optional function invoked on successful write
|
|
|
|
- **Example**
|
|
|
|
```js
|
|
term.writeln('Hello World!');
|
|
term.writeln('Welcome!', () => console.log('Done!'));
|
|
```
|
|
|
|
- **See also:** [Guide - Output](../guide/output.md#output)
|
|
|
|
|
|
## term.writeSafe()
|
|
|
|
Securely write data to the terminal.
|
|
|
|
- **Type**
|
|
|
|
```ts
|
|
interface XTerminal {
|
|
writeSafe(data: string | number, callback?: () => void): void;
|
|
}
|
|
```
|
|
|
|
- **Details**
|
|
|
|
`data`: The data to write to the terminal
|
|
|
|
`callback`: Optional function invoked on successful write
|
|
|
|
- **Example**
|
|
|
|
```js
|
|
term.writeSafe('<h1>hello</h1>');
|
|
// <h1>hello</h1>
|
|
```
|
|
|
|
- **See also:** [Guide - Output](../guide/output.md#output)
|
|
|
|
## term.writelnSafe()
|
|
|
|
Securely write data to the terminal, followed by a break line character (\n).
|
|
|
|
- **Type**
|
|
|
|
```ts
|
|
interface XTerminal {
|
|
writelnSafe(data: string | number, callback?: () => void): void;
|
|
}
|
|
```
|
|
|
|
- **Details**
|
|
|
|
`data`: The data to write to the terminal
|
|
|
|
`callback`: Optional function invoked on successful write
|
|
|
|
- **Example**
|
|
|
|
```js
|
|
term.writelnSafe('<h1>hello</h1>');
|
|
// <h1>hello</h1><br/>
|
|
```
|
|
|
|
- **See also:** [Guide - Output](../guide/output.md#output)
|
|
|
|
## term.clear()
|
|
|
|
Clear the entire terminal.
|
|
|
|
- **Type**
|
|
|
|
```ts
|
|
interface XTerminal {
|
|
clear(): void;
|
|
}
|
|
```
|
|
|
|
- **Details**
|
|
|
|
When invoked, the entire terminal output is cleared.
|
|
|
|
This method also triggers the `clear` event.
|
|
|
|
- **Example**
|
|
|
|
Clear on CTRL+L using [keypress](../guide/events.md#default-events) event
|
|
|
|
```js
|
|
term.on('keypress', e => {
|
|
if (e.key == 'l' && e.ctrlKey) {
|
|
term.clear();
|
|
}
|
|
});
|
|
```
|
|
|
|
- **See also:** [Guide - Example using events](../guide/events.md#example)
|
|
- **See also:** [Guide - Output](../guide/output.md#clear-screen)
|
|
|
|
## term.clearLast()
|
|
|
|
Remove the element containing the previous output.
|
|
|
|
- **Type**
|
|
|
|
```ts
|
|
interface XTerminal {
|
|
clearLast(): void;
|
|
}
|
|
```
|
|
|
|
- **Details**
|
|
|
|
This is like the undo for only one write operation.
|
|
|
|
- **Example**
|
|
|
|
Greet with `Hello World` and replace it with `Hello Dev` after 5 seconds
|
|
|
|
```js
|
|
term.writeln('Hello World!');
|
|
setTimeout(() => {
|
|
term.clearLast();
|
|
term.write('Hello Dev!');
|
|
}, 5000);
|
|
```
|
|
|
|
- **See also:** [Guide - Output](../guide/output.md#clear-last-output)
|
|
|
|
|
|
## term.history
|
|
|
|
Access the history stack.
|
|
|
|
- **Type**
|
|
|
|
```ts
|
|
interface XTerminal {
|
|
history: string[];
|
|
}
|
|
```
|
|
|
|
- **Details**
|
|
|
|
Manages an array of entries in the history stack.
|
|
|
|
- **Example**
|
|
|
|
Log the history whenever a new entry is added
|
|
|
|
```js
|
|
term.on('data', () => console.log(term.history));
|
|
```
|
|
|
|
- **See also:** [History](../guide/history.md)
|
|
|
|
## term.clearHistory()
|
|
|
|
Clear the entire history stack.
|
|
|
|
- **Type**
|
|
|
|
```ts
|
|
interface XTerminal {
|
|
clearHistory(): void;
|
|
}
|
|
```
|
|
|
|
- **Details**
|
|
|
|
It take no argument as its sole role is to clear the entire local history of inputs which are accessible iteratively using `ArrowUp` and `ArrowDown` keys.
|
|
|
|
- **Example**
|
|
|
|
Clear history on `CTRL+H` using [keypress](../guide/events.md#default-events) event
|
|
|
|
```js
|
|
term.on('keypress', e => {
|
|
if (e.ctrlKey && e.key == 'h') {
|
|
term.clearHistory();
|
|
}
|
|
});
|
|
```
|
|
|
|
- **See also:** [History](../guide/history.md) |