pub struct Paragraph<'a> { /* private fields */ }Expand description
A widget to display some text.
It is used to display a block of text. The text can be styled and aligned. It can also be wrapped to the next line if it is too long to fit in the given area.
The text can be any type that can be converted into a Text. By default, the text is styled
with Style::default(), not wrapped, and aligned to the left.
The text can be wrapped to the next line if it is too long to fit in the given area. The
wrapping can be configured with the wrap method. For more complex wrapping, consider using
the Textwrap crate.
The text can be aligned to the left, right, or center. The alignment can be configured with the
alignment method or with the left_aligned, right_aligned, and centered methods.
The text can be scrolled to show a specific part of the text. The scroll offset can be set with
the scroll method.
The text can be surrounded by a Block with a title and borders. The block can be configured
with the block method.
The style of the text can be set with the style method. This style will be applied to the
entire widget, including the block if one is present. Any style set on the block or text will be
added to this style. See the Style type for more information on how styles are combined.
Note: If neither wrapping or a block is needed, consider rendering the Text, Line, or
Span widgets directly.
§Example
use ratatui::{
layout::Alignment,
style::{Style, Stylize},
text::{Line, Span},
widgets::{Block, Paragraph, Wrap},
};
let text = vec![
Line::from(vec![
Span::raw("First"),
Span::styled("line", Style::new().green().italic()),
".".into(),
]),
Line::from("Second line".red()),
"Third line".into(),
];
Paragraph::new(text)
.block(Block::bordered().title("Paragraph"))
.style(Style::new().white().on_black())
.alignment(Alignment::Center)
.wrap(Wrap { trim: true });Implementations§
Source§impl<'a> Paragraph<'a>
impl<'a> Paragraph<'a>
Sourcepub fn new<T>(text: T) -> Self
pub fn new<T>(text: T) -> Self
Creates a new Paragraph widget with the given text.
The text parameter can be a Text or any type that can be converted into a Text. By
default, the text is styled with Style::default(), not wrapped, and aligned to the left.
§Examples
use ratatui::{
style::{Style, Stylize},
text::{Line, Text},
widgets::Paragraph,
};
let paragraph = Paragraph::new("Hello, world!");
let paragraph = Paragraph::new(String::from("Hello, world!"));
let paragraph = Paragraph::new(Text::raw("Hello, world!"));
let paragraph = Paragraph::new(Text::styled("Hello, world!", Style::default()));
let paragraph = Paragraph::new(Line::from(vec!["Hello, ".into(), "world!".red()]));Sourcepub fn style<S: Into<Style>>(self, style: S) -> Self
pub fn style<S: Into<Style>>(self, style: S) -> Self
Sets the style of the entire widget.
style accepts any type that is convertible to Style (e.g. Style, Color, or
your own type that implements Into<Style>).
This applies to the entire widget, including the block if one is present. Any style set on the block or text will be added to this style.
§Example
use ratatui::{
style::{Style, Stylize},
widgets::Paragraph,
};
let paragraph = Paragraph::new("Hello, world!").style(Style::new().red().on_white());Sourcepub const fn scroll(self, offset: (u16, u16)) -> Self
pub const fn scroll(self, offset: (u16, u16)) -> Self
Set the scroll offset for the given paragraph
The scroll offset is a tuple of (y, x) offset. The y offset is the number of lines to scroll, and the x offset is the number of characters to scroll. The scroll offset is applied after the text is wrapped and aligned.
Note: the order of the tuple is (y, x) instead of (x, y), which is different from general convention across the crate.
For more information about future scrolling design and concerns, see RFC: Design of Scrollable Widgets on GitHub.
Sourcepub const fn alignment(self, alignment: Alignment) -> Self
pub const fn alignment(self, alignment: Alignment) -> Self
Set the text alignment for the given paragraph
The alignment is a variant of the Alignment enum which can be one of Left, Right, or
Center. If no alignment is specified, the text in a paragraph will be left-aligned.
§Example
use ratatui::{layout::Alignment, widgets::Paragraph};
let paragraph = Paragraph::new("Hello World").alignment(Alignment::Center);Sourcepub const fn left_aligned(self) -> Self
pub const fn left_aligned(self) -> Self
Left-aligns the text in the given paragraph.
Convenience shortcut for Paragraph::alignment(Alignment::Left).
§Examples
use ratatui::widgets::Paragraph;
let paragraph = Paragraph::new("Hello World").left_aligned();Sourcepub const fn centered(self) -> Self
pub const fn centered(self) -> Self
Center-aligns the text in the given paragraph.
Convenience shortcut for Paragraph::alignment(Alignment::Center).
§Examples
use ratatui::widgets::Paragraph;
let paragraph = Paragraph::new("Hello World").centered();Sourcepub const fn right_aligned(self) -> Self
pub const fn right_aligned(self) -> Self
Right-aligns the text in the given paragraph.
Convenience shortcut for Paragraph::alignment(Alignment::Right).
§Examples
use ratatui::widgets::Paragraph;
let paragraph = Paragraph::new("Hello World").right_aligned();Sourcepub fn line_count(&self, width: u16) -> usize
pub fn line_count(&self, width: u16) -> usize
Calculates the number of lines needed to fully render.
Given a max line width, this method calculates the number of lines that a paragraph will need in order to be fully rendered. For paragraphs that do not use wrapping, this count is simply the number of lines present in the paragraph.
This method will also account for the Block if one is set through Self::block.
Note: The design for text wrapping is not stable and might affect this API.
§Example
use ratatui::{widgets::{Paragraph, Wrap}};
let paragraph = Paragraph::new("Hello World")
.wrap(Wrap { trim: false });
assert_eq!(paragraph.line_count(20), 1);
assert_eq!(paragraph.line_count(10), 2);§Stability
This API is marked as unstable and is only available when the unstable-rendered-line-info
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
The tracking issue is: https://github.com/ratatui/ratatui/issues/293.
Sourcepub fn line_width(&self) -> usize
pub fn line_width(&self) -> usize
Calculates the shortest line width needed to avoid any word being wrapped or truncated.
Accounts for the Block if a block is set through Self::block.
Note: The design for text wrapping is not stable and might affect this API.
§Example
use ratatui::{widgets::Paragraph};
let paragraph = Paragraph::new("Hello World");
assert_eq!(paragraph.line_width(), 11);
let paragraph = Paragraph::new("Hello World\nhi\nHello World!!!");
assert_eq!(paragraph.line_width(), 14);§Stability
This API is marked as unstable and is only available when the unstable-rendered-line-info
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
The tracking issue is: https://github.com/ratatui/ratatui/issues/293.
Trait Implementations§
Source§impl WidgetRef for Paragraph<'_>
impl WidgetRef for Paragraph<'_>
Source§fn render_ref(&self, area: Rect, buf: &mut Buffer)
fn render_ref(&self, area: Rect, buf: &mut Buffer)
impl<'a> Eq for Paragraph<'a>
impl<'a> StructuralPartialEq for Paragraph<'a>
Auto Trait Implementations§
impl<'a> Freeze for Paragraph<'a>
impl<'a> RefUnwindSafe for Paragraph<'a>
impl<'a> Send for Paragraph<'a>
impl<'a> Sync for Paragraph<'a>
impl<'a> Unpin for Paragraph<'a>
impl<'a> UnwindSafe for Paragraph<'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.