• Stars
    star
    1,963
  • Rank 23,614 (Top 0.5 %)
  • Language
    C
  • License
    MIT License
  • Created almost 15 years ago
  • Updated about 4 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Library for writing text-based user interfaces

IMPORTANT

This library is no longer maintained. It's pretty small if you have a big project that relies on it, just maintain it yourself. Or look for forks. Or look for alternatives. Or better - avoid using terminals for UI. Never the less, thanks to all who ever contributed.

Termbox

Termbox is a library that provides minimalistic API which allows the programmer to write text-based user interfaces.

It is based on a very simple abstraction. The main idea is viewing terminals as a table of fixed-size cells and input being a stream of structured messages. Would be fair to say that the model is inspired by windows console API. The abstraction itself is not perfect and it may create problems in certain areas. The most sensitive ones are copy & pasting and wide characters (mostly Chinese, Japanese, Korean (CJK) characters). When it comes to copy & pasting, the notion of cells is not really compatible with the idea of text. And CJK runes often require more than one cell to display them nicely. Despite the mentioned flaws, using such a simple model brings benefits in a form of simplicity. And KISS principle is important.

At this point one should realize, that CLI (command-line interfaces) aren't really a thing termbox is aimed at. But rather pseudo-graphical user interfaces.

Installation

Termbox comes with a waf-based build scripts. In order to configure, build and install it, do the following::

./waf configure --prefix=/usr                                (configure)
./waf                                                        (build)
./waf install --destdir=DESTDIR                              (install)

By default termbox will install the header file and both shared and static libraries. If you want to install a shared library or static library alone, use the following as an install command::

./waf install --targets=termbox_shared --destdir=PREFIX      (shared library)

or::

./waf install --targets=termbox_static --destdir=PREFIX      (static library)
Python

In order to install the python module, use the following command (as root or via sudo)::

python setup.py install

for Python 3::

python3 setup.py install

Getting started

Termbox's interface only consists of 12 functions::

tb_init() // initialization
tb_shutdown() // shutdown

tb_width() // width of the terminal screen
tb_height() // height of the terminal screen

tb_clear() // clear buffer
tb_present() // sync internal buffer with terminal

tb_put_cell()
tb_change_cell()
tb_blit() // drawing functions

tb_select_input_mode() // change input mode
tb_peek_event() // peek a keyboard event
tb_poll_event() // wait for a keyboard event

See src/termbox.h header file for full detail.

Links

If you want me to add your Termbox project here, send me a pull request or drop a note via email, you can find my email below.

Language bindings
Other implementations
Applications

Bugs & questions

Report bugs to the https://github.com/nsf/termbox issue tracker. Send rants and questions to me: [email protected].

Changes

v1.1.2:

  • Properly include changelog into the tagged version commit. I.e. I messed up by tagging v1.1.1 and describing it in changelog after tagged commit. This commit marked as v1.1.2 includes changelog for both v1.1.1 and v1.1.2. There are no code changes in this minor release.

v1.1.1:

v1.1.0:

  • API: tb_width() and tb_height() are guaranteed to be negative if the termbox wasn't initialized.
  • API: Output mode switching is now possible, adds 256-color and grayscale color modes.
  • API: Better tb_blit() function. Thanks, Gunnar Zötl [email protected].
  • API: New tb_cell_buffer() function for direct back buffer access.
  • API: Add new init function variants which allow using arbitrary file descriptor as a terminal.
  • Improvements in input handling code.
  • Calling tb_shutdown() twice is detected and results in abort() to discourage doing so.
  • Mouse event handling is ported from termbox-go.
  • Paint demo port from termbox-go to demonstrate mouse handling capabilities.
  • Bug fixes in code and documentation.

v1.0.0:

  • Remove the Go directory. People generally know about termbox-go and where to look for it.
  • Remove old terminfo-related python scripts and backport the new one from termbox-go.
  • Remove cmake/make-based build scripts, use waf.
  • Add a simple terminfo database parser. Now termbox prefers using the terminfo database if it can be found. Otherwise it still has a fallback built-in database for most popular terminals.
  • Some internal code cleanups and refactorings. The most important change is that termbox doesn't leak meaningless exported symbols like 'keys' and 'funcs' now. Only the ones that have 'tb_' as a prefix are being exported.
  • API: Remove unsigned ints, use plain ints instead.
  • API: Rename UTF-8 functions 'utf8_' -> 'tb_utf8_'.
  • API: TB_DEFAULT equals 0 now, it means you can use attributes alones assuming the default color.
  • API: Add TB_REVERSE.
  • API: Add TB_INPUT_CURRENT.
  • Move python module to its own directory and update it due to changes in the termbox library.

More Repositories

1

gocode

An autocompletion daemon for the Go programming language
Go
5,006
star
2

termbox-go

Pure Go termbox implementation
Go
4,666
star
3

godit

A very religious text editor
Go
576
star
4

jsondiff

JsonDiff library
Go
210
star
5

gothic

Tcl/Tk Go bindings
Go
152
star
6

gollvm

LLVM bindings for the Go programming language
Go
97
star
7

gotris

A classic tetris game written in Go programming language
Go
92
star
8

pnoise

Perlin noise benchmark
Lua
77
star
9

obkey

ObKey - Openbox Key Editor
Python
70
star
10

sseculling

SSE Frustum Culling Demo
C++
67
star
11

mc

A very simple marching cubes example.
C++
64
star
12

golemon

Port of the lemon parser generator to the Go programming language
C
55
star
13

gogobject

GObject-introspection based bindings generator
Go
47
star
14

krawl

Krawl programming language compiler
C++
42
star
15

gocovgui

A simple GUI wrapper for the gocov coverage analysis tool
Go
42
star
16

bmpanel2

bmpanel version 2
C
35
star
17

bin2go

Binary to Go source file converter
Go
24
star
18

ccode

An autocompletion daemon for the C programming language (vim, libclang, omnifunc)
C
23
star
19

imgui-rust

Alternative (personal) imgui rust bindings
Rust
20
star
20

sexp

S-expressions parser in the Go programming language
Go
19
star
21

nextgame

Work-in-progress "voxel" game or game engine.
C
18
star
22

bmpanel

bmpanel - lightweight, netwm compliant, x11 panel with desktop switcher, taskbar, systray and clock
C
17
star
23

tulib

Termbox Utilities Library
Go
14
star
24

libtorgo

BitTorrent Go library
Go
12
star
25

gortfm

Documentation generator for the Go programming language
Go
11
star
26

emacskeys

QtCreator plugin targeting emacs users
C++
11
star
27

gomandel

Go mandelbrot demo program
Go
9
star
28

sqlrace

SQL Race condition demo
Go
8
star
29

torgo

BitTorrent client and a tool written in Go
Go
8
star
30

ancient

A toy compiled programming language
C
8
star
31

interlua

C++11/Lua bindings generator
C++
6
star
32

vulkangen

Vulkan C++ wrapper generator
Go
6
star
33

vrmp

VR media player for linux
Rust
5
star
34

lib99

C
5
star
35

libzbs

Experimental C++11 cross-platform software utility library
C++
5
star
36

shebang

Shebang scripting language
Go
4
star
37

changedir

utility that helps you maintain visited directories history
Go
3
star
38

tbclock

tty-clock clone based on termbox
C
3
star
39

sqlbatch

WIP
Go
3
star
40

cppmandel

Multihreaded mandelbrot set renderer using experimental C++ coroutines.
C++
3
star
41

shell-util

Shell scripting helper functions for deno
TypeScript
3
star
42

sx

Sx file format
Go
3
star
43

goal

Go makefile templates system
Go
2
star
44

GodotSlerpTest

Just a test case
GDScript
2
star
45

jsondiff-demo

github.com/nsf/jsondiff demo
JavaScript
2
star
46

depsinfo

analyze dependencies and libraries of a deno script
TypeScript
1
star
47

packeter

Channel <-> network connection adapter library
Go
1
star