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
Easy to quickly make a console interface with custom behavior, but practical defaults.
Scrolling with some optimization, such as using ANSI scroll region escape sequences.
Thread safe. Concurrency friendly. Unicode compatibile.
Dynamic geometry calculation, for smart handling of window resizing.
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, or reach out on the mailing list:
https://lists.sr.ht/~bduggan/raku-terminal-ui
Author
Brian Duggan (bduggan at matatu.org)