Skip to content
Proyectos

strtok/xterm-readline

Ver en GitHub

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.

Cómo se miden estas cifras

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 desarrollo

README.md

Original

Xterm.js Readline

node ci

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.