on master help sign in
make bat -L use pager
commitcffacad306c11f8d64208cf96e45be5df7f83759 authorStefan Kunkel <stefan.kunkel@tngtech.com> dateFri 27 Nov 2020, 10:16 (6 years ago) parentcc7b89f
2 files changed+15−13
CHANGELOG.md+1 src/bin/bat/main.rs+14−13
CHANGELOG.md+1
@@ -2,6 +2,7 @@
22
33
44## Features
5+- make `bat -L` use built-in pager
56
67## Bugfixes
78
src/bin/bat/main.rs+14−13
@@ -78,7 +78,9 @@ fn get_syntax_mapping_to_paths<'a>(
7878 map
7979}
8080
81−pub fn list_languages(config: &Config) -> Result<()> {
81+pub fn get_languages(config: &Config) -> Result<String> {
82+ let mut result: String = String::new();
83+
8284 let assets = assets_from_cache_or_binary()?;
8385 let mut languages = assets
8486 .syntaxes()
@@ -119,12 +121,9 @@ pub fn list_languages(config: &Config) -> Result<()> {
119121 }
120122 }
121123
122− let stdout = io::stdout();
123− let mut stdout = stdout.lock();
124−
125124 if config.loop_through {
126125 for lang in languages {
127− writeln!(stdout, "{}:{}", lang.name, lang.file_extensions.join(","))?;
126+ result += &format!("{}:{}\n", lang.name, lang.file_extensions.join(","));
128127 }
129128 } else {
130129 let longest = languages
@@ -145,7 +144,7 @@ pub fn list_languages(config: &Config) -> Result<()> {
145144 };
146145
147146 for lang in languages {
148− write!(stdout, "{:width$}{}", lang.name, separator, width = longest)?;
147+ result += &format!("{:width$}{}", lang.name, separator, width = longest);
149148
150149 // Number of characters on this line so far, wrap before `desired_width`
151150 let mut num_chars = 0;
@@ -156,20 +155,20 @@ pub fn list_languages(config: &Config) -> Result<()> {
156155 let new_chars = word.len() + comma_separator.len();
157156 if num_chars + new_chars >= desired_width {
158157 num_chars = 0;
159− write!(stdout, "\n{:width$}{}", "", separator, width = longest)?;
158+ result += &format!("\n{:width$}{}", "", separator, width = longest);
160159 }
161160
162161 num_chars += new_chars;
163− write!(stdout, "{}", style.paint(&word[..]))?;
162+ result += &format!("{}", style.paint(&word[..]));
164163 if extension.peek().is_some() {
165− write!(stdout, "{}", comma_separator)?;
164+ result += &format!("{}", comma_separator);
166165 }
167166 }
168− writeln!(stdout)?;
167+ result += "\n";
169168 }
170169 }
171170
172− Ok(())
171+ Ok(result)
173172}
174173
175174fn theme_preview_file<'a>() -> Input<'a> {
@@ -248,8 +247,10 @@ fn run() -> Result<bool> {
248247 let config = app.config(&inputs)?;
249248
250249 if app.matches.is_present("list-languages") {
251− list_languages(&config)?;
252− Ok(true)
250+ let languages: String = get_languages(&config)?;
251+ let inputs: Vec<Input> = vec!(Input::from_reader(Box::new(languages.as_bytes())));
252+ let config = app.config(&inputs)?;
253+ run_controller(inputs, &config)
253254 } else if app.matches.is_present("list-themes") {
254255 list_themes(&config)?;
255256 Ok(true)