v0.25.0
https://github.com/ratatui/ratatui/releases/tag/v0.25.0
このリリースについては、 breaking changes を参照してください。
Ratatui Webサイト📚
Webサイト全体を刷新し(ratatui.rs) with Astro を使用して、ドキュメント/チュートリアルを更新しました。
チェックアウトをお勧めするセクションの一部は次のとおりです。
すべてのコードは https://github.com/ratatui/ratatui-website で利用できます
私たちのウェブサイトに貢献することに興味があるなら、 good first issues here をチェックしてください!
Awesome Ratatui 🦀
ratatui
で構築された素晴らしいアプリケーション/ライブラリをキュレートするための素晴らしいリストを作成しました!
参照: https://github.com/ratatui/awesome-ratatui
Ratatui で構築した/Ratatui 用に構築したものがある方は、お気軽に このリストに追加 してください!
Ratatuiテンプレート📝
利用可能な ratatui
テンプレートを 1 つのリポジトリに集めました:
https://github.com/ratatui/templates
現在、2 つのテンプレートがあります:
- シンプル: シンプルな
ratatui
アプリケーションをすばやくブートストラップするためのテンプレート。 - 非同期:
tokio
やtracing
などのクレートを使用して非同期ratatui
アプリケーションを作成する、より高度なテンプレート。
これらは、次のように cargo-generate
で使用できます:
cargo generate ratatui/ratatui-template
このリポジトリはまだ構築中ですので、お気軽にご覧ください。さらに、別のテンプレートがあり、貢献することに興味がある場合は本当に感謝しています。
New/Updated Examples 🆕
ハーフブロックを使用して大きなテキストをレンダリングする方法を示す新しい例 (ratatui-logo
) を追加しました。
また、アニメーションと FPS カウンターを追加するために、colors_rgb
例を更新しました。
List: Better Construction ✨
List::new
は IntoIterator<Item = Into<ListItem>>
を受け入れるようになりました。
List::new(["Item 1", "Item 2"])
ただし、この変更により、 IntoIterator
のコンパイルエラーが不定のアイテム (空のベクトルなど) を使用します。
let list = List::new(vec![]);
// instead, this should be:let list = List::default();
リスト: ラインアライメント📏
List
ウィジェットは Line
の配置を尊重し、期待どおりにレンダリングするようになりました。
例えば:
let items = [ Line::from("Left").alignment(Alignment::Left), Line::from("Center").alignment(Alignment::Center), Line::from("Right").alignment(Alignment::Right),]
リストになります:
Left Center Right
リスト: start_corner
-> direction
以前の名前 start_corner
では、メソッドの意図が明確に伝わりませんでした。
新しいメソッド List::direction
と新しい列挙型 ListDirection
が追加されました。
List::start_corner
は非推奨になりました。
Layout: Better Construction ✨
ビルダー パターンを使用して一般的に構成される最も一般的なパラメーターである、方向と制約のリストを含むレイアウトを作成するための便利な関数を追加しました。
let layout = Layout::new(Direction::Horizontal, [ Constraint::Percentage(50), Constraint::Percentage(50),]);
制約は、制約の任意のイテレータとして渡すことができます。
Layout: 塗りつぶしの構成を許可する
レイアウト分割は、通常、split()
が呼び出されたときに残りの領域を埋めます。
この機能により、呼び出し側が Rect
に追加のスペースを割り当てる方法を設定できるようになりました。これは、呼び出し側が Rect
の 1 つに固定サイズを設定し、残りのスペースを他の Rect
で埋めたい場合に便利です。
この機能を使用するには、Cargo.toml
に unstable
または unstable-segment-size
機能フラグを追加します。
その理由は、型の正確な名前がまだバイクシェッド中であるためです。
デフォルトの動作は SegmentSize::LastTakesRemainder
で、最後のセグメントに残りのスペースが割り当てられます。
Layout::new( Direction::Horizontal, [Constraint::Percentage(50), Constraint::Percentage(25)],).split(frame.size());
SegmentSize::None
はこの動作を無効にします。
Layout::new( Direction::Horizontal, [Constraint::Percentage(50), Constraint::Percentage(25)],).segment_size(layout::SegmentSize::None).split(frame.size());
残りのスペースを均等に埋めるようにレイアウトを構成するには、 Layout::segment_size(SegmentSize::EvenDistribution)
を使用します。
詳細については、 Layout::segment_size()
および layout::SegmentSize
のドキュメントを参照してください。
Table: Segment Size 🗃️
前のエントリと同様に、これはテーブルに対して Layout::segment_size
と同じように機能します。
let widths = [Constraint::Min(10), Constraint::Min(10), Constraint::Min(10)];let table = Table::new([]) .widths(widths) .segment_size(SegmentSize::LastTakesRemainder);
これは、制約の少ないテーブルに追加のスペースを配分する方法を制御します。デフォルトの従来の動作では、追加スペースは未使用のままになります。
新しいオプションは、スペースをすべて使用できる右端の列に割り当て
る LastTakesRemainder
と、スペースをすべての列に分配する EvenDistribution
です。
表: 幅の改善✨
Table::new()
は、列の幅を指定する必要があります
以前は、Table
は幅なしで構築できました。ほとんどの場合、これはエラーになるため、widths
パラメータを必須にしました。
つまり、既存のコードを次のように更新する必要があります。
Table::new(rows).widths(widths)Table::new(rows, widths)
自動置換を容易にするために、この変更によって壊れたコードの量が多い場合や複雑な場合は、Table::new
を Table::default().rows
に置き換えると便利な場合があります。
Table::new(rows).block(block).widths(widths);Table::default().rows(rows).block(block).widths(widths)
Table::widths()
は AsRef<[Constraint]>
を受け入れるようになりました
これにより、制約の配列、スライス、または Vec を渡すことが可能になり、常にスライスである必要がある場合よりも人間工学的に優れています。
Table::default().widths([Constraint::Length(5), Constraint::Length(5)]);Table::default().widths(&[Constraint::Length(5), Constraint::Length(5)]);
// widths could also be computed at runtimelet widths = vec![Constraint::Length(5), Constraint::Length(5)];Table::default().widths(widths.clone());Table::default().widths(&widths);
Constraint Helpers 🆘
u16
値のイテレータから特定の Constraint
型に変換するヘルパー メソッドを追加しました。
これにより、次のような制約を簡単に作成できます。
// a fixed layoutlet constraints = Constraint::from_lengths([10, 20, 10]);
// a centered layoutlet constraints = Constraint::from_ratios([(1, 4), (1, 2), (1, 4)]);let constraints = Constraint::from_percentages([25, 50, 25]);
// a centered layout with a minimum sizelet constraints = Constraint::from_mins([0, 100, 0]);
// a sidebar / main layout with maximum sizeslet constraints = Constraint::from_maxes([30, 200]);
段落: line_count
& line_width
📏
レンダリングされた段落に関する情報を取得するのに役立つ新しい不安定な機能が追加されました
次のメソッドにアクセスするには、unstable
または unstable-rendered-line-info
機能フラグを有効にします:
Paragraph::line_count
: 境界幅を受け取り、レンダリング時に段落全体を表示するために必要な行数を返します。このメソッドの目的は、スクロールバーで使用することです。段落に折り返しテキストがある場合、必要な行数を取得することは現時点では不可能です。Paragraph::line_width
: 段落のすべての行を完全に表示するために必要な最小の行幅を返します。これは単に最大行幅です。
これら 2 つのメソッドを組み合わせて、段落の最小境界ボックスを計算できます。 これらは実験的なものであり、将来変更される可能性があることに注意してください。
Rect: offset
📐
Rect には offset
という新しいメソッドがあり、これを使用して、x 方向と y 方向に指定された量だけ移動する新しい Rect を作成できます。これらの値は正または負の値にすることができます。これは、手動レイアウト タスクに役立ちます。
let rect = area.offset(Offset { x: 10, y -10 });
IntoIterator
制約のための
Layout
と Table
は、AsRef<Constraint>
である Item を持つ制約に対して IntoIterator
を受け入れるようになりました。
これにより、配列、ベクター、スライス、イテレータなど、ほぼすべての制約のコレクションをレイアウト関数に渡すことができます (collect() を呼び出す必要はありません)。
let layout = Layout::default().constraints([Constraint::Min(0)]);let layout = Layout::default().constraints(&[Constraint::Min(0)]);let layout = Layout::default().constraints(vec![Constraint::Min(0)]);let layout = Layout::default().constraints([Constraint::Min(0)].iter().filter(|_| true));let layout = Layout::default().constraints([1,2,3].iter().map(|&c| Constraint::Length(c)));
Chart: Legend Position 📊
Chart
には legend_position
という新しい setter メソッドがあります。
let chart: Chart = Chart::new(vec![]) .legend_position(Some(LegendPosition::TopLeft));
他の可能な値については、Chart::LegendPosition
を参照してください。
デフォルトのハイライトスタイル🎨
以前は、デフォルトの highlight_style
は Style::default()
に設定されていました。つまり、ハイライト スタイルは通常のスタイルと同じでした。
つまり、たとえば、デフォルト構成の Tabs
ウィジェットでは、選択されたタブの表示は表示されません。
現在は、highlight_style
をデフォルトで反転スタイル (Style::new().reversed()
) に設定しています。
Tab: Custom Padding 📇
Tab ウィジェットに padding_left
プロパティと padding_right
プロパティが追加されました。
これらの値は、Into<Line>
を受け入れる関数 padding_left()
、padding_right()
、および padding()
を使用して設定できます。
便宜上、padding
メソッドを使用して左/右のパディングを適宜設定することもできます。
// A space on either side of the tabs.let tabs = Tabs::new(vec!["Tab 1", "Tab 2"]).padding(" ", " ");
/// Nothing on either side of the tabs.let tabs = Tabs::new(vec!["Tab 1", "Tab 2"]).padding("", "");
Cell::symbol
🚫を非難する
Cell::symbol
フィールドは、getter メソッド (symbol()
) を介してアクセスできるようになりました。これにより、String
を compact_str
に置き換えるなど、Cell 内部に将来的な変更を加えることができます。
cell.symbolcell.symbol()
Remove Deprecated Items 💀
0.10
以降非推奨となった Axis::title_style
と Buffer::set_background
を削除しました。
他の💼
- 新しいセッターメソッドを追加:
Span::content
、Span::style
Style
関連構造体にcrossterm
/termion
のFrom
trait を実装- バグを修正し、高さの上限を削除するために
Terminal
のinsert_before
メソッドを書き直す - リフローモジュールに
WrappedLine
構造体を追加する Sparkline
、Chart
、ListItem
およびコードベースの他の多くの部分にドキュメントを追加する- 自然な読み取り順序を尊重するようにモジュール/ドキュメントを再編成する
- ウィジェットから不要な動的ディスパッチとヒープ割り当てを削除する
- 例に Vim キーバインディング (移動) を追加する
- 流暢なセッターメソッドに
#[must_use]
を追加する - セキュリティポリシー を作成する
- MSRV を次のものにアップグレードする
1.70.0
最後に、@Valentin271 をメンテナーとして迎え入れます! 🥳
新しいソーシャル🌐
ratatui
のために、次のソーシャルメディアプレゼンスを作成しました。
最新の ratatui
ニュースやその他のクールなものをフォローしてください!
Githubスポンサー💖
私たちは、私たちの組織のためにGithubスポンサーを有効にしました: https://github.com/sponsors/ratatui
私たちの使命は、開発者がよりインタラクティブで視覚的にリッチなコマンドライン>ターミナルユーザーインターフェイス (TUIS) を作成できるようにすることです。Ratatuiを後援することで、あなたはプロジェクトに資金を提供するだけではありません。あなたは、Rustのターミナルアプリケーションの生態系をより良くするのを手伝っています。