summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKyohei Uto <im@kyoheiu.dev>2023-11-01 16:17:24 +0900
committerKyohei Uto <im@kyoheiu.dev>2023-11-01 16:17:24 +0900
commit37901ffe65f6bc1c597dec9d371bf962c75796e9 (patch)
treec3cc273129e8350570f63ed64690d8437aa55fa1
parentfda73ac7077e2778602a82367a14cca15fd35d9b (diff)
Use bat to preview text contents
-rw-r--r--src/layout.rs33
1 files changed, 30 insertions, 3 deletions
diff --git a/src/layout.rs b/src/layout.rs
index 8f19e88..436ceb2 100644
--- a/src/layout.rs
+++ b/src/layout.rs
@@ -161,7 +161,9 @@ impl Layout {
}
}
Some(PreviewType::Text) => {
- self.preview_text(item);
+ if let Err(e) = self.preview_text(item) {
+ print_warning(e, y);
+ }
}
Some(PreviewType::Binary) => {
print!("(Binary file)");
@@ -185,10 +187,35 @@ impl Layout {
print!("{}", file_name);
}
- fn preview_text(&self, item: &ItemInfo) {
+ fn preview_text(&self, item: &ItemInfo) -> Result<(), FxError> {
if let Some(content) = &item.content {
- self.print_txt_in_preview_area(item, &format_txt(content, self.preview_space.0, false));
+ if !self.has_bat {
+ self.print_txt_in_preview_area(
+ item,
+ &format_txt(content, self.preview_space.0, false),
+ );
+ } else {
+ let path = item.file_path.to_str().ok_or(FxError::InvalidPath)?;
+ let output = std::process::Command::new("bat")
+ .args([
+ path,
+ "-fpP",
+ "--wrap",
+ "character",
+ "--terminal-width",
+ &format!("{}", self.preview_space.0),
+ ])
+ .output()?
+ .stdout;
+ let content = String::from_utf8(output)?;
+ let content = content
+ .split('\n')
+ .map(|x| x.to_owned())
+ .collect::<Vec<String>>();
+ self.print_txt_in_preview_area(item, &content);
+ }
}
+ Ok(())
}
fn preview_directory(&self, item: &ItemInfo) {