Paragraph

The Paragraph widget provides a way to display text content in your terminal user interface. It allows not only plain text display but also handling text wrapping, alignment, and styling. This page will delve deeper into the functionality of the Paragraph widget.

Usage

let p = Paragraph::new("Hello, World!");
f.render_widget(p, chunks[0]);

Styling and Borders

You can also apply styles to your text and wrap it with a border:

let p = Paragraph::new("Hello, World!")
    .style(Style::default().fg(Color::Yellow))
    .block(
        Block::default()
            .borders(Borders::ALL)
            .title("Title")
            .border_type(BorderType::Rounded)
    );
f.render_widget(p, chunks[0]);

Wrapping

The Paragraph widget will wrap the content based on the available width in its containing block. You can also control the wrapping behavior using the wrap method:

let p = Paragraph::new("A very long text that might not fit the container...")
    .wrap(Wrap { trim: true });
f.render_widget(p, chunks[0]);

Setting trim to true will ensure that trailing whitespaces at the end of each line are removed.

Alignment

let p = Paragraph::new("Centered Text")
    .alignment(Alignment::Center);
f.render_widget(p, chunks[0]);

Styled Text

Paragraph supports rich text through Span, Line, and Text:

let lines = vec![];
lines.push(Line::from(vec![
    Span::styled("Hello ", Style::default().fg(Color::Yellow)),
    Span::styled("World", Style::default().fg(Color::Blue).bg(Color::White)),
]));
lines.push(Line::from(vec![
    Span::styled("Goodbye ", Style::default().fg(Color::Yellow)),
    Span::styled("World", Style::default().fg(Color::Blue).bg(Color::White)),
]));
let text = Text::from(lines);
let p = Paragraph::new(text);
f.render_widget(p, chunks[0]);

Scrolling

For long content, Paragraph supports scrolling:

let mut p = Paragraph::new("Lorem ipsum ...")
    .scroll((1, 0));  // Scroll down by one line
f.render_widget(p, chunks[0]);