Rand Stats

Terminal::UI

zef:bduggan

Actions Status Actions Status

Terminal::UI

A framework for building terminal interfaces.

Example

Create a box in full screen with some text in it, wait for a key, then exit:

use Terminal::UI 'ui';
ui.setup(:1pane);
ui.pane.put("Hello world.");
ui.get-key;
ui.shutdown;

╔══════════════╗
║Hello world.  ║
║              ║
╚══════════════╝

Example 2

Make a screen split with a line in the middle, with scrollable text on the top and bottom, and a selected row in the top box. The arrow keys (or j,k) move the selected line up and down. Tab switches to the other box.

use Terminal::UI 'ui';
ui.setup(:2panes);
ui.panes[0].put("$_") for 1..10;
ui.panes[1].put("$_") for <hello world>;
ui.interact;
ui.shutdown;

╔══════════════╗
║8             ║  <- selected in green, scrollable
║9             ║
║10            ║
╟──────────────╢
║hello         ║  <- selected in grey.
║world         ║
╚══════════════╝

Example 3

Like example 2, but also -- pressing Enter in the top box will some text about add the currently selected row to the bottom box:

ui.setup(:2panes);
ui.panes[0].put("$_") for 1..10;

ui.panes[0].on: select => -> :$raw, :$meta {
  ui.panes[1].put("you chose $raw!")
}

ui.interact;
ui.shutdown;

╔══════════════╗
║8             ║  <- press Enter, and…
║9             ║
║10            ║
╟──────────────╢
║you chose 8!  ║  <- …this appears!
║              ║
╚══════════════╝

Features and design goals

More examples

See the eg directory.

See also

https://blog.matatu.org/terminal-ui

Description

The best place for documentation is the examples directory.

There is also reference documentation with links to the source code -- see Terminal::UI. Other classes with documentation are:

BUGS

Probably!

If you find some bugs, or just have something to say, feel free to contact the author.

Author

Brian Duggan (bduggan at matatu.org)