v0.26.3
https://github.com/ratatui/ratatui/releases/tag/v0.26.3
Ratatuiフォーラム🌐
Rust&Tui愛好家のために、真新しい Ratatui Forum 🐭をお知らせします。
ここに参加: https://forum.ratatui.rs
ここでは、Rust/Ratatuiの質問にサポートを受けて、プロジェクトを共有できます。
Fix Unicode Truncation Bug 🐛
Ratatui 0.26.2
を使用している場合は、次のバグに遭遇している可能性があります:
panic occurred at
ratatui-0.26.2/src/text/line.rs:477:59
byte index 51 is not a char boundary; it is inside ‘で’ (bytes 49..52) of🦀 RFC8628 OAuth 2.0 Device Authorization GrantでCLIからGithubのaccess tokenを取得する
この問題は この PR で導入され、現在は 0.26.3
で修正されています。
#[test]fn truncation_works_with_emoji() { let line = Line::raw( "123456789🦀"); let mut buf = Buffer::empty(Rect::new(0, 0, 10, 1)); line.render(buf.area, &mut buf); assert_buffer_eq!(buf, Buffer::with_lines(vec!["123456789 "]));}
- Details: https://github.com/ratatui/ratatui/issues/1032
- Implementation: https://github.com/ratatui/ratatui/pull/1089
色: より良いシリアル化🎨
Color::Rgb
は、その価値の16進表現としてシリアル化されます。
たとえば、 Color::Rgb(255, 0, 255)
は {"Rgb": [255, 0, 255]}
ではなく "#FF00FF"
としてシリアル化されます。
let json_rgb = serde_json::to_string(&Color::Rgb(255, 0, 255))?;assert_eq!(json_rgb, r##""#FF00FF""##);assert_eq!( serde_json::from_str::<Color>(&json_rgb)?, Color::Rgb(255, 0, 255));
同様に、 Color::Indexed
はインデックスの文字列のみとしてシリアル化されます。
たとえば、serde_jsonでは、 Color::Indexed(10)
は {"Indexed": 10}
ではなく "10"
としてシリアル化されます。
let json_indexed = serde_json::to_string(&Color::Indexed(10))?;assert_eq!(json_indexed, r#""10""#);assert_eq!( serde_json::from_str::<Color>(&json_indexed)?, Color::Indexed(10));
Faster Rendering 🚀
crossterm
バックエンドの前景色と背景色の組み合わせの変更を最大 20% 高速化しました! 🔥
詳細については、以下を参照してください。
SetColors コマンドを変更して、バイト数の多い複数回の書き込みではなく、1 回の書き込みで両方の色を一度に書き込むようにしました。これにより、M2 Macbook Pro の iTerm2 で colors_rgb の例をテストしたときに、fps が 15 ~ 25% 増加しました。
assert_buffer_eq
マクロ🚫を非難する
assert_buffer_eq
は、標準の assert_eq
マクロに置き換えられ、非推奨になりました。
assert_buffer_eq!(actual, expected);assert_eq!(actual, expected);
また、 TestBackend
‘のバッファが予想される行に等しいかどうかを確認するために TestBackend::assert_buffer_lines
を導入しました。
使用の例は次のとおりです。
#[test]fn buffer() { let backend = TestBackend::new(10, 2); backend.assert_buffer_lines([" "; 2]);}
したがって、使用方法は次のように簡略化できます。
backend.assert_buffer(&Buffer::with_lines([" "; 2]));backend.assert_buffer_lines([" "; 2]);
Use Block::bordered
🟦
コードベース全体で、境界付きブロックを作成する新しい方法に切り替えました: Block::bordered
Block::default().borders(Borders::ALL);Block::bordered();
これは 0.26 で追加され、必要なインポートが 1 つ減りました。
公開されたエラータイプ🔍
カスタムエラー実装で ParseColorError
をラップしようとしたことがありますか?
9 | ParseColor(ratatui::style::color::ParseColorError), | ^^^^^ --------------- struct `ParseColorError` is not publicly re-exported | | | private module
ParseColorError
が ratatui::style::ParseColorError
として re-exported されるため、これは可能になりました。
Constants ♾️
定数関数と型を利用するために、いくつかのウィジェットに改良を加えました:
他の💼
- パフォーマンスを向上!
- マクロを使用して
Buffer::filled
を簡素化 (#1036) - 分割されたエルゴノミクス ユーティリティを使用するときにメモリの割り当てを回避する (#1105)
- マルチバイト Unicode 文字で動作するように user_input の例を変更 (#1069)
- ZWSP を処理する (ゼロ幅の空白での折り返しを許可する) (#1074)
- Buffer のデバッグ パニックを修正(#1098)
- Buffer の index_of メソッドの呼び出し元を追跡 (#1046)
rstest
を使用してテスト ケースを簡素化 (#1095)- 一部の clippy lint を有効にして修正 (
clippy::cargo_common_metadata
およびclippy::cargo
を含む) - キーワードやホームページなどの crate メタデータを更新