diff --git a/README.md b/README.md index d7b9397..df265ab 100644 --- a/README.md +++ b/README.md @@ -138,6 +138,9 @@ prompt_current_untyped = "blue;bold" # cursor character prompt_cursor = "none;underlined" +# paragraph alignment +block_alignment = "center" + ## results styles ## # overview text diff --git a/src/config.rs b/src/config.rs index 1b2d8a4..24e4e14 100644 --- a/src/config.rs +++ b/src/config.rs @@ -2,7 +2,10 @@ use serde::{ de::{self, IntoDeserializer}, Deserialize, }; -use tui::style::{Color, Modifier, Style}; +use tui::{ + layout::Alignment, + style::{Color, Modifier, Style}, +}; #[derive(Debug, Deserialize)] #[serde(default)] @@ -51,6 +54,9 @@ pub struct Theme { #[serde(deserialize_with = "deserialize_style")] pub prompt_cursor: Style, + #[serde(deserialize_with = "deserialize_align")] + pub block_alignment: Alignment, + // results widget #[serde(deserialize_with = "deserialize_style")] pub results_overview: Style, @@ -118,6 +124,7 @@ impl Default for Theme { results_restart_prompt: Style::default() .fg(Color::Gray) .add_modifier(Modifier::ITALIC), + block_alignment: Alignment::Left, } } } @@ -231,6 +238,33 @@ where deserializer.deserialize_str(ColorVisitor) } +fn deserialize_align<'de, D>(deserializer: D) -> Result +where + D: de::Deserializer<'de>, +{ + struct AlignmentVisitor; + impl<'de> de::Visitor<'de> for AlignmentVisitor { + type Value = Alignment; + + fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result { + formatter.write_str("an alignment") + } + + fn visit_str(self, value: &str) -> Result { + match value { + "left" => Ok(Alignment::Left), + "center" => Ok(Alignment::Center), + "right" => Ok(Alignment::Right), + _ => Err(E::invalid_value( + de::Unexpected::Str(value), + &"an alignment", + )), + } + } + } + deserializer.deserialize_str(AlignmentVisitor) +} + #[cfg(test)] mod tests { use super::*; diff --git a/src/ui.rs b/src/ui.rs index 7e6ebea..9acba90 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -179,7 +179,9 @@ impl ThemedWidget for &Test { .borders(Borders::ALL) .border_type(BorderType::Rounded) .border_style(theme.prompt_border), - ); + + ) + .alignment(theme.block_alignment); target.render(chunks[1], buf); } }