use std::{io, path::Path, process::Command}; use crate::utils::Program; pub struct Support { bat: Program, } impl Default for Support { fn default() -> Self { Self::new() } } impl Support { pub fn new() -> Self { Support { bat: Program::named("bat"), } } pub fn display_to_tty( &self, path: &Path, path_for_title: &Path, additional_title: impl AsRef, ) -> io::Result<()> { if !self.bat.found { log::warn!( "Would want to use 'bat' for colored preview of '{}', but it wasn't available in the PATH.", path.display() ); return Ok(()); } if Command::new("bat") .args(&["--paging=always", "-l=md", "--file-name"]) .arg(format!("{} ({})", path_for_title.display(), additional_title.as_ref())) .arg(path) .status()? .success() { Ok(()) } else { Err(io::Error::new(io::ErrorKind::Other, "bat exited with an error")) } } }