xvt
v1.5.1
Published
an asynchronous terminal session handler
Downloads
65
Maintainers
Readme
xvt
an asynchronous terminal session handler
xvt
class an be initialized for either input & output or for output only
xvt
input designed to work akin to a browser <form>
element
xvt
output filters to your app's terminal emulation needs:
dumb
- plain ASCIIVT
- VT220 monochrome 7-bit controls with plain ASCIIPC
- ANSI color typically used with IBM CP850 encodingPI
- Linux virtual console controls - useful on Raspberry Pi consoleXT
- ANSI color used with UTF-8 encoding - useful for xterm & web apps
const emulation = [ 'dumb', 'VT', 'PC', 'PI', 'XT' ]
for (let e in emulation) {
xvt.app.emulation = emulation[e]
xvt.outln(xvt.magenta, xvt.app.LGradient, xvt.reverse, emulation[e], ' BANNER', xvt.noreverse, xvt.app.RGradient)
xvt.out(xvt.red,'R', xvt.green,'G', xvt.blue,'B')
xvt.outln(xvt.reset, ' - ', xvt.bright, 'bold ', xvt.normal, 'normal ', xvt.blink, 'flash ', xvt.noblink, xvt.faint, 'dim')
}
Demo
Check it out online where this is used to run a classic BBS: Dank Domain
Or install it locally and run its demo from a shell:
$ npm install xvt
$ cd node_modules/xvt
$ npm run demo
> @theflyingape/[email protected] demo
> tsc -p demo --outDir demo; node demo/index
xvt I/O initialized
demo running on Node.js v16.16.0 (linux)
@theflyingape/xvt v1.5.0 - an asynchronous terminal session handler
(C) 2017-2022 Robert Hurst <[email protected]>
MIT licensed
Testing xvt outputs:
░▒▓█BANNER█▓▒░
RGB - bold normal flash dim
Request terminal device status ENQ response = 27,91,48,110
Example snippet
import { io } from 'xvt'
const io = new xvt()
io.outln(io.clear, io.magenta, io.bright, 'Hello, world!')
io.form = {
0: { cb: { io.focus = 'username' }, pause:true },
'username': { cb: {
const username = io.entry
io.focus = 'password'
}, prompt:'Username: ', min:3, max:10 },
'password': { cb: password, echo:false, min:6, timeout:300 }
1: { cb: fight, prompt: '<A>ttack, <C>ast a spell, or <R>etreat: ', enter:'a', eol:false, match:/A|C|R/i },
}
Note: form will autofocus if there is a field 0 defined in it. Else, app sets form field focus manually.