Skip to content

v0.23.0

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

すべてを冷却する

すでにクールな名前とロゴがありましたが、今ではクールな説明もあります。

ratatui: A Rust library to build rich terminal user interfaces or dashboards.
ratatui: A Rust library that's all about cooking up terminal user interfaces.

また、 tui-rs-revival から ratatui に組織を変更しました。

Barchart: 水平バー

これで、 Barchart ウィジェットのバーを水平にレンダリングできるようになりました。これは、利用可能なスペースをより効率的に使用するために特に役立ちます。

水平バーをレンダリングするために Direction 属性を使用するだけです。

let mut barchart = BarChart::default()
.block(Block::default().title("Data1").borders(Borders::ALL))
.bar_width(1)
.group_gap(1)
.bar_gap(0)
.direction(Direction::Horizontal);

Barchart ウィジェットでできることの例は次のとおりです (水平バーについては右下を参照) :

horizontal bars


Sixel の自発的なスキップ機能

Sixel は、ターミナルでサポートされているビットマップ グラフィック形式です。 「Sixel モード」に入るには、シーケンス ESC+Pq を送信します。「文字列ターミネータ」シーケンス ESC+\ は、モードを終了します。

Cell ウィジェットに、バッファを画面にコピー (差分) するときにセルをスキップできる set_skip メソッドが追加されました。これは、Sixel、iTerm、Kitty などのターミナル グラフィックス プロトコルからの画像で覆われたセルをバッファが上書きしないようにする必要がある場合に役立ちます。

詳細については、プル リクエストを参照してください: https://github.com/ratatui/ratatui/pull/215

このコンテキストでは、実験的な画像レンダリング クレートも存在します: ratatui-image

ratatui-image


テーブル/リスト: ハイライト間隔

Table および List ウィジェットに HighlightSpacing という新しいプロパティを追加しました。これは、highlight_spacing 関数を呼び出すことでオプションで設定できます。

このオプションが利用可能になる前は、以前に行が選択されていなかったときにテーブル内の行を選択すると、最初の列の先頭にある「ハイライト シンボル」の幅が追加され、テーブルのレイアウトが変更されました (選択解除の場合も同様です)。この新しく追加されたオプションを使用して、この動作を構成可能にしたいというのが私たちの考えです。

let list = List::new(items)
.highlight_symbol(">>")
.highlight_spacing(HighlightSpacing::Always);

現在、3つのバリエーションがあります。

  • Always: 選択シンボル列に常にスペースを追加します。
  • WhenSelected: 行が選択されている場合にのみ、選択シンボル列にスペースを追加します。
  • Never: 何かが選択されているかどうかに関係なく、選択シンボル列にスペースを追加しません。

Table: ライン配置のサポート

let table = Table::new(vec![
Row::new(vec![Line::from("Left").alignment(Alignment::Left)]),
Row::new(vec![Line::from("Center").alignment(Alignment::Center)]),
Row::new(vec![Line::from("Right").alignment(Alignment::Right)]),
])
.widths(&[Constraint::Percentage(100)]);

Now results in:

Left
Center
Right

スクロールバー: オプションのトラックシンボル

Scrollbar のトラックシンボルはオプションになり、他のウィジェットと構成を簡素化します。また、特別なブロック文字を持つブロックで Scrollbar をタンデムで簡単に使用することができます。

変化の1つは、 track_symbol を次の方法で設定する必要があることです。

let scrollbar = Scrollbar::default().track_symbol("-");
let scrollbar = Scrollbar::default().track_symbol(Some("-"));

また、複数の異なるトラックシンボルで構成されたカスタムトラックをレンダリングすることもできます。


symbols::scrollbar module

シンボルとセットは widgets::scrollbar から symbols::scrollbar に移動されました。これにより、他のシンボル セットとの一貫性が保たれます。また、scrollbar モジュールを非公開にしました。

これは重大な変更であるため、コードを更新して ratatui::symbols::scrollbar::* (または必要な特定のシンボル) のインポートを追加する必要があります。


アルファリリース

アルファ リリース (つまりプレリリース) は *毎週土曜日* に作成され、この GitHub Actions ワークフロー の助けを借りて自動化されます。 これは、安定リリースに到達する前に ratatui をテストしたり、不安定な機能や実験的な機能を使用したりする場合に特に便利です。

バージョン管理スキームは v<version>-alpha.<num> です。例: v0.22.1-alpha.2

また、アルファリリースとドキュメントのコンテキストでの貢献については、次の問題を参照してください: https://github.com/ratatui/ratatui/issues/412


Example GIFs

examples/ ディレクトリに各例の GIF を追加し、プレビュー用に README.md を追加しました。

これにより、各例を実行せずに、その内容を簡単に確認できるようになります。

参照: https://github.com/ratatui/ratatui/blob/main/examples/README.md

ここで注目すべき点は、一連の手順から GIF を生成するために vhs を使用したことです。例:

# This is a vhs script. See https://github.com/charmbracelet/vhs for more info.
# To run this script, install vhs and run `vhs ./examples/demo.tape`
Output "target/demo.gif"
Set Theme "OceanicMaterial"
Set Width 1200
Set Height 1200
Set PlaybackSpeed 0.5
Hide
Type "cargo run --example demo"
Enter
Sleep 2s
Show
Sleep 1s
Down@1s 12
Right
Sleep 4s
Right
Sleep 4s

結果:

ratatui デモ

これらの GIF は https://vhs.charm.sh でもホストしていますが、すべてを GitHub に移行すると問題が発生します。これに関して貢献することに興味がある場合は、https://github.com/ratatui/ratatui/issues/401 を参照してください。


一般的な特徴

strum クレートを利用して、列挙型に DisplayFromStr の実装を追加しました。

また、可能な場合は、DebugDefaultCloneCopyEqPartialEqOrdPartialOrdHash などの一般的なtrait を構造体/列挙型に実装しました。


テストカバレッジ🧪

ratatui90% test coverage を持っています!

さまざまなウィジェットのテスト/ベンチマークを追加したすべての人に叫びました。


No unsafe ⚠️

現在、ratatui では unsafe code禁止 されています。 また、最適化の目的で unsafe コードを使用することについての過去の このディスカッション も参照してください。


本📕

より詳細な ratatui ドキュメントと使用例のために本に取り組んでいます。 https://ratatui.rs/で読むことができます。

リポジトリ: https://github.com/ratatui/ratatui-website


その他

  • テスト バッファ全体をデシリアライズ/デシリアライズするために、TestBuffer の serde 属性を拡張します。
  • Rect のサイズを互いに近づけるための弱い制約を追加します。
  • Layout::split 関数を簡素化します。
  • Barchart、Block、Layout、その他のウィジェットのさまざまなバグ修正と改善。
  • さまざまなウィジェットにドキュメントを追加し、既存のドキュメントを改善します。
  • 色と修飾子の例を追加します。
  • #ratatui:matrix.org に Matrix ブリッジを作成しました。