mirror of
https://github.com/TECHNOFAB11/tmux-copyrat.git
synced 2025-12-12 16:10:07 +01:00
refactor: better handling of hint_style_arg
This commit is contained in:
parent
d2eb8f0e16
commit
e13c58db30
3 changed files with 23 additions and 19 deletions
|
|
@ -58,12 +58,12 @@ pub struct Config {
|
|||
///
|
||||
/// Underline or surround the hint for increased visibility.
|
||||
/// If not provided, only the hint colors will be used.
|
||||
#[clap(short = 's', long, arg_enum, rename_all = "lowercase")]
|
||||
pub hint_style: Option<HintStyleArg>,
|
||||
#[clap(short = 's', long = "hint-style", arg_enum, rename_all = "lowercase")]
|
||||
pub hint_style_arg: Option<HintStyleArg>,
|
||||
|
||||
/// Chars surrounding each hint, used with `Surround` style.
|
||||
#[clap(long, default_value = "{}",
|
||||
parse(try_from_str = parse_chars))]
|
||||
parse(try_from_str = try_parse_chars))]
|
||||
pub hint_surroundings: (char, char),
|
||||
}
|
||||
|
||||
|
|
@ -78,7 +78,7 @@ pub enum HintStyleArg {
|
|||
}
|
||||
|
||||
/// Try to parse a `&str` into a tuple of `char`s.
|
||||
fn parse_chars(src: &str) -> Result<(char, char)> {
|
||||
fn try_parse_chars(src: &str) -> Result<(char, char)> {
|
||||
if src.chars().count() != 2 {
|
||||
return Err(Error::ExpectedSurroundingPair);
|
||||
}
|
||||
|
|
@ -86,3 +86,20 @@ fn parse_chars(src: &str) -> Result<(char, char)> {
|
|||
let chars: Vec<char> = src.chars().collect();
|
||||
Ok((chars[0], chars[1]))
|
||||
}
|
||||
|
||||
impl Config {
|
||||
pub fn hint_style(&self) -> Option<ui::HintStyle> {
|
||||
match &self.hint_style_arg {
|
||||
None => None,
|
||||
Some(style) => match style {
|
||||
HintStyleArg::Bold => Some(ui::HintStyle::Bold),
|
||||
HintStyleArg::Italic => Some(ui::HintStyle::Italic),
|
||||
HintStyleArg::Underline => Some(ui::HintStyle::Underline),
|
||||
HintStyleArg::Surround => {
|
||||
let (open, close) = self.hint_surroundings;
|
||||
Some(ui::HintStyle::Surround(open, close))
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -96,7 +96,7 @@ impl ConfigExt {
|
|||
}
|
||||
"@copyrat-hint-style" => {
|
||||
let case_insensitive = true;
|
||||
inner.hint_style = Some(
|
||||
inner.hint_style_arg = Some(
|
||||
basic::HintStyleArg::from_str(value, case_insensitive)
|
||||
.map_err(Error::ExpectedEnumVariant)?,
|
||||
)
|
||||
|
|
|
|||
15
src/lib.rs
15
src/lib.rs
|
|
@ -27,19 +27,6 @@ pub fn run(lines: &[&str], opt: &config::basic::Config) -> Option<ui::Selection>
|
|||
return None;
|
||||
}
|
||||
|
||||
let hint_style = match &opt.hint_style {
|
||||
None => None,
|
||||
Some(style) => match style {
|
||||
config::basic::HintStyleArg::Bold => Some(ui::HintStyle::Bold),
|
||||
config::basic::HintStyleArg::Italic => Some(ui::HintStyle::Italic),
|
||||
config::basic::HintStyleArg::Underline => Some(ui::HintStyle::Underline),
|
||||
config::basic::HintStyleArg::Surround => {
|
||||
let (open, close) = opt.hint_surroundings;
|
||||
Some(ui::HintStyle::Surround(open, close))
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
let default_output_destination = config::extended::OutputDestination::Tmux;
|
||||
|
||||
let selection: Option<ui::Selection> = {
|
||||
|
|
@ -49,7 +36,7 @@ pub fn run(lines: &[&str], opt: &config::basic::Config) -> Option<ui::Selection>
|
|||
default_output_destination,
|
||||
&opt.colors,
|
||||
&opt.hint_alignment,
|
||||
hint_style,
|
||||
opt.hint_style(),
|
||||
);
|
||||
|
||||
ui.present()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue