Skip to content

v0.24.0

https://github.com/ratatui/ratatui/releases/tag/v0.24.0

⚠️ 各バージョンの重大な変更点を簡単に確認できるように、重大な変更点 ドキュメントを作成しました。

RatatuiのWebサイト/本📚

あなたが今閲覧しているサイト (ratatui.rs) は、ratatui の新しいホームページです。今のところ、ここでは、役立つチュートリアル、コンセプト、FAQ セクションが多数含まれた本をホストしています。また、ランディング ページを作成する 計画 があり、もうすぐ 作成されます。

すべてのコードはhttps://github.com/ratatui/ratatui-websiteで利用できます


Frame: no more generics 🚫

以前に Backend パラメータを使用して Frame タイプを使用していた場合:

fn draw<B: Backend>(frame: &mut Frame<B>) {
// ...
}

ジェネリックオーバーバックエンド ( B ) を提供する必要はもうありません。

fn draw(frame: &mut Frame) {
// ...
}

New Demo / Examples ✨

素晴らしい新しいデモがあります!

demo2

試してみるには:

Terminal window
cargo run --example=demo2 --features="crossterm widget-calendar"

The code is available here.

カスタム ウィジェットを作成する方法を示す新しい例もあります。

custom widget

Terminal window
cargo run --example=custom_widget --features=crossterm

The code is available here.

最後に、RGB カラー オプションを示す例を追加しました。

RGB colors

Terminal window
cargo run --example=colors_rgb --features=crossterm

The code is available here.


ウィンドウサイズAPI🪟

ウィンドウ サイズを取得するための window_size という新しいメソッドが追加されました。ピクセル (幅、高さ) と列/行の情報の両方を含む WindowSize という構造体を返します。

let stdout = std::io::stdout();
let mut backend = CrosstermBackend::new(stdout);
println!("{:#?}", backend.window_size()?;

出力:

WindowSize {
columns_rows: Size {
width: 240,
height: 30,
},
pixels: Size {
width: 0,
height: 0,
},
}

この新しい API の目標は、ターミナルのサイズとレイアウト情報を共有し、長方形内での正確な画像配置とサイズ変更を可能にすることで、ターミナルエミュレーターでの画像処理を改善することです。

詳細については、プル リクエストをご覧ください: https://github.com/ratatui/ratatui/pull/276


BarChart: Render smol charts 📊

BarChart ウィジェットが全幅のラベルをレンダリングしないというバグがありました。これが修正され、3 行より小さいグラフをレンダリングできるようになりました。

たとえば、BarChart がレンダリングされ、1 行から 4 行に順番にサイズ変更される様子を次に示します。

8 b c d e f g h 8 i a b c d e f Group g h 8 i a 4 5 d e f Group 6 g 7 h 8 i b c a

bar_width(2) を 3 行に設定すると、次のようにレンダリングされます。

4 5 d e f Group 6 g 7 h 8 i b c a

ブロック: 境界線のカスタムシンボル🛡️

Block ウィジェットには、境界に使用されるシンボルを指定するために使用できる border_set という新しいメソッドがあります。

Block::default()
.borders(Borders::ALL)
.border_set(border::Set {
top_left: "1",
top_right: "2",
bottom_left: "3",
bottom_right: "4",
vertical_left: "L",
vertical_right: "R",
horizontal_top: "T",
horizontal_bottom: "B",
})

レンダリングされたとき:

1TTTTTTTTTTTTT2 L R 3BBBBBBBBBBBBB4

また、2 つの新しい境界線タイプも追加されました (QuadrantInsideQuadrantOutside)。

使用可能な境界線タイプについては、https://docs.rs/ratatui/latest/ratatui/widgets/block/enum.BorderType.html を参照してください。

また、ここで注目すべき重大な変更点があります:

  • BorderType::to_line_setto_border_set に名前変更されました
  • BorderType::line_symbolsborder_symbols に名前変更されました

Canvas: half block marker 🖼️

HalfBlock という新しいマーカーが、関連する HalfBlockGrid とともに Canvas ウィジェットに追加されました。

ハーフブロックを使用して画面上に「ピクセル」のグリッドを描画するというアイデアです。セルごとに 2 つの色を設定でき、ターミナルセルの高さは幅の約 2 倍であるため、正方形のピクセルのグリッドのように見えるハーフブロックのグリッドを描画できます。

Canvas::default()
.marker(Marker::HalfBlock)
.x_bounds([0.0, 10.0])
.y_bounds([0.0, 10.0])
.paint(|context| {
context.draw(&Rectangle {
x: 0.0,
y: 0.0,
width: 10.0,
height: 10.0,
color: Color::Red,
});
});

Rendered as:

█▀▀▀▀▀▀▀▀█
█ █
█ █
█ █
█ █
█ █
█ █
█ █
█ █
█▄▄▄▄▄▄▄▄█

ライン: RAWコンストラクター📝

raw を使用して文字列から Line ウィジェットを構築できます ( Span::rawText::raw に似ています) :

let line = Line::raw("test content");

ここで注意すべきことの1つは、マルチラインコンテンツが複数のスパンに変換され、新しいラインが削除されたことです。


Rect: is empty? 🛍️

新しく追加された is_empty メソッドを使用すると、Rect に領域があるかどうかを確認できます。

assert!(!Rect::new(1, 2, 3, 4).is_empty());
assert!(Rect::new(1, 2, 0, 4).is_empty());
assert!(Rect::new(1, 2, 3, 0).is_empty());

レイアウト: LRUキャッシュ📚

レイアウト キャッシュは、現在 LruCache を使用し、デフォルトのサイズは 16 エントリに設定されています。以前は、キャッシュは HashMap によってサポートされており、レイアウト パラメータの新しい組み合わせごとに新しいエントリが追加されるため、無制限に拡大することができました。

必要に応じてキャッシュ サイズを変更するための init_cache という新しいメソッドも追加しました。

Layout::init_cache(10);

これは、 layout::split() への呼び出しの前に呼び出される場合にのみ効果があります。


Backend: オプションの下線の色 🎨

Windows 7 は下線の色属性をサポートしていないため、オプションにする必要があります。そのために、 underline-color という機能 fla を追加し、デフォルトで有効にしました。

Windows 7 をサポートするアプリケーションでは、次のように無効にできます。

ratatui = { version = "0.24.0", default-features = false, features = ["crossterm"] }

様式化された文字列✨

[Stylize](https://docs.rs/ratatui/latest/ratatui/style/trait .Stylize.html) trait は、String に拡張される &str に対してすでに実装されていますが、String 自体に対しては実装されていません。

そこで、Span<'static> を返す String 用の Stylize 実装を追加しました。これにより、次のコードは一時的な値エラーで失敗するのではなく、問題なくコンパイルされます。

let s = format!("hello {name}!", "world").red();

これにより、String 値で Stylize メソッドを呼び出して、後でその String 値を使用することを想定している一部のコードが壊れる可能性があります。たとえば、次のコードは、スライスが作成および使用されるのではなく、Stringset_style によって使用されるため、コンパイルに失敗します。

let s = String::from("hello world");
let line = Line::from(vec![s.red(), s.green()]); // fails to compile

コンパイル エラーを修正するには、単に String を複製します。

let s = String::from("hello world");
let line = Line::from(vec![s.clone().red(), s.green()]);

スパン: RIP💀

Spans は 0.21.0 で非推奨となり、より人間工学的な Line タイプに置き換えられましたが、現在は削除されています。

Line 万歳!


その他 💼

  • BarChart の内部実装を簡素化し、ベンチマークを追加しました
  • BlockGaugeTableBarChart など、さまざまな場所にドキュメントを追加しました
  • コードベース全体で最新のモジュール構文を使用しました (xxx/mod.rs -> xxx.rs)
  • Framebuffer_mut メソッドを追加しました
  • 依存関係の更新と依存関係のバンプのために Dependabot を統合しました
  • 例をリファクタリングしました
  • 算術オーバーフローのエッジケースを修正しました