strtok/xterm-readline
strtok/xterm-readline has 31 GitHub stars and 11 forks. GitHot measured 0 stars in 24 hours. Last checked 2026-11-14 19:49 UTC. Last push 2026-11-02.
What you can do
- Multi-line prompt and input
- Extendable syntax highlighting
- Unicode / multi column-width character support
Crecimiento de estrellas medido
- in 24h
- 0
- in 7 days
- Recopilando historial
- in 15 days
- Recopilando historial
- in 1 month
- Recopilando historial
Cambios netos en períodos que se solapan, no totales diarios. Los datos no disponibles se dejan en blanco. Las estrellas indican interés, no calidad.
Acerca de
a library for building command-line interfaces with XtermJS
Herramientas de desarrolloREADME.md
OriginalXterm.js Readline
This is an xterm-js addon that provides a readline like capability to xterm-js. It allows the creation of cli or repl like interfaces on top of xterm-js.
Large parts of this source are inspired / derived / ported from the MIT licensed rustyline project.
Features
- Multi-line prompt and input
- Extendable syntax highlighting
- Unicode / multi column-width character support
Example
This is a multi-line example that treats any line ending with '&&' as a continuation.
import "xterm/css/xterm.css";
import { Terminal } from 'xterm';
import { Readline } from "xterm-readline";
const term = new Terminal({
theme: {
background: "#191A19",
foreground: "#F5F2E7",
},
cursorBlink: true,
cursorStyle: "block"
});
const rl = new Readline();
term.loadAddon(rl);
term.open(document.getElementById('terminal'));
term.focus();
rl.setCheckHandler((text) => {
let trimmedText = text.trimEnd();
if (trimmedText.endsWith("&&")) {
return false;
}
return true;
});
function readLine() {
rl.read(">")
.then(processLine);
}
function processLine(text) {
rl.println("you entered: " + text);
setTimeout(readLine);
}
readLine();
Cancelling a read
read() accepts an optional AbortSignal. Aborting it rejects the pending read with signal.reason.
const controller = new AbortController();
rl.read(">", { signal: controller.signal }).then(processLine, () => {});
controller.abort();
During a read with a signal, the Ctrl-C handler is also called, so it can abort the read:
rl.setCtrlCHandler(() => controller.abort());
Reads without a signal keep the old behavior: Ctrl-C only clears the line.
Keyboard Shortcuts
| Key | Action |
|---|---|
| Home | Move cursor to the beginning of line |
| End | Move cursor to end of line |
| Left | Move cursor one character left |
| Right | Move cursor one character right |
| Up | Move cursor up (multi-line edit) |
| Down | Move cursor down (multi-line edit) |
| Ctrl-C | Cancel line in progress (additionally call ctrl-c callback if registered) |
| Ctrl-D, Del | Delete the character under the cursor |
| Enter | Apply the line, or begin a new line in multiline mode |
| Alt/Shift Enter | Force add \n to the input |
| Ctrl-U | Clear line |
| Ctrl-K | Delete text from cursor to end of line |
Demo
A small paren-balanced REPL under demo/ for manual testing. Hot-reloads
on src/ edits.
npm install
npm run demo
Real World Uses
License Agreement
If you contribute code to this project, you implicitly allow your code to be distributed under the MIT license.