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。どのモードでも、グリフはちょうど 1 セル分です。

  • 九つの言語

    英語、トルコ語、ドイツ語、スペイン語、フランス語、ブラジルポルトガル語、ロシア語、簡体字中国語、日本語を全部品に用意。あなたのアプリの言葉もその隣に置けます。

  • キーボードとマウス

    どの部品も両方に応え、同じ色調の段階をたどります。静止、ホバー、フォーカス、押下。

  • ささやくような動き

    時間の長さはテーマから来て、動きを減らす設定はどこでも尊重されます。

四つのテーマ

同じ画面を、四つのテーマで。

色はすべてテーマから来るので、設定ひとつでアプリ全体が変わります。下から選べば同じダッシュボードがその色をまといます。切り替えはラジオボタン四つだけで、スクリプトは使いません。

テーマ
Iris テーマのショーケース、同じダッシュボード: CPU のスパークライン、リソースのメーター、サービスごとのバー、状態バッジ、大きな時計
Iris: ファミリー自身の色、そしてこのサイトの色。
Nordic テーマのショーケース、同じダッシュボード: CPU のスパークライン、リソースのメーター、サービスごとのバー、状態バッジ、大きな時計
Nordic: 涼しいブルー。
Amber テーマのショーケース、同じダッシュボード: CPU のスパークライン、リソースのメーター、サービスごとのバー、状態バッジ、大きな時計
Amber: 全体を通して暖かい色調。
Monochrome テーマのショーケース、同じダッシュボード: CPU のスパークライン、リソースのメーター、サービスごとのバー、状態バッジ、大きな時計
Monochrome: 全体をグレーに、色は状態のためだけに残す。

ショーケース

部品ごとに 1 ページ。

ショーケースをインストールして qframe を実行してください。どの部品にも実演、コード、ガイド、リファレンスがあります。このページの画像はどれも、ターミナル無しで描かれたテスト画面のひとつです。

cargo install quvyta-framework-showcase && qframe

ドキュメント

もっと読むなら。