summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNoah Too <41364823+krivahtoo@users.noreply.github.com>2021-11-18 18:40:19 +0300
committerGitHub <noreply@github.com>2021-11-18 10:40:19 -0500
commita3cf8fed94c0401f93aa983376c882130a2c6d02 (patch)
tree0088ad7cea7d8a872203160dfe5b48ff9e99636f
parent7a7600c7a5f423d0b0a887db80c221009a9d4990 (diff)
Add syntax highlighting to file previews (#106)
-rw-r--r--Cargo.lock10
-rw-r--r--Cargo.toml1
-rw-r--r--src/ui/widgets/tui_file_preview.rs10
3 files changed, 16 insertions, 5 deletions
diff --git a/Cargo.lock b/Cargo.lock
index bb76a7c..4e83a03 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -18,6 +18,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "20e59b2ccb4c1ffbbf45af6f493e16ac65a66981c85664f1587816c0b08cd698"
[[package]]
+name = "ansi-to-tui"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c3fb5747c9d1b444cb6c9f96c84d09a3f7ae9e1eb77f52ec45c8bf30a6e6bdf"
+dependencies = [
+ "tui",
+]
+
+[[package]]
name = "ansi_term"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -289,6 +298,7 @@ name = "joshuto"
version = "0.9.1"
dependencies = [
"alphanumeric-sort",
+ "ansi-to-tui",
"chrono",
"colors-transform",
"dirs-next",
diff --git a/Cargo.toml b/Cargo.toml
index 1e6ca9e..68384f7 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -35,6 +35,7 @@ xdg = "^2"
phf = { version = "^0", features = ["macros"], optional = true }
trash = { version = "^1", optional = true }
unicode-segmentation = "^1"
+ansi-to-tui = "0.4.1"
[features]
devicons = [ "phf" ]
diff --git a/src/ui/widgets/tui_file_preview.rs b/src/ui/widgets/tui_file_preview.rs
index 769b28f..0a784cc 100644
--- a/src/ui/widgets/tui_file_preview.rs
+++ b/src/ui/widgets/tui_file_preview.rs
@@ -1,6 +1,7 @@
+use ansi_to_tui::ansi_to_text;
use tui::buffer::Buffer;
use tui::layout::Rect;
-use tui::style::Style;
+use tui::text::Text;
use tui::widgets::Widget;
use crate::fs::JoshutoDirEntry;
@@ -19,10 +20,9 @@ impl<'a> TuiFilePreview<'a> {
impl<'a> Widget for TuiFilePreview<'a> {
fn render(self, area: Rect, buf: &mut Buffer) {
- let style = Style::default();
- let area_width = area.width as usize;
- for (y, s) in (area.y..area.y + area.height).zip(self.preview.output.as_str().split('\n')) {
- buf.set_stringn(area.x, y, s, area_width, style);
+ let text: Text = ansi_to_text(self.preview.output.as_str().as_bytes().to_vec()).unwrap();
+ for (y, line) in (area.y..area.y + area.height).zip(text.lines) {
+ buf.set_spans(area.x, y, &line, area.width);
}
}
}