quvyta-framework
qframe
Фреймворк на Rust для терминальных приложений. Он даёт среду выполнения, набор виджетов, файлы тем, значков и языков — с одним правилом для внешнего вида: форму даёт цвет, а не скобки и не символы рамок.
cargo add quvyta-frameworkСамое маленькое приложение
Данные, вид, который их рисует, и обновление, которое их меняет.
Среда выполнения превращает клавиши и щелчки в сообщения и перерисовывает экран только тогда, когда что-то изменилось. Пакет называется quvyta-framework, а библиотека — qframe, поэтому в коде она подключается как use qframe::prelude::*;.
То же приложение работает в тестах вовсе без терминала: нажимайте клавиши, щёлкайте и читайте экран обратно как текст.
Текст, который видят люди, живёт в языковых файлах и читается через t!("key"); пример для краткости обходится обычными строками. Rust 1.95 или новее.
use qframe::prelude::*;
#[derive(Default)]
struct Counter {
count: i32,
}
#[derive(Clone)]
enum Msg {
Increment,
}
impl App for Counter {
type Msg = Msg;
fn update(&mut self, msg: Msg) -> Command<Msg> {
match msg {
Msg::Increment => self.count += 1,
}
Command::none()
}
fn view(&self, ui: &mut View<'_, Msg>) {
ui.column(|ui| {
ui.add(Text::new(format!("Count: {}", self.count)));
ui.add(Button::new("Add one").variant("primary").on_press(Msg::Increment));
})
.gap(1);
}
}
// Тесты ведут то же приложение без терминала.
let mut app = Harness::new(Counter::default(), 30, 4);
app.press("tab").press("enter");
assert!(app.screen().contains("Count: 1"));
Что идёт вместе с ним
Всё, что нужно бережно сделанному терминальному приложению.
- Виджеты
Кнопки, списки, деревья, таблицы, вкладки, формы и мастера, поля даты, времени и длительности, выбор файлов и папок, меню, всплывающие сообщения и подсказки, палитра команд, графики, просмотр Markdown, кода и журналов, а также терминал.
- Темы
Iris, Nordic, Amber и Monochrome. Каждый цвет берётся из темы, поэтому всё приложение меняется одной настройкой.
- Значки в трёх режимах
Nerd Font, обычный Unicode и ASCII. Каждый глиф в любом режиме занимает ровно одну ячейку.
- Девять языков
Английский, турецкий, немецкий, испанский, французский, бразильский португальский, русский, упрощённый китайский и японский — для каждого компонента; слова вашего приложения лежат рядом.
- Клавиатура и мышь
Каждый элемент отвечает обеим, по одной и той же лестнице тонов: покой, наведение, фокус, нажатие.
- Движение, которое шепчет
Длительности берутся из темы, а предпочтение уменьшенного движения соблюдается везде.
Четыре темы
Один и тот же экран в четырёх темах.
Каждый цвет берётся из темы, поэтому всё приложение меняется одной настройкой. Выберите тему ниже, и та же панель примет её цвета; переключатель — четыре радиокнопки и ни строчки сценария.
Витрина
Страница для каждого компонента.
Установите витрину и запустите qframe: у каждого компонента есть живая демонстрация, его код, руководство и справка. Каждая картинка на этой странице — один из её тестовых экранов, нарисованный без терминала.
cargo install quvyta-framework-showcase && qframeДокументация
Где читать дальше.
- Документация API на docs.rs
Каждый общедоступный элемент, описанный по-английски.
- Репозиторий
Библиотека, витрина и принципы, по которым они сделаны.