diff --git a/Cargo.lock b/Cargo.lock index 2931b7c..d5aaa3c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,33 +4,30 @@ version = 3 [[package]] name = "aho-corasick" -version = "0.7.18" +version = "0.7.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" dependencies = [ "memchr", ] [[package]] -name = "ansi_term" -version = "0.12.1" +name = "anstyle" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" -dependencies = [ - "winapi", -] +checksum = "58bb0ec944fe041c41e32dcd60b49327fcb7ff761433838878cc97ddecf16db7" [[package]] name = "anyhow" -version = "1.0.57" +version = "1.0.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f9b8508dccb7687a1d6c4ce66b2b0ecef467c94667de27d8d7fe1f8d2a9cdc" +checksum = "216261ddc8289130e551ddcd5ce8a064710c0d064a4d2895c67151c92b5443f6" [[package]] name = "assert_cmd" -version = "2.0.4" +version = "2.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93ae1ddd39efd67689deb1979d80bad3bf7f2b09c6e6117c8d1f2443b5e2f83e" +checksum = "ba45b8163c49ab5f972e59a8a5a03b6d2972619d486e19ec9fe744f7c2753d3c" dependencies = [ "bstr", "doc-comment", @@ -46,7 +43,7 @@ version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ - "hermit-abi", + "hermit-abi 0.1.19", "libc", "winapi", ] @@ -65,30 +62,31 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bstr" -version = "0.2.17" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" +checksum = "fca0852af221f458706eb0725c03e4ed6c46af9ac98e6a689d5e634215d594dd" dependencies = [ - "lazy_static", "memchr", + "once_cell", "regex-automata", + "serde", ] [[package]] name = "cc" -version = "1.0.73" +version = "1.0.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" +checksum = "e9f73505338f7d905b19d18738976aae232eb46b8efc15554ffc56deb5d9ebe4" [[package]] name = "clap" -version = "4.0.23" +version = "4.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eb41c13df48950b20eb4cd0eefa618819469df1bffc49d11e8487c4ba0037e5" +checksum = "0acbd8d28a0a60d7108d7ae850af6ba34cf2d1257fc646980e5f97ce14275966" dependencies = [ - "atty", "bitflags", "clap_lex", + "is-terminal", "once_cell", "strsim", "termcolor", @@ -106,18 +104,18 @@ dependencies = [ [[package]] name = "const_format" -version = "0.2.23" +version = "0.2.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0936ffe6d0c8d6a51b3b0a73b2acbe925d786f346cf45bfddc8341d79fb7dc8a" +checksum = "7309d9b4d3d2c0641e018d449232f2e28f1b22933c137f157d3dbc14228b8c0e" dependencies = [ "const_format_proc_macros", ] [[package]] name = "const_format_proc_macros" -version = "0.2.22" +version = "0.2.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef196d5d972878a48da7decb7686eded338b4858fbabeed513d63a7c98b2b82d" +checksum = "d897f47bf7270cf70d370f8f98c1abb6d2d4cf60a6845d30e05bfb90c6568650" dependencies = [ "proc-macro2", "quote", @@ -154,9 +152,9 @@ checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" [[package]] name = "either" -version = "1.6.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" +checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" [[package]] name = "errno" @@ -197,11 +195,20 @@ dependencies = [ "libc", ] +[[package]] +name = "hermit-abi" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" +dependencies = [ + "libc", +] + [[package]] name = "hexyl" version = "0.10.0" dependencies = [ - "ansi_term", + "anstyle", "anyhow", "assert_cmd", "atty", @@ -216,30 +223,46 @@ dependencies = [ [[package]] name = "io-lifetimes" -version = "0.7.2" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24c3f4eff5495aee4c0399d7b6a0dc2b6e81be84242ffbfcf253ebacccc1d0cb" +checksum = "59ce5ef949d49ee85593fc4d3f3f95ad61657076395cbbce23e2121fc5542074" + +[[package]] +name = "io-lifetimes" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e394faa0efb47f9f227f1cd89978f854542b318a6f64fa695489c9c993056656" +dependencies = [ + "libc", + "windows-sys", +] + +[[package]] +name = "is-terminal" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aae5bc6e2eb41c9def29a3e0f1306382807764b9b53112030eff57435667352d" +dependencies = [ + "hermit-abi 0.2.6", + "io-lifetimes 1.0.2", + "rustix 0.36.3", + "windows-sys", +] [[package]] name = "itertools" -version = "0.10.3" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" dependencies = [ "either", ] -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - [[package]] name = "libc" -version = "0.2.126" +version = "0.2.137" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" +checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89" [[package]] name = "linux-raw-sys" @@ -247,6 +270,12 @@ version = "0.0.46" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4d2456c373231a208ad294c33dc5bff30051eafd954cd4caae83a712b12854d" +[[package]] +name = "linux-raw-sys" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f9f08d8963a6c613f4b1a78f4f4a4dbfadf8e6545b2d72861731e4858b8b47f" + [[package]] name = "memchr" version = "2.5.0" @@ -270,15 +299,15 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.13.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1" +checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860" [[package]] name = "os_str_bytes" -version = "6.0.1" +version = "6.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "029d8d0b2f198229de29dca79676f2738ff952edf3fde542eb8bf94d8c21b435" +checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" [[package]] name = "output_vt100" @@ -291,9 +320,9 @@ dependencies = [ [[package]] name = "predicates" -version = "2.1.1" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5aab5be6e4732b473071984b3164dbbfb7a3674d30ea5ff44410b6bcd960c3c" +checksum = "ed6bd09a7f7e68f3f0bf710fb7ab9c4615a488b58b5f653382a687701e458c92" dependencies = [ "difflib", "float-cmp", @@ -305,15 +334,15 @@ dependencies = [ [[package]] name = "predicates-core" -version = "1.0.3" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da1c2388b1513e1b605fcec39a95e0a9e8ef088f71443ef37099fa9ae6673fcb" +checksum = "72f883590242d3c6fc5bf50299011695fa6590c2c70eac95ee1bdb9a733ad1a2" [[package]] name = "predicates-tree" -version = "1.0.5" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d86de6de25020a36c6d3643a86d9a6a9f552107c0559c60ea03551b5e16c032" +checksum = "54ff541861505aabf6ea722d2131ee980b8276e10a1297b94e896dd8b621850d" dependencies = [ "predicates-core", "termtree", @@ -351,9 +380,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.5.6" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d83f127d94bdbcda4c8cc2e50f6f84f4b611f69c902699ca385a39c3a75f9ff1" +checksum = "e076559ef8e241f2ae3479e36f97bd5741c0330689e217ad51ce2c76808b868a" dependencies = [ "aho-corasick", "memchr", @@ -368,24 +397,44 @@ checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" [[package]] name = "regex-syntax" -version = "0.6.26" +version = "0.6.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49b3de9ec5dc0a3417da371aab17d729997c15010e7fd24ff707773a33bddb64" +checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" [[package]] name = "rustix" -version = "0.35.7" +version = "0.35.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d51cc38aa10f6bbb377ed28197aa052aa4e2b762c22be9d3153d01822587e787" +checksum = "727a1a6d65f786ec22df8a81ca3121107f235970dc1705ed681d3e6e8b9cd5f9" dependencies = [ "bitflags", "errno", - "io-lifetimes", + "io-lifetimes 0.7.5", "libc", - "linux-raw-sys", + "linux-raw-sys 0.0.46", "windows-sys", ] +[[package]] +name = "rustix" +version = "0.36.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b1fbb4dfc4eb1d390c02df47760bb19a84bb80b301ecc947ab5406394d8223e" +dependencies = [ + "bitflags", + "errno", + "io-lifetimes 1.0.2", + "libc", + "linux-raw-sys 0.1.3", + "windows-sys", +] + +[[package]] +name = "serde" +version = "1.0.147" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d193d69bae983fc11a79df82342761dfbf28a99fc8d203dca4c3c1b590948965" + [[package]] name = "strsim" version = "0.10.0" @@ -414,34 +463,34 @@ dependencies = [ [[package]] name = "terminal_size" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8440c860cf79def6164e4a0a983bcc2305d82419177a0e0c71930d049e3ac5a1" +checksum = "40ca90c434fd12083d1a6bdcbe9f92a14f96c8a1ba600ba451734ac334521f7a" dependencies = [ - "rustix", + "rustix 0.35.13", "windows-sys", ] [[package]] name = "termtree" -version = "0.2.4" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "507e9898683b6c43a9aa55b64259b721b52ba226e0f3779137e50ad114a4c90b" +checksum = "95059e91184749cb66be6dc994f67f182b6d897cb3df74a5bf66b5e709295fd8" [[package]] name = "thiserror" -version = "1.0.31" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" +checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.31" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" +checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb" dependencies = [ "proc-macro2", "quote", @@ -450,15 +499,15 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.0" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d22af068fba1eb5edcb4aea19d382b2a3deb4c8f9d475c589b6ada9e0fd493ee" +checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3" [[package]] name = "unicode-xid" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" [[package]] name = "wait-timeout" @@ -502,46 +551,60 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-sys" -version = "0.36.1" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" +checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" dependencies = [ + "windows_aarch64_gnullvm", "windows_aarch64_msvc", "windows_i686_gnu", "windows_i686_msvc", "windows_x86_64_gnu", + "windows_x86_64_gnullvm", "windows_x86_64_msvc", ] [[package]] -name = "windows_aarch64_msvc" -version = "0.36.1" +name = "windows_aarch64_gnullvm" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" +checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4" [[package]] name = "windows_i686_gnu" -version = "0.36.1" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" +checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7" [[package]] name = "windows_i686_msvc" -version = "0.36.1" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" +checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246" [[package]] name = "windows_x86_64_gnu" -version = "0.36.1" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" +checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028" [[package]] name = "windows_x86_64_msvc" -version = "0.36.1" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" +checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5" [[package]] name = "yansi" diff --git a/Cargo.toml b/Cargo.toml index 0b1370d..4f91eb3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,7 +11,7 @@ version = "0.10.0" edition = "2021" [dependencies] -ansi_term = "0.12" +anstyle = "0.2.5" anyhow = "1.0" atty = "0.2" const_format = "0.2" diff --git a/src/bin/hexyl.rs b/src/bin/hexyl.rs index 92fadf8..4b4cf5b 100644 --- a/src/bin/hexyl.rs +++ b/src/bin/hexyl.rs @@ -388,10 +388,6 @@ fn run() -> Result<(), AnyhowError> { } fn main() { - // Enable ANSI support for Windows - #[cfg(windows)] - let _ = ansi_term::enable_ansi_support(); - let result = run(); if let Err(err) = result { diff --git a/src/lib.rs b/src/lib.rs index dfaaa9c..ab7b80c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,15 +4,26 @@ pub use input::*; use std::io::{self, BufReader, Read, Write}; -use ansi_term::Color; -use ansi_term::Color::Fixed; +use anstyle::{AnsiColor, Reset}; -const COLOR_NULL: Color = Fixed(242); // grey -const COLOR_OFFSET: Color = Fixed(242); // grey -const COLOR_ASCII_PRINTABLE: Color = Color::Cyan; -const COLOR_ASCII_WHITESPACE: Color = Color::Green; -const COLOR_ASCII_OTHER: Color = Color::Purple; -const COLOR_NONASCII: Color = Color::Yellow; +#[derive(PartialEq, Eq)] +#[repr(usize)] +enum ByteColor { + Null = 0, + Offset = 1, + AsciiPrintable = 2, + AsciiWhitespace = 3, + AsciiOther = 4, + NonAscii = 5, + Reset = 6, +} + +const COLOR_NULL: AnsiColor = AnsiColor::BrightBlack; +const COLOR_OFFSET: AnsiColor = AnsiColor::BrightBlack; +const COLOR_ASCII_PRINTABLE: AnsiColor = AnsiColor::Cyan; +const COLOR_ASCII_WHITESPACE: AnsiColor = AnsiColor::Green; +const COLOR_ASCII_OTHER: AnsiColor = AnsiColor::Magenta; +const COLOR_NONASCII: AnsiColor = AnsiColor::Yellow; pub enum ByteCategory { Null, @@ -48,15 +59,15 @@ impl Byte { } } - fn color(self) -> &'static Color { + fn color(self) -> ByteColor { use crate::ByteCategory::*; match self.category() { - Null => &COLOR_NULL, - AsciiPrintable => &COLOR_ASCII_PRINTABLE, - AsciiWhitespace => &COLOR_ASCII_WHITESPACE, - AsciiOther => &COLOR_ASCII_OTHER, - NonAscii => &COLOR_NONASCII, + Null => ByteColor::Null, + AsciiPrintable => ByteColor::AsciiPrintable, + AsciiWhitespace => ByteColor::AsciiWhitespace, + AsciiOther => ByteColor::AsciiOther, + NonAscii => ByteColor::NonAscii, } } @@ -223,6 +234,9 @@ pub struct Printer<'a, Writer: Write> { writer: &'a mut Writer, show_char_panel: bool, show_position_panel: bool, + show_color: bool, + colors: Vec, + curr_color: Option, border_style: BorderStyle, byte_hex_panel: Vec, byte_char_panel: Vec, @@ -255,48 +269,25 @@ impl<'a, Writer: Write> Printer<'a, Writer> { writer, show_char_panel, show_position_panel, + show_color, + curr_color: None, + colors: vec![ + COLOR_NULL.render_fg().to_string(), + COLOR_OFFSET.render_fg().to_string(), + COLOR_ASCII_PRINTABLE.render_fg().to_string(), + COLOR_ASCII_WHITESPACE.render_fg().to_string(), + COLOR_ASCII_OTHER.render_fg().to_string(), + COLOR_NONASCII.render_fg().to_string(), + Reset.render().to_string(), + ], border_style, - byte_hex_panel: (0u8..=u8::MAX) - .map(|i| { - let byte_hex = format!("{:02x}", i); - if show_color { - Byte(i).color().paint(byte_hex).to_string() - } else { - byte_hex - } - }) - .collect(), + byte_hex_panel: (0u8..=u8::MAX).map(|i| format!("{:02x}", i)).collect(), byte_char_panel: (0u8..=u8::MAX) - .map(|i| { - let byte_char = format!("{}", Byte(i).as_char()); - if show_color { - Byte(i).color().paint(byte_char).to_string() - } else { - byte_char - } - }) - .collect(), - byte_hex_panel_g: (0u8..=u8::MAX) - .map(|i| { - let byte_hex = format!("{:02x}", i); - let style = COLOR_OFFSET.normal(); - if show_color { - style.paint(byte_hex).to_string() - } else { - byte_hex - } - }) + .map(|i| format!("{}", Byte(i).as_char())) .collect(), + byte_hex_panel_g: (0u8..=u8::MAX).map(|i| format!("{:02x}", i)).collect(), byte_char_panel_g: (0u8..=u8::MAX) - .map(|i| { - let byte_char = format!("{}", Byte(i).as_char()); - let style = COLOR_OFFSET.normal(); - if show_color { - style.paint(byte_char).to_string() - } else { - byte_char - } - }) + .map(|i| format!("{}", Byte(i).as_char())) .collect(), squeezer: if use_squeeze { Squeezer::Ignore @@ -379,11 +370,19 @@ impl<'a, Writer: Write> Printer<'a, Writer> { .encode_utf8(&mut [0; 4]) .as_bytes(), )?; + if self.show_color { + self.writer + .write_all(self.colors[ByteColor::Offset as usize].as_bytes())?; + } if self.show_position_panel { match self.squeezer { Squeezer::Print => { self.writer .write_all(self.byte_char_panel_g[b'*' as usize].as_bytes())?; + if self.show_color { + self.writer + .write_all(self.colors[ByteColor::Reset as usize].as_bytes())?; + } self.writer.write_all(b" ")?; } Squeezer::Ignore | Squeezer::Disabled | Squeezer::Delete => { @@ -396,6 +395,10 @@ impl<'a, Writer: Write> Printer<'a, Writer> { self.writer .write_all(self.byte_hex_panel_g[byte as usize].as_bytes())?; } + if self.show_color { + self.writer + .write_all(self.colors[ByteColor::Reset as usize].as_bytes())?; + } } } self.writer.write_all( @@ -413,6 +416,11 @@ impl<'a, Writer: Write> Printer<'a, Writer> { Squeezer::Print | Squeezer::Delete => self.writer.write_all(b" ")?, Squeezer::Ignore | Squeezer::Disabled => { if let Some(&b) = self.line_buf.get(i as usize) { + if self.show_color && self.curr_color != Some(Byte(b).color()) { + self.writer + .write_all(self.colors[Byte(b).color() as usize].as_bytes())?; + self.curr_color = Some(Byte(b).color()); + } self.writer .write_all(self.byte_char_panel[b as usize].as_bytes())?; } else { @@ -421,6 +429,11 @@ impl<'a, Writer: Write> Printer<'a, Writer> { } } if i == 8 * self.panels - 1 { + if self.show_color { + self.writer + .write_all(self.colors[ByteColor::Reset as usize].as_bytes())?; + self.curr_color = None; + } self.writer.write_all( self.border_style .outer_sep() @@ -428,6 +441,11 @@ impl<'a, Writer: Write> Printer<'a, Writer> { .as_bytes(), )?; } else if i % 8 == 7 { + if self.show_color { + self.writer + .write_all(self.colors[ByteColor::Reset as usize].as_bytes())?; + self.curr_color = None; + } self.writer.write_all( self.border_style .inner_sep() @@ -450,8 +468,16 @@ impl<'a, Writer: Write> Printer<'a, Writer> { match self.squeezer { Squeezer::Print => { if !self.show_position_panel && i == 0 { + if self.show_color { + self.writer + .write_all(self.colors[ByteColor::Offset as usize].as_bytes())?; + } self.writer .write_all(self.byte_char_panel_g[b'*' as usize].as_bytes())?; + if self.show_color { + self.writer + .write_all(self.colors[ByteColor::Reset as usize].as_bytes())?; + } } else { if i % (self.group_bytes as usize) == 0 { self.writer.write_all(b" ")?; @@ -464,12 +490,22 @@ impl<'a, Writer: Write> Printer<'a, Writer> { if i % (self.group_bytes as usize) == 0 { self.writer.write_all(b" ")?; } + if self.show_color && self.curr_color != Some(Byte(b).color()) { + self.writer + .write_all(self.colors[Byte(b).color() as usize].as_bytes())?; + self.curr_color = Some(Byte(b).color()); + } self.writer .write_all(self.byte_hex_panel[b as usize].as_bytes())?; } } // byte is last in panel if i % 8 == 7 { + if self.show_color { + self.curr_color = None; + self.writer + .write_all(self.colors[ByteColor::Reset as usize].as_bytes())?; + } self.writer.write_all(b" ")?; // byte is last in last panel if i as u64 % (8 * self.panels) == 8 * self.panels - 1 {