ratatui::widgets

Struct Paragraph

Source
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>

Source

pub fn new<T>(text: T) -> Self
where T: Into<Text<'a>>,

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()]));
Source

pub fn block(self, block: Block<'a>) -> Self

Surrounds the Paragraph widget with a Block.

§Example
use ratatui::widgets::{Block, Paragraph};

let paragraph = Paragraph::new("Hello, world!").block(Block::bordered().title("Paragraph"));
Source

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());
Source

pub const fn wrap(self, wrap: Wrap) -> Self

Sets the wrapping configuration for the widget.

See Wrap for more information on the different options.

§Example
use ratatui::widgets::{Paragraph, Wrap};

let paragraph = Paragraph::new("Hello, world!").wrap(Wrap { trim: true });
Source

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.

Source

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);
Source

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();
Source

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();
Source

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();
Source

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.

Source

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<'a> Clone for Paragraph<'a>

Source§

fn clone(&self) -> Paragraph<'a>

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<'a> Debug for Paragraph<'a>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'a> Default for Paragraph<'a>

Source§

fn default() -> Paragraph<'a>

Returns the “default value” for a type. Read more
Source§

impl<'a> Hash for Paragraph<'a>

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl<'a> PartialEq for Paragraph<'a>

Source§

fn eq(&self, other: &Paragraph<'a>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<'a> Styled for Paragraph<'a>

Source§

type Item = Paragraph<'a>

Source§

fn style(&self) -> Style

Returns the style of the object.
Source§

fn set_style<S: Into<Style>>(self, style: S) -> Self::Item

Sets the style of the object. Read more
Source§

impl Widget for Paragraph<'_>

Source§

fn render(self, area: Rect, buf: &mut Buffer)

Draws the current state of the widget in the given buffer. That is the only method required to implement a custom widget.
Source§

impl WidgetRef for Paragraph<'_>

Source§

fn render_ref(&self, area: Rect, buf: &mut Buffer)

Draws the current state of the widget in the given buffer. That is the only method required to implement a custom widget.
Source§

impl<'a> Eq for Paragraph<'a>

Source§

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<'a, T, U> Stylize<'a, T> for U
where U: Styled<Item = T>,

Source§

fn bg<C>(self, color: C) -> T
where C: Into<Color>,

Source§

fn fg<C>(self, color: C) -> T
where C: Into<Color>,

Source§

fn add_modifier(self, modifier: Modifier) -> T

Source§

fn remove_modifier(self, modifier: Modifier) -> T

Source§

fn reset(self) -> T

Source§

fn black(self) -> T

Sets the foreground color to black.
Source§

fn on_black(self) -> T

Sets the background color to black.
Source§

fn red(self) -> T

Sets the foreground color to red.
Source§

fn on_red(self) -> T

Sets the background color to red.
Source§

fn green(self) -> T

Sets the foreground color to green.
Source§

fn on_green(self) -> T

Sets the background color to green.
Source§

fn yellow(self) -> T

Sets the foreground color to yellow.
Source§

fn on_yellow(self) -> T

Sets the background color to yellow.
Source§

fn blue(self) -> T

Sets the foreground color to blue.
Source§

fn on_blue(self) -> T

Sets the background color to blue.
Source§

fn magenta(self) -> T

Sets the foreground color to magenta.
Source§

fn on_magenta(self) -> T

Sets the background color to magenta.
Source§

fn cyan(self) -> T

Sets the foreground color to cyan.
Source§

fn on_cyan(self) -> T

Sets the background color to cyan.
Source§

fn gray(self) -> T

Sets the foreground color to gray.
Source§

fn on_gray(self) -> T

Sets the background color to gray.
Source§

fn dark_gray(self) -> T

Sets the foreground color to dark_gray.
Source§

fn on_dark_gray(self) -> T

Sets the background color to dark_gray.
Source§

fn light_red(self) -> T

Sets the foreground color to light_red.
Source§

fn on_light_red(self) -> T

Sets the background color to light_red.
Source§

fn light_green(self) -> T

Sets the foreground color to light_green.
Source§

fn on_light_green(self) -> T

Sets the background color to light_green.
Source§

fn light_yellow(self) -> T

Sets the foreground color to light_yellow.
Source§

fn on_light_yellow(self) -> T

Sets the background color to light_yellow.
Source§

fn light_blue(self) -> T

Sets the foreground color to light_blue.
Source§

fn on_light_blue(self) -> T

Sets the background color to light_blue.
Source§

fn light_magenta(self) -> T

Sets the foreground color to light_magenta.
Source§

fn on_light_magenta(self) -> T

Sets the background color to light_magenta.
Source§

fn light_cyan(self) -> T

Sets the foreground color to light_cyan.
Source§

fn on_light_cyan(self) -> T

Sets the background color to light_cyan.
Source§

fn white(self) -> T

Sets the foreground color to white.
Source§

fn on_white(self) -> T

Sets the background color to white.
Source§

fn bold(self) -> T

Adds the BOLD modifier.
Source§

fn not_bold(self) -> T

Removes the BOLD modifier.
Source§

fn dim(self) -> T

Adds the DIM modifier.
Source§

fn not_dim(self) -> T

Removes the DIM modifier.
Source§

fn italic(self) -> T

Adds the ITALIC modifier.
Source§

fn not_italic(self) -> T

Removes the ITALIC modifier.
Source§

fn underlined(self) -> T

Adds the UNDERLINED modifier.
Source§

fn not_underlined(self) -> T

Removes the UNDERLINED modifier.
Adds the SLOW_BLINK modifier.
Removes the SLOW_BLINK modifier.
Adds the RAPID_BLINK modifier.
Removes the RAPID_BLINK modifier.
Source§

fn reversed(self) -> T

Adds the REVERSED modifier.
Source§

fn not_reversed(self) -> T

Removes the REVERSED modifier.
Source§

fn hidden(self) -> T

Adds the HIDDEN modifier.
Source§

fn not_hidden(self) -> T

Removes the HIDDEN modifier.
Source§

fn crossed_out(self) -> T

Adds the CROSSED_OUT modifier.
Source§

fn not_crossed_out(self) -> T

Removes the CROSSED_OUT modifier.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.