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.