# Terminal Kit A full-blown terminal lib featuring: 256 colors, styles, keys & mouse handling, input field, progress bars, screen buffer (including 32-bit composition), text buffer, and many more... Whether you just need colors & styles, build a simple interactive command line tool or a complexe terminal application: this is the absolute terminal lib for Node.js! It does **NOT** depend on ncurses. * License: MIT * Platform: linux and any xterm-compatible terminal. These terminals have been successfully tested: * xterm * gnome-terminal * Konsole * iTerm * Terminator * xfce4-terminal * Linux Console * rxvt/urxvt * Eterm * Terminology * **Your terminal?** Help tracking terminal compatibilities [on github!](https://github.com/cronvel/terminal-kit/issues) Some tutorials are available at [blog.soulserv.net/tag/terminal](http://blog.soulserv.net/tag/terminal/). ## Quick examples Some examples (note that if you execute all at once, some examples overwrite each other) : ```js // Require the lib, get a working terminal var term = require( 'terminal-kit' ).terminal ; // The term() function simply output a string to stdout, using current style // output "Hello world!" in default terminal's colors term( 'Hello world!\n' ) ; // This output 'red' in red term.red( 'red' ) ; // This output 'bold' in bold term.bold( 'bold' ) ; // output 'mixed' using bold, underlined & red, exposing the style-mixing syntax term.bold.underline.red( 'mixed' ) ; // printf() style formatting everywhere: // this will output 'My name is Jack, I'm 32.' in green term.green( "My name is %s, I'm %d.\n" , 'Jack' , 32 ) ; // Since v0.16.x, style markup are supported as a shorthand. // Those two lines produce the same result. term( "My name is " ).red( "Jack" )( " and I'm " ).green( "32\n" ) ; term( "My name is ^rJack^ and I'm ^g32\n" ) ; // Width and height of the terminal term( 'The terminal size is %dx%d' , term.width , term.height ) ; // Move the cursor at the upper-left corner term.moveTo( 1 , 1 ) ; // We can always pass additional arguments that will be displayed... term.moveTo( 1 , 1 , 'Upper-left corner' ) ; // ... and formated term.moveTo( 1 , 1 , "My name is %s, I'm %d.\n" , 'Jack' , 32 ) ; // ... or even combined with other styles term.moveTo.cyan( 1 , 1 , "My name is %s, I'm %d.\n" , 'Jack' , 32 ) ; // Get some user input term.magenta( "Enter your name: " ) ; var input = await term.inputField().promise ; term.green( "\nYour name is '%s'\n" , input ) ; // Cleanly exit : avoid having junk escape characters and restore default style. // Any interactive functions (like .inputFiled(), .yesOrNo(), etc) will open "stdin" and listen for events, // so the process will NOT exit except explicitly (or explicitly calling .grabInput( false )). term.processExit() ; ``` More complete examples could be found in the [sample directory](https://github.com/cronvel/terminal-kit/tree/master/sample). ## Install Use Node Package Manager: npm install terminal-kit ## Some conventions used in this document In all examples, `termkit` is assumed to be `var termkit = require( 'terminal-kit' ) ;` while `term` is assumed to be `var term = require( 'terminal-kit' ).terminal ;` or `var term = termkit.terminal ;`. So `term` is an instanceof of `termkit.Terminal`, that should in almost all cases match correctly the terminal you are currently using. This is the *default* terminal. You can also define your own terminal interface, see [.createTerminal()](#ref.createTerminal). ## Table of Contents * [Global Terminal-Kit API](global-api.md#top) * [termkit.terminal: The Default Instance](global-api.md#ref.terminal) * [termkit.realTerminal: Real Terminal Access (e.g. escaping from pipes)](global-api.md#ref.realTerminal) * [termkit.createTerminal()](global-api.md#ref.createTerminal) * [termkit.getParentTerminalInfo()](global-api.md#ref.getParentTerminalInfo) * [termkit.getDetectedTerminal()](global-api.md#ref.getDetectedTerminal) * [termkit.autoComplete()](global-api.md#ref.autoComplete) * [termkit.stripEscapeSequences()](global-api.md#ref.stripEscapeSequences) * [termkit.stringWidth()](global-api.md#ref.stringWidth) * [termkit.truncateString()](global-api.md#ref.truncateString) * [Terminal's Low-level and Basic *chainable* Methods](low-level.md#top) * [Colors](low-level.md#ref.colors) * [Styles](low-level.md#ref.styles) * [Moving the cursor](low-level.md#ref.movingCursor) * [Editing the screen](low-level.md#ref.editingScreen) * [Input/Output](low-level.md#ref.io) * [Operating System](low-level.md#ref.operating-system) * [Modifiers](low-level.md#ref.modifiers) * [Misc](low-level.md#ref.misc) * [Terminal's High-level and Advanced Methods](high-level.md#top) * [.fullscreen()](high-level.md#ref.fullscreen) * [.processExit()](high-level.md#ref.processExit) * [.grabInput()](high-level.md#ref.grabInput) * [.getCursorLocation()](high-level.md#ref.getCursorLocation) * [.getColor()](high-level.md#ref.getColor) * [.setColor()](high-level.md#ref.setColor) * [.getPalette()](high-level.md#ref.getPalette) * [.setPalette()](high-level.md#ref.setPalette) * [.wrapColumn()](high-level.md#ref.wrapColumn) * [.yesOrNo()](high-level.md#ref.yesOrNo) * [.inputField()](high-level.md#ref.inputField) * [.fileInput()](high-level.md#ref.fileInput) * [.singleLineMenu()](high-level.md#ref.singleLineMenu) * [.singleRowMenu()](high-level.md#ref.singleRowMenu) * [.singleColumnMenu()](high-level.md#ref.singleColumnMenu) * [.gridMenu()](high-level.md#ref.gridMenu) * [.progressBar()](high-level.md#ref.progressBar) * [.bar()](high-level.md#ref.bar) * [.slowTyping()](high-level.md#ref.slowTyping) * [Markup](markup.md#top) * [Terminal's Events](events.md#top) * ['resize'](events.md#ref.event.resize) * ['key'](events.md#ref.event.key) * ['terminal'](events.md#ref.event.terminal) * ['mouse'](events.md#ref.event.mouse) * [ScreenBuffer](ScreenBuffer.md#top) * *New* [ScreenBuffer HD](ScreenBufferHD.md#top) * [TextBuffer](TextBuffer.md#top) * [Rect](Rect.md#top) * *New* [Document model](document-model.md#top) for rich app GUI, available elements: * [Document](document-model.md#ref.Document) * [Button](document-model.md#ref.Button) * [ColumnMenu](document-model.md#ref.ColumnMenu) * [ColumnMenuMulti](document-model.md#ref.ColumnMenuMulti) * [DropDownMenu](document-model.md#ref.DropDownMenu) * [EditableTextBox](document-model.md#ref.EditableTextBox) * [Form](document-model.md#ref.Form) * [LabeledInput](document-model.md#ref.LabeledInput) * [Layout](document-model.md#ref.Layout) * [RowMenu](document-model.md#ref.RowMenu) * [SelectList](document-model.md#ref.SelectList) * [SelectListMulti](document-model.md#ref.SelectListMulti) * [TextBox](document-model.md#ref.TextBox) * [Text](document-model.md#ref.Text) * [ToggleButton](document-model.md#ref.ToggleButton) See also those base classes: * [Element](document-model.md#ref.Element) * [Container](document-model.md#ref.Container) * [BaseMenu](document-model.md#ref.BaseMenu)