pub struct Text<'a> {
pub alignment: Option<Alignment>,
pub style: Style,
pub lines: Vec<Line<'a>>,
}Expand description
A string split over one or more lines.
Text is used wherever text is displayed in the terminal and represents one or more Lines
of text. When a Text is rendered, each line is rendered as a single line of text from top to
bottom of the area. The text can be styled and aligned.
§Constructor Methods
Text::rawcreates aText(potentially multiple lines) with no style.Text::styledcreates aText(potentially multiple lines) with a style.Text::defaultcreates aTextwith empty content and the default style.
§Conversion Methods
Text::fromcreates aTextfrom aString.Text::fromcreates aTextfrom a&str.Text::fromcreates aTextfrom aCow<str>.Text::fromcreates aTextfrom aSpan.Text::fromcreates aTextfrom aLine.Text::fromcreates aTextfrom aVec<Line>.Text::from_itercreates aTextfrom an iterator of items that can be converted intoLine.
§Setter Methods
These methods are fluent setters. They return a Text with the property set.
Text::stylesets the style of thisText.Text::alignmentsets the alignment for thisText.Text::left_alignedsets the alignment toAlignment::Left.Text::centeredsets the alignment toAlignment::Center.Text::right_alignedsets the alignment toAlignment::Right.
§Iteration Methods
Text::iterreturns an iterator over the lines of the text.Text::iter_mutreturns an iterator that allows modifying each line.Text::into_iterreturns an iterator over the lines of the text.
§Other Methods
Text::widthreturns the max width of all the lines.Text::heightreturns the height.Text::patch_stylepatches the style of thisText, adding modifiers from the given style.Text::reset_styleresets the style of theText.Text::push_lineadds a line to the text.Text::push_spanadds a span to the last line of the text.
§Examples
§Creating Text
A Text, like a Line, can be constructed using one of the many From implementations or
via the Text::raw and Text::styled methods. Helpfully, Text also implements
core::iter::Extend which enables the concatenation of several Text blocks.
use std::{borrow::Cow, iter};
use ratatui::{
style::{Color, Modifier, Style, Stylize},
text::{Line, Span, Text},
};
let style = Style::new().yellow().italic();
let text = Text::raw("The first line\nThe second line").style(style);
let text = Text::styled("The first line\nThe second line", style);
let text = Text::styled(
"The first line\nThe second line",
(Color::Yellow, Modifier::ITALIC),
);
let text = Text::from("The first line\nThe second line");
let text = Text::from(String::from("The first line\nThe second line"));
let text = Text::from(Cow::Borrowed("The first line\nThe second line"));
let text = Text::from(Span::styled("The first line\nThe second line", style));
let text = Text::from(Line::from("The first line"));
let text = Text::from(vec![
Line::from("The first line"),
Line::from("The second line"),
]);
let text = Text::from_iter(iter::once("The first line").chain(iter::once("The second line")));
let mut text = Text::default();
text.extend(vec![
Line::from("The first line"),
Line::from("The second line"),
]);
text.extend(Text::from("The third line\nThe fourth line"));§Styling Text
The text’s Style is used by the rendering widget to determine how to style the text. Each
Line in the text will be styled with the Style of the text, and then with its own
Style. Text also implements Styled which means you can use the methods of the
Stylize trait.
use ratatui::{
style::{Color, Modifier, Style, Stylize},
text::{Line, Text},
};
let text = Text::from("The first line\nThe second line").style(Style::new().yellow().italic());
let text = Text::from("The first line\nThe second line")
.yellow()
.italic();
let text = Text::from(vec![
Line::from("The first line").yellow(),
Line::from("The second line").yellow(),
])
.italic();§Aligning Text
The text’s Alignment can be set using Text::alignment or the related helper methods.
Lines composing the text can also be individually aligned with Line::alignment.
use ratatui::{
layout::Alignment,
text::{Line, Text},
};
let text = Text::from("The first line\nThe second line").alignment(Alignment::Right);
let text = Text::from("The first line\nThe second line").right_aligned();
let text = Text::from(vec![
Line::from("The first line").left_aligned(),
Line::from("The second line").right_aligned(),
Line::from("The third line"),
])
.centered();§Rendering Text
Text implements the Widget trait, which means it can be rendered to a Buffer or to a
Frame.
use ratatui::{text::Text, widgets::Widget, Frame};
// within another widget's `render` method:
let text = Text::from("The first line\nThe second line");
text.render(area, buf);
// within a terminal.draw closure:
let text = Text::from("The first line\nThe second line");
frame.render_widget(text, area);§Rendering Text with a Paragraph Widget
Usually apps will use the Paragraph widget instead of rendering a Text directly as it
provides more functionality.
use ratatui::{
buffer::Buffer,
layout::Rect,
text::Text,
widgets::{Paragraph, Widget, Wrap},
};
let text = Text::from("The first line\nThe second line");
let paragraph = Paragraph::new(text)
.wrap(Wrap { trim: true })
.scroll((1, 1))
.render(area, buf);Fields§
§alignment: Option<Alignment>The alignment of this text.
style: StyleThe style of this text.
lines: Vec<Line<'a>>The lines that make up this piece of text.
Implementations§
Source§impl<'a> Text<'a>
impl<'a> Text<'a>
Sourcepub fn raw<T>(content: T) -> Self
pub fn raw<T>(content: T) -> Self
Create some text (potentially multiple lines) with no style.
§Examples
use ratatui::text::Text;
Text::raw("The first line\nThe second line");
Text::raw(String::from("The first line\nThe second line"));Sourcepub fn styled<T, S>(content: T, style: S) -> Self
pub fn styled<T, S>(content: T, style: S) -> Self
Create some text (potentially multiple lines) with a style.
style accepts any type that is convertible to Style (e.g. Style, Color, or
your own type that implements Into<Style>).
§Examples
use ratatui::{
style::{Color, Modifier, Style},
text::Text,
};
let style = Style::default()
.fg(Color::Yellow)
.add_modifier(Modifier::ITALIC);
Text::styled("The first line\nThe second line", style);
Text::styled(String::from("The first line\nThe second line"), style);Sourcepub fn width(&self) -> usize
pub fn width(&self) -> usize
Returns the max width of all the lines.
§Examples
use ratatui::text::Text;
let text = Text::from("The first line\nThe second line");
assert_eq!(15, text.width());Sourcepub fn height(&self) -> usize
pub fn height(&self) -> usize
Returns the height.
§Examples
use ratatui::text::Text;
let text = Text::from("The first line\nThe second line");
assert_eq!(2, text.height());Sourcepub fn style<S: Into<Style>>(self, style: S) -> Self
pub fn style<S: Into<Style>>(self, style: S) -> Self
Sets the style of this text.
Defaults to Style::default().
Note: This field was added in v0.26.0. Prior to that, the style of a text was determined
only by the style of each Line contained in the line. For this reason, this field may
not be supported by all widgets (outside of the ratatui crate itself).
style accepts any type that is convertible to Style (e.g. Style, Color, or
your own type that implements Into<Style>).
§Examples
use ratatui::{
style::{Style, Stylize},
text::Text,
};
let mut line = Text::from("foo").style(Style::new().red());Sourcepub fn patch_style<S: Into<Style>>(self, style: S) -> Self
pub fn patch_style<S: Into<Style>>(self, style: S) -> Self
Patches the style of this Text, adding modifiers from the given style.
This is useful for when you want to apply a style to a text that already has some styling.
In contrast to Text::style, this method will not overwrite the existing style, but
instead will add the given style’s modifiers to this text’s style.
Text also implements Styled which means you can use the methods of the Stylize
trait.
style accepts any type that is convertible to Style (e.g. Style, Color, or
your own type that implements Into<Style>).
This is a fluent setter method which must be chained or used as it consumes self
§Examples
use ratatui::{
style::{Color, Modifier},
text::Text,
};
let raw_text = Text::styled("The first line\nThe second line", Modifier::ITALIC);
let styled_text = Text::styled(
String::from("The first line\nThe second line"),
(Color::Yellow, Modifier::ITALIC),
);
assert_ne!(raw_text, styled_text);
let raw_text = raw_text.patch_style(Color::Yellow);
assert_eq!(raw_text, styled_text);Sourcepub fn reset_style(self) -> Self
pub fn reset_style(self) -> Self
Resets the style of the Text.
Equivalent to calling patch_style(Style::reset()).
This is a fluent setter method which must be chained or used as it consumes self
§Examples
use ratatui::{
style::{Color, Modifier, Style},
text::Text,
};
let text = Text::styled(
"The first line\nThe second line",
(Color::Yellow, Modifier::ITALIC),
);
let text = text.reset_style();
assert_eq!(Style::reset(), text.style);Sourcepub fn alignment(self, alignment: Alignment) -> Self
pub fn alignment(self, alignment: Alignment) -> Self
Sets the alignment for this text.
Defaults to: None, meaning the alignment is determined by the rendering widget.
Setting the alignment of a Text generally overrides the alignment of its
parent Widget.
Alignment can be set individually on each line to override this text’s alignment.
§Examples
Set alignment to the whole text.
use ratatui::{layout::Alignment, text::Text};
let mut text = Text::from("Hi, what's up?");
assert_eq!(None, text.alignment);
assert_eq!(
Some(Alignment::Right),
text.alignment(Alignment::Right).alignment
)Set a default alignment and override it on a per line basis.
use ratatui::{
layout::Alignment,
text::{Line, Text},
};
let text = Text::from(vec![
Line::from("left").alignment(Alignment::Left),
Line::from("default"),
Line::from("default"),
Line::from("right").alignment(Alignment::Right),
])
.alignment(Alignment::Center);Will render the following
left
default
default
rightSourcepub fn left_aligned(self) -> Self
pub fn left_aligned(self) -> Self
Left-aligns the whole text.
Convenience shortcut for Text::alignment(Alignment::Left).
Setting the alignment of a Text generally overrides the alignment of its
parent Widget, with the default alignment being inherited from the parent.
Alignment can be set individually on each line to override this text’s alignment.
§Examples
use ratatui::text::Text;
let text = Text::from("Hi, what's up?").left_aligned();Sourcepub fn centered(self) -> Self
pub fn centered(self) -> Self
Center-aligns the whole text.
Convenience shortcut for Text::alignment(Alignment::Center).
Setting the alignment of a Text generally overrides the alignment of its
parent Widget, with the default alignment being inherited from the parent.
Alignment can be set individually on each line to override this text’s alignment.
§Examples
use ratatui::text::Text;
let text = Text::from("Hi, what's up?").centered();Sourcepub fn right_aligned(self) -> Self
pub fn right_aligned(self) -> Self
Right-aligns the whole text.
Convenience shortcut for Text::alignment(Alignment::Right).
Setting the alignment of a Text generally overrides the alignment of its
parent Widget, with the default alignment being inherited from the parent.
Alignment can be set individually on each line to override this text’s alignment.
§Examples
use ratatui::text::Text;
let text = Text::from("Hi, what's up?").right_aligned();Sourcepub fn iter_mut(&mut self) -> IterMut<'_, Line<'a>>
pub fn iter_mut(&mut self) -> IterMut<'_, Line<'a>>
Returns an iterator that allows modifying each line.
Sourcepub fn push_line<T: Into<Line<'a>>>(&mut self, line: T)
pub fn push_line<T: Into<Line<'a>>>(&mut self, line: T)
Adds a line to the text.
line can be any type that can be converted into a Line. For example, you can pass a
&str, a String, a Span, or a Line.
§Examples
use ratatui::text::{Line, Span, Text};
let mut text = Text::from("Hello, world!");
text.push_line(Line::from("How are you?"));
text.push_line(Span::from("How are you?"));
text.push_line("How are you?");Sourcepub fn push_span<T: Into<Span<'a>>>(&mut self, span: T)
pub fn push_span<T: Into<Span<'a>>>(&mut self, span: T)
Adds a span to the last line of the text.
span can be any type that is convertible into a Span. For example, you can pass a
&str, a String, or a Span.
§Examples
use ratatui::text::{Span, Text};
let mut text = Text::from("Hello, world!");
text.push_span(Span::from("How are you?"));
text.push_span("How are you?");Trait Implementations§
Source§impl<'a> Add for Text<'a>
Adds two Text together.
impl<'a> Add for Text<'a>
Adds two Text together.
This ignores the style and alignment of the second Text.
Source§impl<'a> AddAssign<Line<'a>> for Text<'a>
impl<'a> AddAssign<Line<'a>> for Text<'a>
Source§fn add_assign(&mut self, line: Line<'a>)
fn add_assign(&mut self, line: Line<'a>)
+= operation. Read moreSource§impl<'a, T> Extend<T> for Text<'a>
impl<'a, T> Extend<T> for Text<'a>
Source§fn extend<I: IntoIterator<Item = T>>(&mut self, iter: I)
fn extend<I: IntoIterator<Item = T>>(&mut self, iter: I)
Source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one)Source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one)Source§impl<'a, T> FromIterator<T> for Text<'a>
impl<'a, T> FromIterator<T> for Text<'a>
Source§fn from_iter<I: IntoIterator<Item = T>>(iter: I) -> Self
fn from_iter<I: IntoIterator<Item = T>>(iter: I) -> Self
Source§impl<'a> IntoIterator for &'a Text<'a>
impl<'a> IntoIterator for &'a Text<'a>
Source§impl<'a> IntoIterator for &'a mut Text<'a>
impl<'a> IntoIterator for &'a mut Text<'a>
Source§impl<'a> IntoIterator for Text<'a>
impl<'a> IntoIterator for Text<'a>
Source§impl WidgetRef for Text<'_>
impl WidgetRef for Text<'_>
Source§fn render_ref(&self, area: Rect, buf: &mut Buffer)
fn render_ref(&self, area: Rect, buf: &mut Buffer)
impl<'a> Eq for Text<'a>
impl<'a> StructuralPartialEq for Text<'a>
Auto Trait Implementations§
impl<'a> Freeze for Text<'a>
impl<'a> RefUnwindSafe for Text<'a>
impl<'a> Send for Text<'a>
impl<'a> Sync for Text<'a>
impl<'a> Unpin for Text<'a>
impl<'a> UnwindSafe for Text<'a>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<'a, T, U> Stylize<'a, T> for Uwhere
U: Styled<Item = T>,
impl<'a, T, U> Stylize<'a, T> for Uwhere
U: Styled<Item = T>,
fn bg<C>(self, color: C) -> T
fn fg<C>(self, color: C) -> T
fn add_modifier(self, modifier: Modifier) -> T
fn remove_modifier(self, modifier: Modifier) -> T
fn reset(self) -> T
Source§fn on_magenta(self) -> T
fn on_magenta(self) -> T
magenta.Source§fn on_dark_gray(self) -> T
fn on_dark_gray(self) -> T
dark_gray.Source§fn on_light_red(self) -> T
fn on_light_red(self) -> T
light_red.Source§fn light_green(self) -> T
fn light_green(self) -> T
light_green.Source§fn on_light_green(self) -> T
fn on_light_green(self) -> T
light_green.Source§fn light_yellow(self) -> T
fn light_yellow(self) -> T
light_yellow.Source§fn on_light_yellow(self) -> T
fn on_light_yellow(self) -> T
light_yellow.Source§fn light_blue(self) -> T
fn light_blue(self) -> T
light_blue.Source§fn on_light_blue(self) -> T
fn on_light_blue(self) -> T
light_blue.Source§fn light_magenta(self) -> T
fn light_magenta(self) -> T
light_magenta.Source§fn on_light_magenta(self) -> T
fn on_light_magenta(self) -> T
light_magenta.Source§fn light_cyan(self) -> T
fn light_cyan(self) -> T
light_cyan.Source§fn on_light_cyan(self) -> T
fn on_light_cyan(self) -> T
light_cyan.Source§fn not_italic(self) -> T
fn not_italic(self) -> T
ITALIC modifier.Source§fn underlined(self) -> T
fn underlined(self) -> T
UNDERLINED modifier.Source§fn not_underlined(self) -> T
fn not_underlined(self) -> T
UNDERLINED modifier.Source§fn slow_blink(self) -> T
fn slow_blink(self) -> T
SLOW_BLINK modifier.Source§fn not_slow_blink(self) -> T
fn not_slow_blink(self) -> T
SLOW_BLINK modifier.Source§fn rapid_blink(self) -> T
fn rapid_blink(self) -> T
RAPID_BLINK modifier.Source§fn not_rapid_blink(self) -> T
fn not_rapid_blink(self) -> T
RAPID_BLINK modifier.Source§fn not_reversed(self) -> T
fn not_reversed(self) -> T
REVERSED modifier.HIDDEN modifier.HIDDEN modifier.Source§fn crossed_out(self) -> T
fn crossed_out(self) -> T
CROSSED_OUT modifier.Source§fn not_crossed_out(self) -> T
fn not_crossed_out(self) -> T
CROSSED_OUT modifier.Source§impl<T> ToCompactString for Twhere
T: Display,
impl<T> ToCompactString for Twhere
T: Display,
Source§fn try_to_compact_string(&self) -> Result<CompactString, ToCompactStringError>
fn try_to_compact_string(&self) -> Result<CompactString, ToCompactStringError>
ToCompactString::to_compact_string() Read moreSource§fn to_compact_string(&self) -> CompactString
fn to_compact_string(&self) -> CompactString
CompactString. Read more