mirror of
https://github.com/sharkdp/bat
synced 2024-11-15 08:37:12 +00:00
Add 2 examples
This commit is contained in:
parent
2253d07341
commit
1e19404736
2 changed files with 117 additions and 0 deletions
33
examples/using_controller.rs
Normal file
33
examples/using_controller.rs
Normal file
|
@ -0,0 +1,33 @@
|
|||
use bat::{
|
||||
assets::HighlightingAssets,
|
||||
controller::Controller,
|
||||
inputfile::InputFile,
|
||||
style::{OutputComponent, OutputComponents},
|
||||
Config,
|
||||
};
|
||||
use std::collections::HashSet;
|
||||
|
||||
fn main() {
|
||||
let assets = HighlightingAssets::new();
|
||||
let mut config = Config {
|
||||
term_width: 100, // must be greater than 13 to enable style=numbers
|
||||
colored_output: true,
|
||||
true_color: true,
|
||||
output_components: OutputComponents(with_header()),
|
||||
..Default::default()
|
||||
};
|
||||
let mut add_file = |file: &'static str| config.files.push(InputFile::Ordinary(file));
|
||||
|
||||
add_file("Cargo.toml");
|
||||
// add_file("build.rs");
|
||||
|
||||
let print = || Controller::new(&config, &assets).run();
|
||||
print().expect("no error");
|
||||
}
|
||||
|
||||
fn with_header() -> HashSet<OutputComponent> {
|
||||
[OutputComponent::Header, OutputComponent::Grid]
|
||||
.iter()
|
||||
.cloned()
|
||||
.collect()
|
||||
}
|
84
examples/using_printer.rs
Normal file
84
examples/using_printer.rs
Normal file
|
@ -0,0 +1,84 @@
|
|||
use bat::{
|
||||
self,
|
||||
assets::HighlightingAssets,
|
||||
inputfile::InputFile,
|
||||
line_range::{LineRange, LineRanges, RangeCheckResult},
|
||||
output::OutputType,
|
||||
printer::{InteractivePrinter, Printer},
|
||||
style::{OutputComponent, OutputComponents},
|
||||
Config,
|
||||
};
|
||||
use std::{collections::HashSet, io};
|
||||
|
||||
fn main() -> bat::errors::Result<()> {
|
||||
let assets = HighlightingAssets::new();
|
||||
let mut config = Config {
|
||||
term_width: 14, // must be greater than 13 to enable style=numbers
|
||||
colored_output: true,
|
||||
true_color: true,
|
||||
line_ranges: LineRanges::from(vec![
|
||||
LineRange::from("5:7")?,
|
||||
LineRange::from("92:97")?,
|
||||
LineRange::from("15:17")?,
|
||||
]),
|
||||
output_components: OutputComponents(with_full_decorations()),
|
||||
..Default::default()
|
||||
};
|
||||
let mut add_file = |file: &'static str| config.files.push(InputFile::Ordinary(file));
|
||||
|
||||
// add_file("Cargo.toml");
|
||||
add_file("build.rs");
|
||||
|
||||
let mut output_type = OutputType::from_mode(config.paging_mode, config.pager)?;
|
||||
let writer = output_type.handle()?;
|
||||
let stdin = io::stdin();
|
||||
|
||||
for input_file in &config.files {
|
||||
let mut reader = input_file.get_reader(&stdin)?;
|
||||
let mut printer = InteractivePrinter::new(&config, &assets, *input_file, &mut reader);
|
||||
|
||||
printer.print_header(writer, *input_file)?;
|
||||
|
||||
if !reader.first_line.is_empty() {
|
||||
let mut line_buffer = Vec::new();
|
||||
let mut line_number = 1;
|
||||
let mut has_snip = true; // skip first line snip
|
||||
|
||||
while reader.read_line(&mut line_buffer)? {
|
||||
match config.line_ranges.check(line_number) {
|
||||
RangeCheckResult::OutsideRange => {
|
||||
if !has_snip {
|
||||
printer.print_snip(writer)?;
|
||||
has_snip = true;
|
||||
}
|
||||
}
|
||||
RangeCheckResult::InRange => {
|
||||
printer.print_line(
|
||||
/*out_of_range = */ false,
|
||||
writer,
|
||||
line_number,
|
||||
&line_buffer,
|
||||
)?;
|
||||
has_snip = false;
|
||||
}
|
||||
RangeCheckResult::AfterLastRange => break,
|
||||
}
|
||||
|
||||
line_number += 1;
|
||||
line_buffer.clear();
|
||||
}
|
||||
}
|
||||
|
||||
printer.print_footer(writer)?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn with_full_decorations() -> HashSet<OutputComponent> {
|
||||
OutputComponent::Full
|
||||
.components(Default::default())
|
||||
.iter()
|
||||
.cloned()
|
||||
.collect()
|
||||
}
|
Loading…
Reference in a new issue