v0.21.0
https://github.com/ratatui/ratatui/releases/tag/v0.21.0
新しいバックエンド: termwiz
ratatui
は、 wezterm を動かす「ターミナルウィザードリー」クレートである termwiz
という新しいバックエンドをサポートします。
それを使用するには、 Cargo.toml
で termwiz
機能を有効にします:
[dependencies.ratatui]version = "0.21.0"features = ["termwiz"]default-features = false
次に、ターミナルを作成するために TermwizBackend
オブジェクトを使用できます。 ratatui
+ termwiz
を使用して、画面上のテキストを5秒間表示する簡単なプログラムです。
use ratatui::{backend::TermwizBackend, widgets::Paragraph, Terminal};use std::{ error::Error, thread, time::{Duration, Instant},};
fn main() -> Result<(), Box<dyn Error>> { let backend = TermwizBackend::new()?; let mut terminal = Terminal::new(backend)?; terminal.hide_cursor()?;
let now = Instant::now(); while now.elapsed() < Duration::from_secs(5) { terminal.draw(|f| f.render_widget(Paragraph::new("termwiz example"), f.size()))?; thread::sleep(Duration::from_millis(250)); }
terminal.show_cursor()?; terminal.flush()?; Ok(())}
New widget: Calendar
カレンダー ウィジェットが追加されました。これは元々 extra-widgets リポジトリの一部でした。
この新しいウィジェットは time
クレートに依存しているため、余分な依存関係を回避するために widget-calendar
機能の背後にゲートしました。
[dependencies.ratatui]version = "0.21.0"features = ["widget-calendar"]
使用例は次のとおりです。
Monthly::new( time::Date::from_calendar_date(2023, time::Month::January, 1).unwrap(), CalendarEventStore::default(),).show_weekdays_header(Style::default()).show_month_header(Style::default()).show_surrounding(Style::default()),
Results in:
January 2023 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1 2 3 4
新しいウィジェット: 円
Circle
ウィジェットは、ワールドマップに精度半径を表示するユースケースで追加されています。
Canvas
でそれを使用する方法の例を次に示します。
Canvas::default() .paint(|ctx| { ctx.draw(&Circle { x: 5.0, y: 2.0, radius: 5.0, color: Color::Reset, }); }) .marker(Marker::Braille) .x_bounds([-10.0, 10.0]) .y_bounds([-10.0, 10.0]),
結果:
⡠⠤⢤⡀⢸⡁ ⡧ ⠑⠒⠚⠁
Inline Viewport
これは非常に要望の多かった機能で、当初の実装は @fdehau 自身によって行われました。Atuin の人々が実装を完了し、ようやく新しいリリースに組み込むことができてうれしく思います。
インライン ビューポートとは、コンテンツを表示するために確保されているターミナル ウィンドウの長方形のセクションを指します。
リポジトリには、複数のファイルを並行してダウンロードするシミュレーションの例があります: https://github.com/ratatui/ratatui/blob/main/examples/inline.rs
ブロック: 下のタイトル
タイトルをブロックの一番上の行にのみ配置する前に。これで、下の>列に置くことができます!革新的。
たとえば、タイトルを下部と中央に配置します。
Paragraph::new("ratatui") .alignment(Alignment::Center) .block( Block::default() .title(Span::styled("Title", Style::default())) .title_on_bottom() .title_alignment(Alignment::Center) .borders(Borders::ALL), )
結果:
┌─────────────────────┐│ ratatui ││ │└────────Title────────┘
Block: support adding padding
Block
内に境界から一定の距離を置いてウィジェットをレンダリングする場合は、外側の Block
に基づいて別の Layout
要素を作成し、マージンを追加して Widget
をその中にレンダリングする必要があります。ブロック要素に padding プロパティを追加すると、この 2 番目のレイアウトの作成がスキップされます。
このプロパティは、テキストをレンダリングするときに特に機能します。パディング付きのブロックを作成し、それをテキスト ラッパーとして使用すればよいためです。
let block = Block::default() .borders(Borders::ALL) .padding(Padding::new(1, 1, 2, 2));let paragraph = Paragraph::new("example paragraph").block(block);f.render_widget(paragraph, area);
.inner
メソッドを使用すると、別のウィジェットをレンダリングすることも簡単です。
let block = Block::default().borders(Borders::ALL).padding(Padding { left: todo!(), right: todo!(), top: todo!(), bottom: todo!(),});let inner_block = Block::default().borders(Borders::ALL);let inner_area = block.inner(area);
f.render_widget(block, area);f.render_widget(inner_block, inner_area);f.render_widget(paragraph, area);
テキスト: 安全なデータを表示する
Masked
と呼ばれる新しいタイプが、マスク文字を使用してデータをマスキングするためにテキスト関連タイプに追加されます。例の使用法は次のとおりです。
Line::from(vec![ Span::raw("Masked text: "), Span::styled( Masked::new("password", '*'), Style::default().fg(Color::Red), ),])
結果:
Masked text: ********
border!
マクロ
border!
マクロが追加されました。これは、「トップ」、「ボトム」、「左」、「右」、「すべて」を取り、「境界線」オブジェクトを返します。
空の border! ()
callは none
を返します。
例えば:
border!(ALL)border!(LEFT, RIGHT)border!()
これは、短いビルド時間を確保するために、macros
機能フラグの背後にあるとゲートされています。有効にするには、次のように Cargo.toml
を更新します。
[dependencies.ratatui]version = "0.21.0"features = ["macros"]
今後は、新しいマクロを macros
機能の後ろに置く可能性が高いでしょう。
色: String
からのサポート変換
この変換が必要なことはありますか?
"black" => Color::Black,"red" => Color::Red,"green" => Color::Green,// etc.
心配しないでください、私たちはあなたをカバーしました:
Color::from_str("lightblue") // Color::LightBlueColor::from_str("10") // Color::Indexed(10)Color::from_str("#FF0000") // Color::Rgb(255, 0, 0)
Spans
-> Line
Line
は Spans
よりはるかに良い名前です。複数形は混乱を招き、型は実際にはスパンで構成されたテキスト行の表現だからです。
そのため、Spans
は Line
に名前が変更され、非推奨の通知が追加されました。
詳しい説明については、https://github.com/ratatui/ratatui/pull/178 を参照してください。
その他の機能
List
に、アイテム数を返すlen()
メソッドが追加されましたSparkline
に、レンダリング方向 (左から右 / 右から左) を指定するdirection()
メソッドが追加されましたTable
およびList
状態に、offset()
メソッドとoffset_mut()
メソッドが追加されましたDisplay
実装を使用してテスト バッファ (TestBackend
) を公開します
新しいアプリ
追加されたアプリケーションのリストは次のとおりです。
- oxycards: ターミナル内で構築されたクイズ カード アプリケーション。
- twitch-tui: ターミナル内の Twitch チャット。
- tenere: LLM 用の TUI インターフェイス。
また、 apps.md
ファイルを Wiki に移動したので、 ratatui
で構築されたより多くのアプリケーションを確認してください!
tui-rs
からの移行
wikiで移行ガイドをまとめました: Migrating from TUI
また、サポートされている最小限のバージョンは 1.65.0
です
貢献
どんな貢献も高く評価されています!開始するための contribution guidelines があります。
submit issues を自由にして、アイデアを投入してください!
ratatui
で問題が発生している場合、またはプロジェクトに貢献したい場合、またはchit-chatをお持ちの場合は、 join our Discord server をお気軽にお問い合わせください。