quvyta
Язык: Русский

quvyta-framework

qframe

Фреймворк на Rust для терминальных приложений. Он даёт среду выполнения, набор виджетов, файлы тем, значков и языков — с одним правилом для внешнего вида: форму даёт цвет, а не скобки и не символы рамок.

cargo add quvyta-framework
Витрина за 25 секунд, записана её собственными тестами: живой пример панели проходит через темы Nordic, Amber и Monochrome, затем палитра команд открывает страницу вкладок и переходит от живой демонстрации к её коду.

Самое маленькое приложение

Данные, вид, который их рисует, и обновление, которое их меняет.

Среда выполнения превращает клавиши и щелчки в сообщения и перерисовывает экран только тогда, когда что-то изменилось. Пакет называется 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. Каждый глиф в любом режиме занимает ровно одну ячейку.

  • Девять языков

    Английский, турецкий, немецкий, испанский, французский, бразильский португальский, русский, упрощённый китайский и японский — для каждого компонента; слова вашего приложения лежат рядом.

  • Клавиатура и мышь

    Каждый элемент отвечает обеим, по одной и той же лестнице тонов: покой, наведение, фокус, нажатие.

  • Движение, которое шепчет

    Длительности берутся из темы, а предпочтение уменьшенного движения соблюдается везде.

Четыре темы

Один и тот же экран в четырёх темах.

Каждый цвет берётся из темы, поэтому всё приложение меняется одной настройкой. Выберите тему ниже, и та же панель примет её цвета; переключатель — четыре радиокнопки и ни строчки сценария.

Тема
Витрина в теме Iris, на той же панели: график загрузки процессора, шкалы ресурсов, полоса на каждую службу, значки состояния и большие часы
Iris: цвета семьи, и этого сайта тоже.
Витрина в теме Nordic, на той же панели: график загрузки процессора, шкалы ресурсов, полоса на каждую службу, значки состояния и большие часы
Nordic: холодные синие тона.
Витрина в теме Amber, на той же панели: график загрузки процессора, шкалы ресурсов, полоса на каждую службу, значки состояния и большие часы
Amber: тёплые тона повсюду.
Витрина в теме Monochrome, на той же панели: график загрузки процессора, шкалы ресурсов, полоса на каждую службу, значки состояния и большие часы
Monochrome: серые тона повсюду, цвет оставлен только состоянию.

Витрина

Страница для каждого компонента.

Установите витрину и запустите qframe: у каждого компонента есть живая демонстрация, его код, руководство и справка. Каждая картинка на этой странице — один из её тестовых экранов, нарисованный без терминала.

cargo install quvyta-framework-showcase && qframe

Документация

Где читать дальше.