Modifiers
Demonstrates the style
Modifiers Source
main.rs.
git clone https://github.com/ratatui/ratatui.git --branch latestcd ratatuicargo run -p modifiers
/// A Ratatui example that demonstrates how to use modifiers.////// It will render a grid of combinations of foreground and background colors with all/// modifiers applied to them.////// This example runs with the Ratatui library code in the branch that you are currently/// reading. See the [`latest`] branch for the code which works with the most recent Ratatui/// release.////// [`latest`]: https://github.com/ratatui/ratatui/tree/latestuse std::{error::Error, iter::once, result};
use crossterm::event;use itertools::Itertools;use ratatui::layout::{Constraint, Layout};use ratatui::style::{Color, Modifier, Style, Stylize};use ratatui::text::Line;use ratatui::widgets::Paragraph;use ratatui::Frame;
type Result<T> = result::Result<T, Box<dyn Error>>;
fn main() -> Result<()> { color_eyre::install()?; ratatui::run(|terminal| loop { terminal.draw(render)?; if event::read()?.is_key_press() { break Ok(()); } })}
fn render(frame: &mut Frame) { let layout = Layout::vertical([Constraint::Length(1), Constraint::Min(0)]); let [text_area, main_area] = frame.area().layout(&layout); frame.render_widget( Paragraph::new("Note: not all terminals support all modifiers") .style(Style::default().fg(Color::Red).add_modifier(Modifier::BOLD)), text_area, ); let layout = Layout::vertical([Constraint::Length(1); 50]) .split(main_area) .iter() .flat_map(|area| { Layout::horizontal([Constraint::Percentage(20); 5]) .split(*area) .to_vec() }) .collect_vec();
let colors = [ Color::Black, Color::DarkGray, Color::Gray, Color::White, Color::Red, ]; let all_modifiers = once(Modifier::empty()) .chain(Modifier::all().iter()) .collect_vec(); let mut index = 0; for bg in &colors { for fg in &colors { for modifier in &all_modifiers { let modifier_name = format!("{modifier:11?}"); let padding = (" ").repeat(12 - modifier_name.len()); let paragraph = Paragraph::new(Line::from(vec![ modifier_name.fg(*fg).bg(*bg).add_modifier(*modifier), padding.fg(*fg).bg(*bg).add_modifier(*modifier), // This is a hack to work around a bug in VHS which is used for rendering the // examples to gifs. The bug is that the background color of a paragraph seems // to bleed into the next character. ".".black().on_black(), ])); frame.render_widget(paragraph, layout[index]); index += 1; } } }}