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 ✨
素晴らしい新しいデモがあります!
試してみるには:
cargo run --example=demo2 --features="crossterm widget-calendar"
The code is available here.
カスタム ウィジェットを作成する方法を示す新しい例もあります。
cargo run --example=custom_widget --features=crossterm
The code is available here.
最後に、RGB カラー オプションを示す例を追加しました。
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 行に順番にサイズ変更される様子を次に示します。
bar_width(2)
を 3 行に設定すると、次のようにレンダリングされます。
ブロック: 境界線のカスタムシンボル🛡️
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", })
レンダリングされたとき:
また、2 つの新しい境界線タイプも追加されました (QuadrantInside
、QuadrantOutside
)。
使用可能な境界線タイプについては、https://docs.rs/ratatui/latest/ratatui/widgets/block/enum.BorderType.html を参照してください。
また、ここで注目すべき重大な変更点があります:
BorderType::to_line_set
がto_border_set
に名前変更されましたBorderType::line_symbols
がborder_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::raw
と Text::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 値を使用することを想定している一部のコードが壊れる可能性があります。たとえば、次のコードは、スライスが作成および使用されるのではなく、String
が set_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
の内部実装を簡素化し、ベンチマークを追加しましたBlock
、Gauge
、Table
、BarChart
など、さまざまな場所にドキュメントを追加しました- コードベース全体で最新のモジュール構文を使用しました (
xxx/mod.rs
->xxx.rs
) Frame
にbuffer_mut
メソッドを追加しました- 依存関係の更新と依存関係のバンプのために
Dependabot
を統合しました - 例をリファクタリングしました
- 算術オーバーフローのエッジケースを修正しました