v0.27.0
https://github.com/ratatui/ratatui/releases/tag/v0.27.0
このリリースについては、 breaking changes を参照してください。
ラインゲージ: バックグラウンドスタイル📊
LineGauge::gauge_style
は非推奨となり、代わりに filled_style
および unfilled_style
メソッドが採用されました。これにより、さまざまな状態の前景/背景スタイルを設定できるようになります。
let gauge = LineGauge::default() .filled_style(Style::default().fg(Color::Green)) .unfilled_style(Style::default().fg(Color::White)) .ratio(0.43);
また、 Line Gauge example を追加しました。
List: Navigation Methods 🧭
以下の方法を使用して、List
ウィジェット内を移動できるようになりました。
let mut state = ListState::default();state.select_first();state.select_next();state.select_previous();state.select_last();
また、ナビゲート時に、選択されたインデックスをリストの境界に固定します。
テキスト: ディスプレイからの変換
Text
、Span
、Line
は、Display
trait を実装する任意の型からの変換をサポートするようになりました。
let text = "line1line2".to_text();let span = (6.66).to_span();let line = 42.to_line();
これは、それぞれ新しく追加された ToText
、ToSpan
、ToLine
trait によって可能になりました。
Palette Colors 🎨
⚠️ これは「パレット」機能フラグの背後にあります。
Ratatui で パレット クレートから色を使用できるようになりました。
use palette::{LinSrgb, Srgb};use ratatui::style::Color;
let color = Color::from(Srgb::new(1.0f32, 0.0, 0.0));let color = Color::from(LinSrgb::new(1.0f32, 0.0, 0.0));
新しい境界線は🖼️を設定する
border::EMPTY
空のスペースシンボル (░) を使用します
let block = Block::bordered().title("Title").border_set(border::EMPTY);
░░░░░░░░░░ ░░░░ ░░ ░░░░ ░░ ░░░░ ░░░░░░░░░░
これは、境界線用のスペースを割り当て、実際に境界線を描画せずに境界線スタイルをブロックに適用する必要がある場合に便利です。これにより、タイトル コンテンツだけでなく、タイトル領域全体またはブロックのスタイルを設定できます。
border::FULL
フルブロックシンボル (█) を使用します
let block = Block::bordered().title("Title").border_set(border::FULL);
█████xx██xx█████
Re-export Backends 📤
crossterm
、termion
、termwiz
はそれぞれ ratatui::{crossterm, termion, termwiz}
としてアクセスできるようになりました。
これにより、Ratatui クレートを依存関係として追加するだけで、バックエンド クレートを依存関係として追加することなく、選択したバックエンドを使用できるようになります。
既存のコードを更新するには、crossterm::
のすべてのインスタンスを ratatui::crossterm::
に、
termion::
を ratatui::termion::
に、termwiz::
を ratatui::termwiz::
に置き換えます。
crossterm
の例:
use crossterm::event::{Event, KeyCode, KeyEvent, KeyEventKind};use ratatui::crossterm::event::{Event, KeyCode, KeyEvent, KeyEventKind};
そして、Cargo.toml
から crossterm
を削除できます。
プレリュードを更新する
suggestion on Reddit に基づいて、 prelude
モジュールに変更を加えました。
注: このモジュールを使用すると、膨大な量のインポートなしで
ratatui
を簡単に使用できます!例えばuse ratatui::prelude::*;
次の項目はプレリュードから削除されました。
style::Styled
- このtrait は、Stylize trait をサポートしたいウィジェットに便利ですが、ウィジェットには 2 つのstyle
メソッドと 1 つのset_style
メソッドがあるため、複雑になります。symbols::Marker
- この項目は、Canvas
ウィジェットに描画する必要があるコードによって使用されますが、ライブラリのほとんどのユーザーが使用する一般的な項目ではありません。terminal::{CompletedFrame, TerminalOptions, Viewport}
- これらの項目は、ターミナルと対話する必要があるコードによって使用されることはほとんどなく、通常はどのアプリでも 1 回しか使用されません。
次の項目がプレリュードに追加されました:
layout::{Position, Size}
- これらの項目は、レイアウト システムと対話する必要があるコードによって使用されます。これらは、最近のいくつかのリリースで追加された新しい項目であり、より自由に使用する必要があります。
Tracing Example 🔍
TUI アプリのデバッグ方法を知りたいですか? println
を試したけどうまくいかなかった? お手伝いします!
ファイルにログを記録する方法を示す例を追加しました:
- コード: https://github.com/ratatui/ratatui/blob/main/examples/tracing.rs
- Ratatui フォーラムでの関連ディスカッション: https://forum.ratatui.rs/t/how-do-you-println-debug-your-tui-programs/66
ハイパーリンクの例🔗
ターミナルでハイパーリンクを使用するための概念実証例を追加しました。
コードは here を利用できます。
Cell: New methods 🔧
次のようにして空の Cell
を作成できるようになりました。
let mut cell = Cell::EMPTY;assert_eq!(cell.symbol(), " ");
次のように構築を簡素化するために、定数 Cell:new
メソッドも追加しました。
let mut cell = Cell::default();cell.set_symbol("a");let cell = Cell::new("a");
Stylize::bg()
ジェネリック🔄を作成する
以前は、 Stylize::bg()
は Color
を受け入れましたが、 Into<Color>
を受け入れます。これにより、呼び出しスコープからより柔軟なタイプが可能になりますが、呼び出し範囲のタイプの推論を破ることができます。
let srgb_color: Srgb<u8> = Srgb::new(255, 0, 0);foo.bg(srgb_color);
Writer Methods on Backends 🖋️
crossterm
および termion
バックエンドに、基盤となるライターにアクセスするための writer()
および writer_mut()
メソッドが追加されました。
これは、これまでに何が書かれたかを確認したい場合などに便利です。
let terminal = Terminal::new(CrosstermBackend::new(Vec::<u8>::new()));let ui = |frame| { ... };
terminal.draw(ui);
let crossterm_backend = terminal.backend();let buffer = crossterm_backend.writer();
不足しているVHSテープを追加する📼
いくつかの例のデモがありませんでした。それらが追加されました!
List: Remove deprecated start_corner()
🚫
List::start_corner
は v0.25 で非推奨になりました。
代わりに List::direction
と ListDirection
を使用してください:
list.start_corner(Corner::TopLeft); list.start_corner(Corner::TopRight);// This is not an error, BottomRight rendered top to bottom previously list.start_corner(Corner::BottomRight);// all becomes list.direction(ListDirection::TopToBottom);
list.start_corner(Corner::BottomLeft);// becomes list.direction(ListDirection::BottomToTop);
layout::Corner
も完全に削除されます。
パディング: zero()
🚫を非難する
今では一定です!
Padding::zero()Padding::ZERO
Buffer: Improve Performance ⚡️
Buffer::filled
は参照を取得する代わりにセルを移動するようになりました。
Buffer::filled(area, &Cell::new("X"));Buffer::filled(area, Cell::new("X"));
rect: パフォーマンスの向上⚡️
Margin
は参照なしで渡す必要があります:
let area = area.inner(&Margin {let area = area.inner(Margin { vertical: 0, horizontal: 2,});
他の💼
Position
とSize
がDisplay
を実装するようになりました (#1162)- 文字列を
Line
に変換するときに改行を削除します (#1191)Line::from("a\nb")
が 1 つではなく 2 つのSpan
を持つLine
を返すようになりました
- ゼロ幅の文字が正しくレンダリングされるようにします (#1165)
- &str と String をレンダリングするときに領域の幅を尊重します (#1177)
- ベンチマークの一貫性を改善します(#1126)
“I can’t believe it! A real gourmet kitchen, and I get to watch!” – Remy