@@ -12,14 +12,14 @@ use std::io::{self, BufRead, Result};
1212use std::path::Path;
1313use std::process;
1414
15−use ansi_term::Colour::{Fixed, Green, Red, Yellow, White};
15+use ansi_term::Colour::{Fixed, Green, Red, White, Yellow};
1616use atty::Stream;
1717use clap::{App, AppSettings, Arg, ArgMatches};
1818use console::Term;
1919use git2::{DiffOptions, IntoCString, Repository};
2020
2121use syntect::easy::HighlightFile;
22−use syntect::highlighting::ThemeSet;
22+use syntect::highlighting::{Theme, ThemeSet};
2323use syntect::parsing::SyntaxSet;
2424use syntect::util::as_24_bit_terminal_escaped;
2525
@@ -33,12 +33,14 @@ enum LineChange {
3333
3434type LineChanges = HashMap<u32, LineChange>;
3535
36−fn print_file<P: AsRef<Path>>(filename: P, line_changes: Option<LineChanges>) -> io::Result<()> {
36+fn print_file<P: AsRef<Path>>(
37+ theme: &Theme,
38+ filename: P,
39+ line_changes: Option<LineChanges>,
40+) -> io::Result<()> {
3741 let ss = SyntaxSet::load_defaults_nonewlines();
38− let ts = ThemeSet::load_defaults();
39− let theme = &ts.themes["base16-eighties.dark"];
4042
41− let mut highlighter = HighlightFile::new(filename.as_ref().clone(), &ss, theme)?;
43+ let mut highlighter = HighlightFile::new(filename.as_ref().clone(), &ss, &theme)?;
4244
4345 let term = Term::stdout();
4446 let (_height, width) = term.size();
@@ -94,11 +96,11 @@ fn get_line_changes(filename: String) -> Option<LineChanges> {
9496 let repo = Repository::open_from_env().ok()?;
9597
9698 let mut diff_options = DiffOptions::new();
97− diff_options.pathspec(filename.into_c_string().unwrap());
99+ diff_options.pathspec(filename.into_c_string().ok()?);
98100 diff_options.context_lines(0);
99101
100102 let diff = repo.diff_index_to_workdir(None, Some(&mut diff_options))
101− .unwrap();
103+ .ok()?;
102104
103105 let mut line_changes: LineChanges = HashMap::new();
104106
@@ -144,10 +146,13 @@ fn get_line_changes(filename: String) -> Option<LineChanges> {
144146}
145147
146148fn run(matches: &ArgMatches) -> Result<()> {
149+ let theme_set = ThemeSet::load_from_folder("/home/shark/Informatik/rust/bat/themes").unwrap();
150+ let theme = &theme_set.themes["Monokai"];
151+
147152 if let Some(files) = matches.values_of("file") {
148153 for file in files {
149154 let line_changes = get_line_changes(file.to_string());
150− print_file(file, line_changes)?;
155+ print_file(theme, file, line_changes)?;
151156 }
152157 }
153158
@@ -182,7 +187,7 @@ fn main() {
182187 let result = run(&matches);
183188
184189 if let Err(e) = result {
185− eprintln!("{}: {}", Red.paint("bat error"), e);
190+ eprintln!("{}: {}", Red.paint("[bat error]"), e);
186191 process::exit(1);
187192 }
188193}