TermUI is a library for Node.js that makes it easier to create rich console interfaces.
out(text)
- prints text to the screen from the current cursor positionclear()
- clears the screenpos(x,y)
- positions the cursorhome()
- sends the cursor to the top left cornerend()
- sends the cursor to the bottom right cornerfg(color)
- sets the foreground colorbg(color)
- sets the background colorhifg(color)
- sets the foreground color for 256 color terminalshibg(color)
- sets the background color for 256 color terminalsenableMouse()
- enables mouse event handlingdisableMouse()
- disables mouse event handlingeraseLine()
- erases the entire line that the cursor is onhideCursor()
- hides the cursorshowCursor()
- shows the cursor
The following will print "Hello, world!" at 10, 20 in the terminal in white text on a red background:
TermUI.pos(10,20).fg(TermUI.C.w).bg(TermUI.C.w).out("Hello, world!")
As you can see, pretty much everything is chainable.
The C
object contains definitions for common colors so that you don't have
to remember the numeric values.
- k: black
- r: red
- g: green
- y: yellow
- b: blue
- m: magenta
- c: cyan
- w: white
- x: the terminal's default color
The S
object is similar: it contains the text style definitions -- normal,
bold, underline, blink, and inverse.
The SYM
object contains shortcuts for some handy UTF8 characters: star, check
x, triUp, triDown, triLeft, triRight, fn, arrowUp, arrowDown, arrowLeft, and
arrowRight.
resize
is fired when the user resizes their terminal. The listener receives
an object with 'w' and 'h' properties set to the new width and height of the
terminal.
keypress
is fired when a key is pressed. This works just like the keypress
event on process.stdin
mousedown, mouseup, drag, wheel
are all the mouse events that are fired. The
receiver is sent an object that contains which button was pressed, which direction
the wheel scrolled, the x/y location, and whether or not shift was pressed.
Buttons are simply clickable rectangular areas that can have a label on them. Here's how to use one...
TermUI = require 'TermUI'
TermUI.enableMouse()
button = new TermUI.Button
bounds:
x: 0
y: 0
w: 30
h: 3
label: 'I am a banana!'
labelAnchor: 5
button.on 'mousedown', ->
button.bg = TermUI.C.y
button.draw()
button.on 'mouseup', ->
button.bg = TermUI.C.b
button.draw()
button.draw()