mirror of
https://github.com/dandavison/delta.git
synced 2024-10-05 04:17:21 +03:00
parent
130b0b6a21
commit
2c0b35f89c
10
src/cli.rs
10
src/cli.rs
@ -13,7 +13,7 @@ use crate::bat_utils::output::PagingMode;
|
||||
use crate::git_config::{GitConfig, GitConfigEntry};
|
||||
use crate::options;
|
||||
|
||||
#[derive(StructOpt, Clone, Default)]
|
||||
#[derive(StructOpt, Default)]
|
||||
#[structopt(
|
||||
name = "delta",
|
||||
about = "A viewer for git and diff output",
|
||||
@ -678,13 +678,13 @@ impl Default for PagingMode {
|
||||
|
||||
impl Opt {
|
||||
pub fn from_args_and_git_config(
|
||||
git_config: &mut Option<GitConfig>,
|
||||
git_config: Option<GitConfig>,
|
||||
assets: HighlightingAssets,
|
||||
) -> Self {
|
||||
Self::from_clap_and_git_config(Self::clap().get_matches(), git_config, assets)
|
||||
}
|
||||
|
||||
pub fn from_iter_and_git_config<I>(iter: I, git_config: &mut Option<GitConfig>) -> Self
|
||||
pub fn from_iter_and_git_config<I>(iter: I, git_config: Option<GitConfig>) -> Self
|
||||
where
|
||||
I: IntoIterator,
|
||||
I::Item: Into<OsString> + Clone,
|
||||
@ -695,12 +695,12 @@ impl Opt {
|
||||
|
||||
fn from_clap_and_git_config(
|
||||
arg_matches: clap::ArgMatches,
|
||||
git_config: &mut Option<GitConfig>,
|
||||
mut git_config: Option<GitConfig>,
|
||||
assets: HighlightingAssets,
|
||||
) -> Self {
|
||||
let mut opt = Opt::from_clap(&arg_matches);
|
||||
options::rewrite::apply_rewrite_rules(&mut opt, &arg_matches);
|
||||
options::set::set_options(&mut opt, git_config, &arg_matches, assets);
|
||||
options::set::set_options(&mut opt, &mut git_config, &arg_matches, assets);
|
||||
opt
|
||||
}
|
||||
|
||||
|
@ -102,7 +102,7 @@ pub mod tests {
|
||||
let builtin_features = make_builtin_features();
|
||||
let mut args = vec!["delta".to_string()];
|
||||
args.extend(builtin_features.keys().map(|s| format!("--{}", s)));
|
||||
let opt = cli::Opt::from_iter_and_git_config(args, &mut None);
|
||||
let opt = cli::Opt::from_iter_and_git_config(args, None);
|
||||
let features: HashSet<&str> = opt.features.split_whitespace().collect();
|
||||
for feature in builtin_features.keys() {
|
||||
assert!(features.contains(feature.as_str()))
|
||||
|
27
src/main.rs
27
src/main.rs
@ -58,7 +58,7 @@ pub mod errors {
|
||||
// arguments and without standard input; 2 is used to report a real problem.
|
||||
fn run_app() -> std::io::Result<i32> {
|
||||
let assets = HighlightingAssets::new();
|
||||
let opt = cli::Opt::from_args_and_git_config(&mut git_config::GitConfig::try_create(), assets);
|
||||
let opt = cli::Opt::from_args_and_git_config(git_config::GitConfig::try_create(), assets);
|
||||
|
||||
if opt.list_languages {
|
||||
list_languages()?;
|
||||
@ -351,19 +351,17 @@ fn show_themes(dark: bool, light: bool, computed_theme_is_light: bool) -> std::i
|
||||
}
|
||||
};
|
||||
|
||||
let mut git_config = git_config::GitConfig::try_create();
|
||||
let opt = cli::Opt::from_iter_and_git_config(
|
||||
&["", "", "--navigate", "--show-themes"],
|
||||
&mut git_config,
|
||||
);
|
||||
let git_config = git_config::GitConfig::try_create();
|
||||
let opt =
|
||||
cli::Opt::from_iter_and_git_config(&["", "", "--navigate", "--show-themes"], git_config);
|
||||
let mut output_type =
|
||||
OutputType::from_mode(PagingMode::Always, None, &config::Config::from(opt)).unwrap();
|
||||
let title_style = ansi_term::Style::new().bold();
|
||||
let writer = output_type.handle().unwrap();
|
||||
|
||||
for theme in &get_themes(git_config::GitConfig::try_create()) {
|
||||
let opt =
|
||||
cli::Opt::from_iter_and_git_config(&["", "", "--features", theme], &mut git_config);
|
||||
let git_config = git_config::GitConfig::try_create();
|
||||
let opt = cli::Opt::from_iter_and_git_config(&["", "", "--features", theme], git_config);
|
||||
let is_dark_theme = opt.dark;
|
||||
let is_light_theme = opt.light;
|
||||
let config = config::Config::from(opt);
|
||||
@ -389,7 +387,6 @@ fn show_themes(dark: bool, light: bool, computed_theme_is_light: bool) -> std::i
|
||||
|
||||
#[cfg(not(tarpaulin_include))]
|
||||
fn show_syntax_themes() -> std::io::Result<()> {
|
||||
let mut opt = cli::Opt::from_args();
|
||||
let assets = HighlightingAssets::new();
|
||||
let mut output_type = OutputType::from_mode(
|
||||
PagingMode::QuitIfOneScreen,
|
||||
@ -398,7 +395,6 @@ fn show_syntax_themes() -> std::io::Result<()> {
|
||||
)
|
||||
.unwrap();
|
||||
let mut writer = output_type.handle().unwrap();
|
||||
opt.computed.syntax_set = assets.syntax_set;
|
||||
|
||||
let stdin_data = if !atty::is(atty::Stream::Stdin) {
|
||||
let mut buf = Vec::new();
|
||||
@ -412,9 +408,16 @@ fn show_syntax_themes() -> std::io::Result<()> {
|
||||
None
|
||||
};
|
||||
|
||||
let make_opt = || {
|
||||
let mut opt = cli::Opt::from_args();
|
||||
opt.computed.syntax_set = assets.syntax_set.clone();
|
||||
opt
|
||||
};
|
||||
let opt = make_opt();
|
||||
|
||||
if !(opt.dark || opt.light) {
|
||||
_show_syntax_themes(opt.clone(), false, &mut writer, stdin_data.as_ref())?;
|
||||
_show_syntax_themes(opt, true, &mut writer, stdin_data.as_ref())?;
|
||||
_show_syntax_themes(opt, false, &mut writer, stdin_data.as_ref())?;
|
||||
_show_syntax_themes(make_opt(), true, &mut writer, stdin_data.as_ref())?;
|
||||
} else if opt.light {
|
||||
_show_syntax_themes(opt, true, &mut writer, stdin_data.as_ref())?;
|
||||
} else {
|
||||
|
@ -38,14 +38,14 @@ fn _make_options_from_args_and_git_config(
|
||||
let mut args: Vec<&str> = itertools::chain(&["/dev/null", "/dev/null"], args)
|
||||
.map(|s| *s)
|
||||
.collect();
|
||||
let mut git_config = match (git_config_contents, git_config_path) {
|
||||
let git_config = match (git_config_contents, git_config_path) {
|
||||
(Some(contents), Some(path)) => Some(make_git_config(contents, path, honor_env_var)),
|
||||
_ => {
|
||||
args.push("--no-gitconfig");
|
||||
None
|
||||
}
|
||||
};
|
||||
cli::Opt::from_iter_and_git_config(args, &mut git_config)
|
||||
cli::Opt::from_iter_and_git_config(args, git_config)
|
||||
}
|
||||
|
||||
pub fn make_options_from_args(args: &[&str]) -> cli::Opt {
|
||||
|
Loading…
Reference in New Issue
Block a user