Help language development. Donate to The Perl Foundation
Termbox
Termbox is "a library for writing text-based user interfaces". This module provides Raku bindings to this library.
use Termbox :ALL;
if tb-init() -> $ret {
note "tb-init() failed with error code $ret";
exit 1;
}
END tb-shutdown;
for "Press ESC to exit!".encode.list -> $c {
state $x = 5;
tb-change-cell( $x++, 5, $c, TB_COLOR_BLACK, TB_COLOR_WHITE );
}
tb-present;
my $events = Supplier.new;
start {
while tb-poll-event( my $ev = Termbox::Event.new ) { $events.emit: $ev }
}
react whenever $events.Supply -> $ev {
given $ev.type {
when TB_EVENT_KEY {
given $ev.key {
when TB_KEY_ESC { done }
}
}
}
}
None of the following functions are exported by default. They can be accessed through the Termbox
package (as in Termbox::init
) or imported with the :subs
tag. When imported, they gain the tb-
prefix (such that init
becomes tb-init
, etc).
See also encode-string
for a higher-level version of this function.
See also decode-string
for a higher-level version of this function.
The following functions are added as a convenience for the UTF-8 helpers provided by Termbox itself. These are likely much simpler to use in Raku code.
Takes a non-empty string and returns an Int representing the number used to encode it by Termbox.
On error throws an exception.
Takes an Int with the integer representation of a string (such as that returned by encode-string
and returns it decoded as a Str.
On error throws an exception.
Like with the functions described above, none of the following constants are exported by default. They can be accessed through the Termbox
package (as in Termbox::WHITE
) or imported with the different tags described below.
When imported, they gain the TB_
prefix (such that WHITE
becomes TB_WHITE
, etc).
Imported with the :keys
tag.
These are a safe subset of terminfo keys, which exist on all popular terminals. Use only these to stay "truly portable", according to the Termbox documentation.
KEY_F1
KEY_F2
KEY_F3
KEY_F4
KEY_F5
KEY_F6
KEY_F7
KEY_F8
KEY_F9
KEY_F10
KEY_F11
KEY_F12
KEY_INSERT
KEY_DELETE
KEY_HOME
KEY_END
KEY_PGUP
KEY_PGDN
KEY_ARROW_UP
KEY_ARROW_DOWN
KEY_ARROW_LEFT
KEY_ARROW_RIGHT
KEY_MOUSE_LEFT
KEY_MOUSE_RIGHT
KEY_MOUSE_MIDDLE
KEY_MOUSE_RELEASE
KEY_MOUSE_WHEEL_UP
KEY_MOUSE_WHEEL_DOWN
The rest are ASCII code points below SPACE
character and a BACKSPACE
key.
KEY_CTRL_TILDE
KEY_CTRL_2
KEY_CTRL_A
KEY_CTRL_B
KEY_CTRL_C
KEY_CTRL_D
KEY_CTRL_E
KEY_CTRL_F
KEY_CTRL_G
KEY_BACKSPACE
KEY_CTRL_H
KEY_TAB
KEY_CTRL_I
KEY_CTRL_J
KEY_CTRL_K
KEY_CTRL_L
KEY_ENTER
KEY_CTRL_M
KEY_CTRL_N
KEY_CTRL_O
KEY_CTRL_P
KEY_CTRL_Q
KEY_CTRL_R
KEY_CTRL_S
KEY_CTRL_T
KEY_CTRL_U
KEY_CTRL_V
KEY_CTRL_W
KEY_CTRL_X
KEY_CTRL_Y
KEY_CTRL_Z
KEY_ESC
KEY_CTRL_LSQ_BRACKET
KEY_CTRL_3
KEY_CTRL_4
KEY_CTRL_BACKSLASH
KEY_CTRL_5
KEY_CTRL_RSQ_BRACKET
KEY_CTRL_6
KEY_CTRL_7
KEY_CTRL_SLASH
KEY_CTRL_UNDERSCORE
KEY_SPACE
KEY_BACKSPACE2
KEY_CTRL_8
These are modifier constants. MOD_MOTION
in a mouse event indicates a dragging event.
MOD_ALT
MOD_MOTION
Imported with the :styles
tag.
DEFAULT
BLACK
RED
GREEN
YELLOW
BLUE
MAGENTA
CYAN
WHITE
These are font attributes. It is possible to use multiple attributes by combining them using bitwise OR (+|
). Although, colors cannot be combined, you can combine attributes and a single color.
BOLD
UNDERLINE
REVERSE
Imported with the :errors
tag.
EUNSUPPORTED_TERMINAL
EFAILED_TO_OPEN_TTY
EPIPE_TRAP_ERROR
Imported with the :events
tag.
EVENT_KEY
EVENT_RESIZE
EVENT_MOUSE
Imported with the :modes
tag.
HIDE_CURSOR
INPUT_CURRENT
INPUT_ESC
INPUT_ALT
INPUT_MOUSE
OUTPUT_CURRENT
OUTPUT_NORMAL
OUTPUT_256
OUTPUT_216
OUTPUT_GRAYSCALE
José Joaquín Atria [email protected]
Copyright 2020 José Joaquín Atria
This library is free software; you can redistribute it and/or modify it under the Artistic License 2.0.