Skip to content

v0.26.3

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

Ratatuiフォーラム🌐

Rust&Tui愛好家のために、真新しい Ratatui Forum 🐭をお知らせします。

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 "]));
}

色: より良いシリアル化🎨

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

ParseColorErrorratatui::style::ParseColorError として re-exported されるため、これは可能になりました。


Constants ♾️

定数関数と型を利用するために、いくつかのウィジェットに改良を加えました:

  • TableState::new を定数にする (#1040)
  • キャンバス マップ データを静的ではなく const に変更する (#1037)
  • カレンダーに定数関数を使用する (#1039)

他の💼

  • パフォーマンスを向上!
  • マクロを使用して 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 メタデータを更新

🧀