From cffacad306c11f8d64208cf96e45be5df7f83759 Mon Sep 17 00:00:00 2001 From: Stefan Kunkel Date: Fri, 27 Nov 2020 10:16:19 +0100 Subject: [PATCH] make bat -L use pager --- CHANGELOG.md | 1 + src/bin/bat/main.rs | 27 ++++++++++++++------------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dc655216..28a78f34 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## Features +- make `bat -L` use built-in pager ## Bugfixes diff --git a/src/bin/bat/main.rs b/src/bin/bat/main.rs index cb50a84f..61c2a87a 100644 --- a/src/bin/bat/main.rs +++ b/src/bin/bat/main.rs @@ -78,7 +78,9 @@ fn get_syntax_mapping_to_paths<'a>( map } -pub fn list_languages(config: &Config) -> Result<()> { +pub fn get_languages(config: &Config) -> Result { + let mut result: String = String::new(); + let assets = assets_from_cache_or_binary()?; let mut languages = assets .syntaxes() @@ -119,12 +121,9 @@ pub fn list_languages(config: &Config) -> Result<()> { } } - let stdout = io::stdout(); - let mut stdout = stdout.lock(); - if config.loop_through { for lang in languages { - writeln!(stdout, "{}:{}", lang.name, lang.file_extensions.join(","))?; + result += &format!("{}:{}\n", lang.name, lang.file_extensions.join(",")); } } else { let longest = languages @@ -145,7 +144,7 @@ pub fn list_languages(config: &Config) -> Result<()> { }; for lang in languages { - write!(stdout, "{:width$}{}", lang.name, separator, width = longest)?; + result += &format!("{:width$}{}", lang.name, separator, width = longest); // Number of characters on this line so far, wrap before `desired_width` let mut num_chars = 0; @@ -156,20 +155,20 @@ pub fn list_languages(config: &Config) -> Result<()> { let new_chars = word.len() + comma_separator.len(); if num_chars + new_chars >= desired_width { num_chars = 0; - write!(stdout, "\n{:width$}{}", "", separator, width = longest)?; + result += &format!("\n{:width$}{}", "", separator, width = longest); } num_chars += new_chars; - write!(stdout, "{}", style.paint(&word[..]))?; + result += &format!("{}", style.paint(&word[..])); if extension.peek().is_some() { - write!(stdout, "{}", comma_separator)?; + result += &format!("{}", comma_separator); } } - writeln!(stdout)?; + result += "\n"; } } - Ok(()) + Ok(result) } fn theme_preview_file<'a>() -> Input<'a> { @@ -248,8 +247,10 @@ fn run() -> Result { let config = app.config(&inputs)?; if app.matches.is_present("list-languages") { - list_languages(&config)?; - Ok(true) + let languages: String = get_languages(&config)?; + let inputs: Vec = vec!(Input::from_reader(Box::new(languages.as_bytes()))); + let config = app.config(&inputs)?; + run_controller(inputs, &config) } else if app.matches.is_present("list-themes") { list_themes(&config)?; Ok(true)