diff --git a/assets/completions/bat.zsh.in b/assets/completions/bat.zsh.in index e3683e8ac4..205b1ec91c 100644 --- a/assets/completions/bat.zsh.in +++ b/assets/completions/bat.zsh.in @@ -45,6 +45,7 @@ _{{PROJECT_EXECUTABLE}}_main() { '(-r --line-range)'{-r+,--line-range=}'[Only print the lines from N to M]:...' '(: --list-themes --list-languages -L)'{-L,--list-languages}'[Display all supported languages]' '(: --no-config)'--no-config'[Do not use the configuration file]' + '(: --no-custom-assets)'--no-custom-assets'[Do not load custom assets]' '(: --config-dir)'--config-dir'[Show bat'"'"'s configuration directory]' '(: --config-file)'--config-file'[Show path to the configuration file]' '(: --generate-config-file)'--generate-config-file'[Generates a default configuration file]' diff --git a/src/bin/bat/app.rs b/src/bin/bat/app.rs index ce27b35c16..f7613bbecf 100644 --- a/src/bin/bat/app.rs +++ b/src/bin/bat/app.rs @@ -234,6 +234,7 @@ impl App { .map(LineRanges::from) .map(HighlightedLineRanges) .unwrap_or_default(), + use_custom_assets: !self.matches.is_present("no-custom-assets"), }) } diff --git a/src/bin/bat/assets.rs b/src/bin/bat/assets.rs index 38dce43a19..b50575dd5f 100644 --- a/src/bin/bat/assets.rs +++ b/src/bin/bat/assets.rs @@ -23,7 +23,7 @@ pub fn clear_assets() { clear_asset("metadata.yaml", "metadata file"); } -pub fn assets_from_cache_or_binary() -> Result { +pub fn assets_from_cache_or_binary(use_custom_assets: bool) -> Result { let cache_dir = PROJECT_DIRS.cache_dir(); if let Some(metadata) = AssetsMetadata::load_from_folder(&cache_dir)? { if !metadata.is_compatible_with(crate_version!()) { @@ -41,8 +41,12 @@ pub fn assets_from_cache_or_binary() -> Result { } } - Ok(HighlightingAssets::from_cache(&cache_dir) - .unwrap_or_else(|_| HighlightingAssets::from_binary())) + let custom_assets = if use_custom_assets { + HighlightingAssets::from_cache(&cache_dir).ok() + } else { + None + }; + Ok(custom_assets.unwrap_or_else(HighlightingAssets::from_binary)) } fn clear_asset(filename: &str, description: &str) { diff --git a/src/bin/bat/clap_app.rs b/src/bin/bat/clap_app.rs index ea8efd89cc..37016f6244 100644 --- a/src/bin/bat/clap_app.rs +++ b/src/bin/bat/clap_app.rs @@ -450,6 +450,12 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> { .hidden(true) .help("Do not use the configuration file"), ) + .arg( + Arg::with_name("no-custom-assets") + .long("no-custom-assets") + .hidden(true) + .help("Do not load custom assets"), + ) .arg( Arg::with_name("config-file") .long("config-file") diff --git a/src/bin/bat/main.rs b/src/bin/bat/main.rs index fb407b90d7..ba7581f695 100644 --- a/src/bin/bat/main.rs +++ b/src/bin/bat/main.rs @@ -80,7 +80,7 @@ fn get_syntax_mapping_to_paths<'a>( pub fn get_languages(config: &Config) -> Result { let mut result: String = String::new(); - let assets = assets_from_cache_or_binary()?; + let assets = assets_from_cache_or_binary(config.use_custom_assets)?; let mut languages = assets .syntaxes() .iter() @@ -175,7 +175,7 @@ fn theme_preview_file<'a>() -> Input<'a> { } pub fn list_themes(cfg: &Config) -> Result<()> { - let assets = assets_from_cache_or_binary()?; + let assets = assets_from_cache_or_binary(cfg.use_custom_assets)?; let mut config = cfg.clone(); let mut style = HashSet::new(); style.insert(StyleComponent::Plain); @@ -216,7 +216,7 @@ pub fn list_themes(cfg: &Config) -> Result<()> { } fn run_controller(inputs: Vec, config: &Config) -> Result { - let assets = assets_from_cache_or_binary()?; + let assets = assets_from_cache_or_binary(config.use_custom_assets)?; let controller = Controller::new(&config, &assets); controller.run(inputs) } diff --git a/src/config.rs b/src/config.rs index 6bb84ab9dc..2794d5f312 100644 --- a/src/config.rs +++ b/src/config.rs @@ -82,6 +82,10 @@ pub struct Config<'a> { /// Ranges of lines which should be highlighted with a special background color pub highlighted_lines: HighlightedLineRanges, + + /// Whether or not to allow custom assets. If this is false or if custom assets (a.k.a. + /// cached assets) are not available, assets from the binary will be used instead. + pub use_custom_assets: bool, } #[cfg(all(feature = "application", feature = "paging"))] diff --git a/tests/integration_tests.rs b/tests/integration_tests.rs index 3e3d029a18..f09765b03c 100644 --- a/tests/integration_tests.rs +++ b/tests/integration_tests.rs @@ -795,6 +795,17 @@ fn does_not_print_unwanted_file_named_cache() { bat_with_config().arg("cach").assert().failure(); } +#[test] +fn accepts_no_custom_assets_arg() { + // Just make sure --no-custom-assets is considered a valid arg + // Don't bother to actually verify that it works + bat() + .arg("--no-custom-assets") + .arg("test.txt") + .assert() + .success(); +} + #[test] fn unicode_wrap() { bat_with_config()