From a49f295acc645fb56f48e5e9509108f9b51b12f4 Mon Sep 17 00:00:00 2001 From: Sharif Haason Date: Thu, 17 Nov 2022 22:12:00 -0500 Subject: [PATCH 01/14] Replace deprecated `ansi_term` with `anstyle` --- Cargo.lock | 210 +++++++++++++++++++++++++++-------------------------- Cargo.toml | 2 +- 2 files changed, 107 insertions(+), 105 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a203b1c..f8c611d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,33 +4,30 @@ version = 3 [[package]] name = "aho-corasick" -version = "0.7.18" +version = "0.7.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e" 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", @@ -65,26 +62,27 @@ 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.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" +checksum = "76a284da2e6fe2092f2353e51713435363112dfd60030e22add80be333fb928f" [[package]] name = "clap" -version = "3.2.11" +version = "3.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d646c7ade5eb07c4aa20e907a922750df0c448892513714fd3e4acbc7130829f" +checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5" dependencies = [ "atty", "bitflags", @@ -93,7 +91,7 @@ dependencies = [ "once_cell", "strsim", "termcolor", - "terminal_size 0.1.17", + "terminal_size", "textwrap", ] @@ -108,18 +106,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", @@ -140,9 +138,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" @@ -176,9 +174,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.11.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hermit-abi" @@ -193,7 +191,7 @@ dependencies = [ name = "hexyl" version = "0.10.0" dependencies = [ - "ansi_term", + "anstyle", "anyhow", "assert_cmd", "atty", @@ -201,15 +199,15 @@ dependencies = [ "const_format", "libc", "predicates", - "terminal_size 0.2.1", + "terminal_size", "thiserror", ] [[package]] name = "indexmap" -version = "1.8.1" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f647032dfaa1f8b6dc29bd3edb7bbef4861b8b8007ebb118d6db284fd59f6ee" +checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" dependencies = [ "autocfg", "hashbrown", @@ -217,30 +215,24 @@ 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 = "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" @@ -271,21 +263,21 @@ 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.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "029d8d0b2f198229de29dca79676f2738ff952edf3fde542eb8bf94d8c21b435" +checksum = "7b5bf27447411e9ee3ff51186bf7a08e16c341efdde93f4d823e8844429bed7e" [[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", @@ -297,15 +289,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", @@ -313,27 +305,27 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.39" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c54b25569025b7fc9651de43004ae593a75ad88543b17178aa5e1b9c4f15f56f" +checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.18" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1" +checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" dependencies = [ "proc-macro2", ] [[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", @@ -348,15 +340,15 @@ 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", @@ -366,6 +358,12 @@ dependencies = [ "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" @@ -374,9 +372,9 @@ checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" [[package]] name = "syn" -version = "1.0.95" +version = "1.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbaf6116ab8924f39d52792136fb74fd60a80194cf1b1c6ffa6453eef1c3f942" +checksum = "a864042229133ada95abf3b54fdc62ef5ccabe9515b64717bcb9a1919e59445d" dependencies = [ "proc-macro2", "quote", @@ -394,19 +392,9 @@ dependencies = [ [[package]] name = "terminal_size" -version = "0.1.17" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "terminal_size" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8440c860cf79def6164e4a0a983bcc2305d82419177a0e0c71930d049e3ac5a1" +checksum = "40ca90c434fd12083d1a6bdcbe9f92a14f96c8a1ba600ba451734ac334521f7a" dependencies = [ "rustix", "windows-sys", @@ -414,33 +402,33 @@ dependencies = [ [[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 = "textwrap" -version = "0.15.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb" +checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" dependencies = [ - "terminal_size 0.1.17", + "terminal_size", ] [[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", @@ -449,15 +437,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" @@ -501,43 +489,57 @@ 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" diff --git a/Cargo.toml b/Cargo.toml index 4e10806..156744e 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" From 98ceec18cd1822cda180edf94abb1fc9634ad5ed Mon Sep 17 00:00:00 2001 From: Sharif Haason Date: Thu, 17 Nov 2022 22:15:53 -0500 Subject: [PATCH 02/14] Replace colors with ANSI styles --- src/lib.rs | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 1b4738e..0aab2ae 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,15 +4,14 @@ pub use input::*; use std::io::{self, BufReader, Read, Write}; -use ansi_term::Color; -use ansi_term::Color::Fixed; +use anstyle::{AnsiColor, Color, Style}; -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; +const COLOR_NULL: Style = Style::new().fg_color(Some(Color::Ansi(AnsiColor::BrightBlack))); +const COLOR_OFFSET: Style = Style::new().fg_color(Some(Color::Ansi(AnsiColor::BrightBlack))); +const COLOR_ASCII_PRINTABLE: Style = Style::new().fg_color(Some(Color::Ansi(AnsiColor::Cyan))); +const COLOR_ASCII_WHITESPACE: Style = Style::new().fg_color(Some(Color::Ansi(AnsiColor::Green))); +const COLOR_ASCII_OTHER: Style = Style::new().fg_color(Some(Color::Ansi(AnsiColor::Magenta))); +const COLOR_NONASCII: Style = Style::new().fg_color(Some(Color::Ansi(AnsiColor::Yellow))); pub enum ByteCategory { Null, @@ -48,7 +47,7 @@ impl Byte { } } - fn color(self) -> &'static Color { + fn color(self) -> &'static Style { use crate::ByteCategory::*; match self.category() { From eade38c94a21851a05f4cbc1c8f023dda64ee94a Mon Sep 17 00:00:00 2001 From: Sharif Haason Date: Thu, 17 Nov 2022 22:33:03 -0500 Subject: [PATCH 03/14] Explicitly paint with style formatting --- src/lib.rs | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 0aab2ae..4547c19 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,7 +4,7 @@ pub use input::*; use std::io::{self, BufReader, Read, Write}; -use anstyle::{AnsiColor, Color, Style}; +use anstyle::{AnsiColor, Color, Reset, Style}; const COLOR_NULL: Style = Style::new().fg_color(Some(Color::Ansi(AnsiColor::BrightBlack))); const COLOR_OFFSET: Style = Style::new().fg_color(Some(Color::Ansi(AnsiColor::BrightBlack))); @@ -248,7 +248,7 @@ impl<'a, Writer: Write> Printer<'a, Writer> { .map(|i| { let byte_hex = format!("{:02x}", i); if show_color { - Byte(i).color().paint(byte_hex).to_string() + format!("{}{}{}", Byte(i).color().render(), byte_hex, Reset.render()) } else { byte_hex } @@ -258,7 +258,12 @@ impl<'a, Writer: Write> Printer<'a, Writer> { .map(|i| { let byte_char = format!("{}", Byte(i).as_char()); if show_color { - Byte(i).color().paint(byte_char).to_string() + format!( + "{}{}{}", + Byte(i).color().render(), + byte_char, + Reset.render() + ) } else { byte_char } @@ -267,9 +272,8 @@ impl<'a, Writer: Write> Printer<'a, Writer> { 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() + format!("{}{}{}", COLOR_OFFSET.render(), byte_hex, Reset.render()) } else { byte_hex } @@ -278,9 +282,8 @@ impl<'a, Writer: Write> Printer<'a, Writer> { 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() + format!("{}{}{}", COLOR_OFFSET.render(), byte_char, Reset.render()) } else { byte_char } From 675ef6d4a8e1011551f346cded0530a440ecbce8 Mon Sep 17 00:00:00 2001 From: Sharif Haason Date: Thu, 17 Nov 2022 22:33:49 -0500 Subject: [PATCH 04/14] Remove calls to `ansi_term` --- src/bin/hexyl.rs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/bin/hexyl.rs b/src/bin/hexyl.rs index 486fc47..631d888 100644 --- a/src/bin/hexyl.rs +++ b/src/bin/hexyl.rs @@ -350,10 +350,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 { From c49aa079b4a7beefba006d63addacb8f7a604c8f Mon Sep 17 00:00:00 2001 From: Sharif Haason Date: Fri, 18 Nov 2022 08:19:13 -0500 Subject: [PATCH 05/14] Add color only when needed --- src/lib.rs | 100 ++++++++++++++++++++++++++++------------------------- 1 file changed, 53 insertions(+), 47 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 4547c19..4915251 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,14 +4,14 @@ pub use input::*; use std::io::{self, BufReader, Read, Write}; -use anstyle::{AnsiColor, Color, Reset, Style}; +use anstyle::{AnsiColor, Reset}; -const COLOR_NULL: Style = Style::new().fg_color(Some(Color::Ansi(AnsiColor::BrightBlack))); -const COLOR_OFFSET: Style = Style::new().fg_color(Some(Color::Ansi(AnsiColor::BrightBlack))); -const COLOR_ASCII_PRINTABLE: Style = Style::new().fg_color(Some(Color::Ansi(AnsiColor::Cyan))); -const COLOR_ASCII_WHITESPACE: Style = Style::new().fg_color(Some(Color::Ansi(AnsiColor::Green))); -const COLOR_ASCII_OTHER: Style = Style::new().fg_color(Some(Color::Ansi(AnsiColor::Magenta))); -const COLOR_NONASCII: Style = Style::new().fg_color(Some(Color::Ansi(AnsiColor::Yellow))); +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, @@ -47,7 +47,7 @@ impl Byte { } } - fn color(self) -> &'static Style { + fn color(self) -> &'static AnsiColor { use crate::ByteCategory::*; match self.category() { @@ -214,6 +214,8 @@ pub struct Printer<'a, Writer: Write> { writer: &'a mut Writer, show_char_panel: bool, show_position_panel: bool, + show_color: bool, + curr_color: Option, border_style: BorderStyle, byte_hex_panel: Vec, byte_char_panel: Vec, @@ -243,50 +245,17 @@ impl<'a, Writer: Write> Printer<'a, Writer> { writer, show_char_panel, show_position_panel, + show_color, + curr_color: None, border_style, - byte_hex_panel: (0u8..=u8::MAX) - .map(|i| { - let byte_hex = format!("{:02x}", i); - if show_color { - format!("{}{}{}", Byte(i).color().render(), byte_hex, Reset.render()) - } 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 { - format!( - "{}{}{}", - Byte(i).color().render(), - byte_char, - Reset.render() - ) - } else { - byte_char - } - }) - .collect(), - byte_hex_panel_g: (0u8..=u8::MAX) - .map(|i| { - let byte_hex = format!("{:02x}", i); - if show_color { - format!("{}{}{}", COLOR_OFFSET.render(), byte_hex, Reset.render()) - } 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()); - if show_color { - format!("{}{}{}", COLOR_OFFSET.render(), byte_char, Reset.render()) - } else { - byte_char - } + format!("{}", Byte(i).as_char()) }) .collect(), squeezer: if use_squeeze { @@ -361,11 +330,18 @@ impl<'a, Writer: Write> Printer<'a, Writer> { .encode_utf8(&mut [0; 4]) .as_bytes(), )?; + if self.show_color { + self.writer.write_all(COLOR_OFFSET.render_fg().to_string().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(Reset.render().to_string().as_bytes())?; + } self.writer.write_all(b" ")?; } Squeezer::Ignore | Squeezer::Disabled | Squeezer::Delete => { @@ -378,6 +354,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(Reset.render().to_string().as_bytes())?; + } } } self.writer.write_all( @@ -395,6 +375,10 @@ 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(Byte(b).color().render_fg().to_string().as_bytes())?; + self.curr_color = Some(*Byte(b).color()); + } self.writer .write_all(self.byte_char_panel[b as usize].as_bytes())?; } else { @@ -403,6 +387,10 @@ impl<'a, Writer: Write> Printer<'a, Writer> { } } if i == 8 * self.panels - 1 { + if self.show_color { + self.writer.write_all(Reset.render().to_string().as_bytes())?; + self.curr_color = None; + } self.writer.write_all( self.border_style .outer_sep() @@ -410,6 +398,10 @@ impl<'a, Writer: Write> Printer<'a, Writer> { .as_bytes(), )?; } else if i % 8 == 7 { + if self.show_color { + self.writer.write_all(Reset.render().to_string().as_bytes())?; + self.curr_color = None; + } self.writer.write_all( self.border_style .inner_sep() @@ -432,8 +424,14 @@ 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(COLOR_OFFSET.render_fg().to_string().as_bytes())?; + } self.writer .write_all(self.byte_char_panel_g[b'*' as usize].as_bytes())?; + if self.show_color { + self.writer.write_all(Reset.render().to_string().as_bytes())?; + } } else { self.writer.write_all(b" ")?; } @@ -442,12 +440,20 @@ impl<'a, Writer: Write> Printer<'a, Writer> { Squeezer::Delete => self.writer.write_all(b" ")?, Squeezer::Ignore | Squeezer::Disabled => { self.writer.write_all(b" ")?; + if self.show_color && self.curr_color != Some(*Byte(b).color()) { + self.writer.write_all(Byte(b).color().render_fg().to_string().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(Reset.render().to_string().as_bytes())?; + } self.writer.write_all(b" ")?; // byte is last in last panel if i as u64 % (8 * self.panels) == 8 * self.panels - 1 { From 794e1935e3430236d2ec9516db080357a04f6606 Mon Sep 17 00:00:00 2001 From: Sharif Haason Date: Fri, 18 Nov 2022 10:39:54 -0500 Subject: [PATCH 06/14] Prerender color strings for better performance --- Cargo.toml | 1 + src/lib.rs | 48 +++++++++++++++++++++++++++++++++--------------- 2 files changed, 34 insertions(+), 15 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 156744e..7112dd7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,6 +18,7 @@ const_format = "0.2" libc = "0.2" thiserror = "1.0" terminal_size = "0.2" +once_cell = "1.16.0" [dependencies.clap] version = "3" diff --git a/src/lib.rs b/src/lib.rs index 4915251..be92756 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2,10 +2,13 @@ pub(crate) mod input; pub use input::*; +use std::collections::HashMap; use std::io::{self, BufReader, Read, Write}; use anstyle::{AnsiColor, Reset}; +use once_cell::sync::Lazy; + const COLOR_NULL: AnsiColor = AnsiColor::BrightBlack; const COLOR_OFFSET: AnsiColor = AnsiColor::BrightBlack; const COLOR_ASCII_PRINTABLE: AnsiColor = AnsiColor::Cyan; @@ -13,6 +16,25 @@ const COLOR_ASCII_WHITESPACE: AnsiColor = AnsiColor::Green; const COLOR_ASCII_OTHER: AnsiColor = AnsiColor::Magenta; const COLOR_NONASCII: AnsiColor = AnsiColor::Yellow; +static COLORS: Lazy> = Lazy::new(|| { + let mut m = HashMap::new(); + for &col in [ + COLOR_NULL, + COLOR_OFFSET, + COLOR_ASCII_PRINTABLE, + COLOR_ASCII_WHITESPACE, + COLOR_ASCII_OTHER, + COLOR_NONASCII, + ] + .iter() + { + m.insert(col, col.render_fg().to_string()); + } + m +}); + +static RESET: Lazy = Lazy::new(|| Reset.render().to_string()); + pub enum ByteCategory { Null, AsciiPrintable, @@ -254,9 +276,7 @@ impl<'a, Writer: Write> Printer<'a, Writer> { .collect(), byte_hex_panel_g: (0u8..=u8::MAX).map(|i| format!("{:02x}", i)).collect(), byte_char_panel_g: (0u8..=u8::MAX) - .map(|i| { - format!("{}", Byte(i).as_char()) - }) + .map(|i| format!("{}", Byte(i).as_char())) .collect(), squeezer: if use_squeeze { Squeezer::Ignore @@ -331,7 +351,7 @@ impl<'a, Writer: Write> Printer<'a, Writer> { .as_bytes(), )?; if self.show_color { - self.writer.write_all(COLOR_OFFSET.render_fg().to_string().as_bytes())?; + self.writer.write_all(COLORS[&COLOR_OFFSET].as_bytes())?; } if self.show_position_panel { match self.squeezer { @@ -339,8 +359,7 @@ impl<'a, Writer: Write> Printer<'a, Writer> { self.writer .write_all(self.byte_char_panel_g[b'*' as usize].as_bytes())?; if self.show_color { - self.writer - .write_all(Reset.render().to_string().as_bytes())?; + self.writer.write_all(RESET.as_bytes())?; } self.writer.write_all(b" ")?; } @@ -355,8 +374,7 @@ impl<'a, Writer: Write> Printer<'a, Writer> { .write_all(self.byte_hex_panel_g[byte as usize].as_bytes())?; } if self.show_color { - self.writer - .write_all(Reset.render().to_string().as_bytes())?; + self.writer.write_all(RESET.as_bytes())?; } } } @@ -376,7 +394,7 @@ impl<'a, Writer: Write> Printer<'a, Writer> { 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(Byte(b).color().render_fg().to_string().as_bytes())?; + self.writer.write_all(COLORS[Byte(b).color()].as_bytes())?; self.curr_color = Some(*Byte(b).color()); } self.writer @@ -388,7 +406,7 @@ impl<'a, Writer: Write> Printer<'a, Writer> { } if i == 8 * self.panels - 1 { if self.show_color { - self.writer.write_all(Reset.render().to_string().as_bytes())?; + self.writer.write_all(RESET.as_bytes())?; self.curr_color = None; } self.writer.write_all( @@ -399,7 +417,7 @@ impl<'a, Writer: Write> Printer<'a, Writer> { )?; } else if i % 8 == 7 { if self.show_color { - self.writer.write_all(Reset.render().to_string().as_bytes())?; + self.writer.write_all(RESET.as_bytes())?; self.curr_color = None; } self.writer.write_all( @@ -425,12 +443,12 @@ impl<'a, Writer: Write> Printer<'a, Writer> { Squeezer::Print => { if !self.show_position_panel && i == 0 { if self.show_color { - self.writer.write_all(COLOR_OFFSET.render_fg().to_string().as_bytes())?; + self.writer.write_all(COLORS[&COLOR_OFFSET].as_bytes())?; } self.writer .write_all(self.byte_char_panel_g[b'*' as usize].as_bytes())?; if self.show_color { - self.writer.write_all(Reset.render().to_string().as_bytes())?; + self.writer.write_all(RESET.as_bytes())?; } } else { self.writer.write_all(b" ")?; @@ -441,7 +459,7 @@ impl<'a, Writer: Write> Printer<'a, Writer> { Squeezer::Ignore | Squeezer::Disabled => { self.writer.write_all(b" ")?; if self.show_color && self.curr_color != Some(*Byte(b).color()) { - self.writer.write_all(Byte(b).color().render_fg().to_string().as_bytes())?; + self.writer.write_all(COLORS[Byte(b).color()].as_bytes())?; self.curr_color = Some(*Byte(b).color()); } self.writer @@ -452,7 +470,7 @@ impl<'a, Writer: Write> Printer<'a, Writer> { if i % 8 == 7 { if self.show_color { self.curr_color = None; - self.writer.write_all(Reset.render().to_string().as_bytes())?; + self.writer.write_all(RESET.as_bytes())?; } self.writer.write_all(b" ")?; // byte is last in last panel From 75b37fa125e55b5653150bb014b234fccfc63eee Mon Sep 17 00:00:00 2001 From: Sharif Haason Date: Fri, 18 Nov 2022 11:01:39 -0500 Subject: [PATCH 07/14] Use compatible lockfile --- Cargo.lock | 1 + 1 file changed, 1 insertion(+) diff --git a/Cargo.lock b/Cargo.lock index f8c611d..90fc90b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -198,6 +198,7 @@ dependencies = [ "clap", "const_format", "libc", + "once_cell", "predicates", "terminal_size", "thiserror", From 3888a20dfef158380b6210b3a58bfb0af8e13eee Mon Sep 17 00:00:00 2001 From: Sharif Haason Date: Fri, 18 Nov 2022 11:06:18 -0500 Subject: [PATCH 08/14] Bump MSRV --- .github/workflows/CICD.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CICD.yml b/.github/workflows/CICD.yml index 2b8a3d7..056c0a3 100644 --- a/.github/workflows/CICD.yml +++ b/.github/workflows/CICD.yml @@ -1,7 +1,7 @@ name: CICD env: - MIN_SUPPORTED_RUST_VERSION: "1.56.1" + MIN_SUPPORTED_RUST_VERSION: "1.60.0" CICD_INTERMEDIATES_DIR: "_cicd-intermediates" on: From 557ae66ed5b7a9304964e532dbcd413bb72a6a19 Mon Sep 17 00:00:00 2001 From: Sharif Haason Date: Fri, 18 Nov 2022 16:15:49 -0500 Subject: [PATCH 09/14] Update `Cargo.lock` --- Cargo.lock | 30 ++---------------------------- 1 file changed, 2 insertions(+), 28 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 664bc3c..8ee2cc1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -80,9 +80,9 @@ checksum = "76a284da2e6fe2092f2353e51713435363112dfd60030e22add80be333fb928f" [[package]] name = "clap" -version = "3.2.23" +version = "4.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5" +checksum = "2148adefda54e14492fb9bddcc600b4344c5d1a3123bd666dcb939c6f0e0e57e" dependencies = [ "atty", "bitflags", @@ -91,7 +91,6 @@ dependencies = [ "strsim", "termcolor", "terminal_size", - "textwrap", ] [[package]] @@ -171,12 +170,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - [[package]] name = "hermit-abi" version = "0.1.19" @@ -203,16 +196,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "indexmap" -version = "1.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" -dependencies = [ - "autocfg", - "hashbrown", -] - [[package]] name = "io-lifetimes" version = "0.7.5" @@ -406,15 +389,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95059e91184749cb66be6dc994f67f182b6d897cb3df74a5bf66b5e709295fd8" -[[package]] -name = "textwrap" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" -dependencies = [ - "terminal_size", -] - [[package]] name = "thiserror" version = "1.0.37" From 0b6454ed9d5139a1049d5ebdce400d063e0e6daa Mon Sep 17 00:00:00 2001 From: Sharif Haason Date: Sat, 19 Nov 2022 10:50:31 -0500 Subject: [PATCH 10/14] Use `Vec` of enums for color instead of `HashMap` --- src/lib.rs | 84 +++++++++++++++++++++++++++--------------------------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index be92756..a226698 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2,12 +2,21 @@ pub(crate) mod input; pub use input::*; -use std::collections::HashMap; use std::io::{self, BufReader, Read, Write}; use anstyle::{AnsiColor, Reset}; -use once_cell::sync::Lazy; +#[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; @@ -16,25 +25,6 @@ const COLOR_ASCII_WHITESPACE: AnsiColor = AnsiColor::Green; const COLOR_ASCII_OTHER: AnsiColor = AnsiColor::Magenta; const COLOR_NONASCII: AnsiColor = AnsiColor::Yellow; -static COLORS: Lazy> = Lazy::new(|| { - let mut m = HashMap::new(); - for &col in [ - COLOR_NULL, - COLOR_OFFSET, - COLOR_ASCII_PRINTABLE, - COLOR_ASCII_WHITESPACE, - COLOR_ASCII_OTHER, - COLOR_NONASCII, - ] - .iter() - { - m.insert(col, col.render_fg().to_string()); - } - m -}); - -static RESET: Lazy = Lazy::new(|| Reset.render().to_string()); - pub enum ByteCategory { Null, AsciiPrintable, @@ -69,15 +59,15 @@ impl Byte { } } - fn color(self) -> &'static AnsiColor { + 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, } } @@ -237,7 +227,8 @@ pub struct Printer<'a, Writer: Write> { show_char_panel: bool, show_position_panel: bool, show_color: bool, - curr_color: Option, + colors: Vec, + curr_color: Option, border_style: BorderStyle, byte_hex_panel: Vec, byte_char_panel: Vec, @@ -269,6 +260,15 @@ impl<'a, Writer: Write> Printer<'a, Writer> { 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| format!("{:02x}", i)).collect(), byte_char_panel: (0u8..=u8::MAX) @@ -351,7 +351,7 @@ impl<'a, Writer: Write> Printer<'a, Writer> { .as_bytes(), )?; if self.show_color { - self.writer.write_all(COLORS[&COLOR_OFFSET].as_bytes())?; + self.writer.write_all(self.colors[ByteColor::Offset as usize].as_bytes())?; } if self.show_position_panel { match self.squeezer { @@ -359,7 +359,7 @@ impl<'a, Writer: Write> Printer<'a, Writer> { self.writer .write_all(self.byte_char_panel_g[b'*' as usize].as_bytes())?; if self.show_color { - self.writer.write_all(RESET.as_bytes())?; + self.writer.write_all(self.colors[ByteColor::Reset as usize].as_bytes())?; } self.writer.write_all(b" ")?; } @@ -374,7 +374,7 @@ impl<'a, Writer: Write> Printer<'a, Writer> { .write_all(self.byte_hex_panel_g[byte as usize].as_bytes())?; } if self.show_color { - self.writer.write_all(RESET.as_bytes())?; + self.writer.write_all(self.colors[ByteColor::Reset as usize].as_bytes())?; } } } @@ -393,9 +393,9 @@ 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(COLORS[Byte(b).color()].as_bytes())?; - self.curr_color = Some(*Byte(b).color()); + 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())?; @@ -406,7 +406,7 @@ impl<'a, Writer: Write> Printer<'a, Writer> { } if i == 8 * self.panels - 1 { if self.show_color { - self.writer.write_all(RESET.as_bytes())?; + self.writer.write_all(self.colors[ByteColor::Reset as usize].as_bytes())?; self.curr_color = None; } self.writer.write_all( @@ -417,7 +417,7 @@ impl<'a, Writer: Write> Printer<'a, Writer> { )?; } else if i % 8 == 7 { if self.show_color { - self.writer.write_all(RESET.as_bytes())?; + self.writer.write_all(self.colors[ByteColor::Reset as usize].as_bytes())?; self.curr_color = None; } self.writer.write_all( @@ -443,12 +443,12 @@ impl<'a, Writer: Write> Printer<'a, Writer> { Squeezer::Print => { if !self.show_position_panel && i == 0 { if self.show_color { - self.writer.write_all(COLORS[&COLOR_OFFSET].as_bytes())?; + 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(RESET.as_bytes())?; + self.writer.write_all(self.colors[ByteColor::Reset as usize].as_bytes())?; } } else { self.writer.write_all(b" ")?; @@ -458,9 +458,9 @@ impl<'a, Writer: Write> Printer<'a, Writer> { Squeezer::Delete => self.writer.write_all(b" ")?, Squeezer::Ignore | Squeezer::Disabled => { self.writer.write_all(b" ")?; - if self.show_color && self.curr_color != Some(*Byte(b).color()) { - self.writer.write_all(COLORS[Byte(b).color()].as_bytes())?; - self.curr_color = Some(*Byte(b).color()); + 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())?; @@ -470,7 +470,7 @@ impl<'a, Writer: Write> Printer<'a, Writer> { if i % 8 == 7 { if self.show_color { self.curr_color = None; - self.writer.write_all(RESET.as_bytes())?; + self.writer.write_all(self.colors[ByteColor::Reset as usize].as_bytes())?; } self.writer.write_all(b" ")?; // byte is last in last panel From c43effefd6b9aa6fe18fdd313178595baadf1356 Mon Sep 17 00:00:00 2001 From: Sharif Haason Date: Sat, 19 Nov 2022 11:04:13 -0500 Subject: [PATCH 11/14] `cargo fmt` --- src/lib.rs | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index a226698..b9efc9b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -351,7 +351,8 @@ impl<'a, Writer: Write> Printer<'a, Writer> { .as_bytes(), )?; if self.show_color { - self.writer.write_all(self.colors[ByteColor::Offset as usize].as_bytes())?; + self.writer + .write_all(self.colors[ByteColor::Offset as usize].as_bytes())?; } if self.show_position_panel { match self.squeezer { @@ -359,7 +360,8 @@ impl<'a, Writer: Write> Printer<'a, Writer> { 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(self.colors[ByteColor::Reset as usize].as_bytes())?; } self.writer.write_all(b" ")?; } @@ -374,7 +376,8 @@ impl<'a, Writer: Write> Printer<'a, 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(self.colors[ByteColor::Reset as usize].as_bytes())?; } } } @@ -394,7 +397,8 @@ impl<'a, Writer: Write> Printer<'a, Writer> { 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.writer + .write_all(self.colors[Byte(b).color() as usize].as_bytes())?; self.curr_color = Some(Byte(b).color()); } self.writer @@ -406,7 +410,8 @@ 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.writer + .write_all(self.colors[ByteColor::Reset as usize].as_bytes())?; self.curr_color = None; } self.writer.write_all( @@ -417,7 +422,8 @@ impl<'a, Writer: Write> Printer<'a, Writer> { )?; } else if i % 8 == 7 { if self.show_color { - self.writer.write_all(self.colors[ByteColor::Reset as usize].as_bytes())?; + self.writer + .write_all(self.colors[ByteColor::Reset as usize].as_bytes())?; self.curr_color = None; } self.writer.write_all( @@ -443,12 +449,14 @@ impl<'a, Writer: Write> Printer<'a, Writer> { 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.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())?; + self.writer + .write_all(self.colors[ByteColor::Reset as usize].as_bytes())?; } } else { self.writer.write_all(b" ")?; @@ -459,7 +467,8 @@ impl<'a, Writer: Write> Printer<'a, Writer> { Squeezer::Ignore | Squeezer::Disabled => { 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.writer + .write_all(self.colors[Byte(b).color() as usize].as_bytes())?; self.curr_color = Some(Byte(b).color()); } self.writer @@ -470,7 +479,8 @@ impl<'a, Writer: Write> Printer<'a, Writer> { 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(self.colors[ByteColor::Reset as usize].as_bytes())?; } self.writer.write_all(b" ")?; // byte is last in last panel From ad9ecda952f6ad2016100fbc287451ce8b58b817 Mon Sep 17 00:00:00 2001 From: Sharif Haason Date: Sat, 19 Nov 2022 11:04:59 -0500 Subject: [PATCH 12/14] Remove `once_cell` dependency --- Cargo.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 53c6e73..789bb72 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,7 +18,6 @@ const_format = "0.2" libc = "0.2" thiserror = "1.0" terminal_size = "0.2" -once_cell = "1.16.0" [dependencies.clap] version = "4" From fb2500d7d61722e6154062caceeb61767950f7ce Mon Sep 17 00:00:00 2001 From: Sharif Haason Date: Sat, 19 Nov 2022 11:40:03 -0500 Subject: [PATCH 13/14] Include `Cargo.lock` --- Cargo.lock | 1 - 1 file changed, 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 8ee2cc1..35df20e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -190,7 +190,6 @@ dependencies = [ "clap", "const_format", "libc", - "once_cell", "predicates", "terminal_size", "thiserror", From 3dc118d0ad03b340a12149d06e63c4a1ae8f3532 Mon Sep 17 00:00:00 2001 From: Sharif Haason Date: Sun, 27 Nov 2022 09:47:38 -0500 Subject: [PATCH 14/14] `cargo update` --- Cargo.lock | 77 +++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 64 insertions(+), 13 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 35df20e..b4dfb39 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "aho-corasick" -version = "0.7.19" +version = "0.7.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e" +checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" dependencies = [ "memchr", ] @@ -43,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", ] @@ -74,19 +74,19 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.76" +version = "1.0.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a284da2e6fe2092f2353e51713435363112dfd60030e22add80be333fb928f" +checksum = "e9f73505338f7d905b19d18738976aae232eb46b8efc15554ffc56deb5d9ebe4" [[package]] name = "clap" -version = "4.0.26" +version = "4.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2148adefda54e14492fb9bddcc600b4344c5d1a3123bd666dcb939c6f0e0e57e" +checksum = "0acbd8d28a0a60d7108d7ae850af6ba34cf2d1257fc646980e5f97ce14275966" dependencies = [ - "atty", "bitflags", "clap_lex", + "is-terminal", "once_cell", "strsim", "termcolor", @@ -179,6 +179,15 @@ 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" @@ -201,6 +210,28 @@ version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" 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.5" @@ -222,6 +253,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" @@ -251,9 +288,9 @@ checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860" [[package]] name = "os_str_bytes" -version = "6.4.0" +version = "6.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5bf27447411e9ee3ff51186bf7a08e16c341efdde93f4d823e8844429bed7e" +checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" [[package]] name = "predicates" @@ -334,9 +371,23 @@ 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", ] @@ -378,7 +429,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40ca90c434fd12083d1a6bdcbe9f92a14f96c8a1ba600ba451734ac334521f7a" dependencies = [ - "rustix", + "rustix 0.35.13", "windows-sys", ]