From 3e9f0e3c0828b7c4e5a33fd3b00ec88a4c36288e Mon Sep 17 00:00:00 2001 From: Dan Davison Date: Sat, 27 Jun 2020 22:05:38 -0400 Subject: Improve --show-config command --- src/color.rs | 2 +- src/main.rs | 97 ++++++++++++++++++++++++++++++++++++++++++++++-------------- 2 files changed, 75 insertions(+), 24 deletions(-) diff --git a/src/color.rs b/src/color.rs index b19a8416..53d6a929 100644 --- a/src/color.rs +++ b/src/color.rs @@ -37,7 +37,7 @@ pub fn color_to_string(color: Color) -> String { match color { Color::Fixed(n) if n < 16 => ansi_16_color_number_to_name(n).unwrap().to_string(), Color::Fixed(n) => format!("{}", n), - Color::RGB(r, g, b) => format!("#{:02x?}{:02x?}{:02x?}", r, g, b), + Color::RGB(r, g, b) => format!("\"#{:02x?}{:02x?}{:02x?}\"", r, g, b), Color::Black => "black".to_string(), Color::Red => "red".to_string(), Color::Green => "green".to_string(), diff --git a/src/main.rs b/src/main.rs index 92dce70a..8466b5d6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -125,21 +125,21 @@ fn diff( } fn show_config(config: &config::Config) { - print!( - "\ -commit-style = {commit_style} -file-style = {file_style} -hunk-header-style = {hunk_header_style} -minus-style = {minus_style} -minus-non-emph-style = {minus_non_emph_style} -minus-emph-style = {minus_emph_style} -minus-empty-line-marker-style = {minus_empty_line_marker_style} -zero-style = {zero_style} -plus-style = {plus_style} -plus-non-emph-style = {plus_non_emph_style} -plus-emph-style = {plus_emph_style} -plus-empty-line-marker-style = {plus_empty_line_marker_style} -whitespace-error-style = {whitespace_error_style}", + println!( + " commit-style = {commit_style} + file-style = {file_style} + hunk-header-style = {hunk_header_style} + minus-style = {minus_style} + minus-non-emph-style = {minus_non_emph_style} + minus-emph-style = {minus_emph_style} + minus-empty-line-marker-style = {minus_empty_line_marker_style} + zero-style = {zero_style} + plus-style = {plus_style} + plus-non-emph-style = {plus_non_emph_style} + plus-emph-style = {plus_emph_style} + plus-empty-line-marker-style = {plus_empty_line_marker_style} + whitespace-error-style = {whitespace_error_style} + line-numbers = {line_numbers}", minus_style = config.minus_style.to_painted_string(), zero_style = config.zero_style.to_painted_string(), plus_style = config.plus_style.to_painted_string(), @@ -153,23 +153,74 @@ whitespace-error-style = {whitespace_error_style}", minus_empty_line_marker_style = config.minus_empty_line_marker_style.to_painted_string(), plus_empty_line_marker_style = config.plus_empty_line_marker_style.to_painted_string(), whitespace_error_style = config.whitespace_error_style.to_painted_string(), + line_numbers = config.line_numbers, ); if config.line_numbers { - print!( - " -line-numbers-minus-style = {line_numbers_minus_style} -line-numbers-zero-style = {line_numbers_zero_style} -line-numbers-plus-style = {line_numbers_plus_style} -line-numbers-left-style = {line_numbers_left_style} -line-numbers-right-style = {line_numbers_right_style}", + println!( + " line-numbers-minus-style = {line_numbers_minus_style} + line-numbers-zero-style = {line_numbers_zero_style} + line-numbers-plus-style = {line_numbers_plus_style} + line-numbers-left-style = {line_numbers_left_style} + line-numbers-right-style = {line_numbers_right_style} + line-numbers-left-format = {line_numbers_left_format} + line-numbers-right-format = {line_numbers_right_format}", line_numbers_minus_style = config.line_numbers_minus_style.to_painted_string(), line_numbers_zero_style = config.line_numbers_zero_style.to_painted_string(), line_numbers_plus_style = config.line_numbers_plus_style.to_painted_string(), line_numbers_left_style = config.line_numbers_left_style.to_painted_string(), line_numbers_right_style = config.line_numbers_right_style.to_painted_string(), + line_numbers_left_format = format_option_value(&config.line_numbers_left_format), + line_numbers_right_format = format_option_value(&config.line_numbers_right_format), ) } - println!(); + println!( + " 24-bit-color = {true_color} + file-added-label = {file_added_label} + file-modified-label = {file_modified_label} + file-removed-label = {file_removed_label} + file-renamed-label = {file_renamed_label} + keep-plus-minus-markers = {keep_plus_minus_markers} + max-line-distance = {max_line_distance} + navigate = {navigate} + paging = {paging_mode} + syntax-theme = {syntax_theme} + tabs = {tab_width} + word-diff-regex = {tokenization_regex}", + true_color = config.true_color, + file_added_label = format_option_value(&config.file_added_label), + file_modified_label = format_option_value(&config.file_modified_label), + file_removed_label = format_option_value(&config.file_removed_label), + file_renamed_label = format_option_value(&config.file_renamed_label), + keep_plus_minus_markers = config.keep_plus_minus_markers, + max_line_distance = config.max_line_distance, + navigate = config.navigate, + paging_mode = match config.paging_mode { + PagingMode::Always => "always", + PagingMode::Never => "never", + PagingMode::QuitIfOneScreen => "auto", + }, + syntax_theme = config.syntax_theme_name, + tab_width = config.tab_width, + tokenization_regex = format_option_value(&config.tokenization_regex.to_string()), + ); +} + +// Heuristics determining whether to quote string option values when printing values intended for +// git config. +fn format_option_value(s: S) -> String +where + S: AsRef, +{ + let s = s.as_ref(); + if s.ends_with(" ") + || s.starts_with(" ") + || s.contains(&['\\', '{', '}', ':'][..]) + || s.is_empty() + { + format!("'{}'", s) + } else { + s.to_string() + } } fn show_syntax_themes() -> std::io::Result<()> { -- cgit v1.2.3