summaryrefslogtreecommitdiffstats
path: root/src/hex
diff options
context:
space:
mode:
authorCanop <cano.petrole@gmail.com>2020-07-14 21:58:12 +0200
committerCanop <cano.petrole@gmail.com>2020-07-14 21:58:12 +0200
commitd198f840c44118bc7e9af0bd03c2db9bcb1d699f (patch)
tree46f6b2c2b08f550963018a8f18bfc8e1836c35d3 /src/hex
parentcc83313ef6d6ef076699207e3e92b64390f70afd (diff)
chars in binary preview
Diffstat (limited to 'src/hex')
-rw-r--r--src/hex/hex_view.rs55
1 files changed, 48 insertions, 7 deletions
diff --git a/src/hex/hex_view.rs b/src/hex/hex_view.rs
index e2b7672..c4c8525 100644
--- a/src/hex/hex_view.rs
+++ b/src/hex/hex_view.rs
@@ -11,7 +11,7 @@ use {
},
crossterm::{
cursor,
- style::{Color, Print, ResetColor, SetBackgroundColor, SetForegroundColor},
+ style::{Color, Print, SetForegroundColor},
QueueableCommand,
},
memmap::Mmap,
@@ -92,9 +92,31 @@ impl HexView {
self.page_height = area.height as i32;
let page = self.get_page(self.scroll as usize, line_count)?;
let styles = &panel_skin.styles;
- let mut show_middle_space = false;
- if area.width > 50 {
- show_middle_space = true;
+ let mut left_margin = false;
+ let mut hex_middle_space = false;
+ let mut chars_middle_space = false;
+ let mut inter_hex = false;
+ let mut chars = false;
+ let mut rem = area.width as i32 - 32; // 32: minimum, tight
+ if rem > 17 {
+ chars = true;
+ rem -= 17;
+ }
+ if rem > 16 {
+ inter_hex = true;
+ rem -= 16;
+ }
+ if rem > 1 {
+ hex_middle_space = true;
+ rem -= 1;
+ }
+ if rem > 1 {
+ left_margin = true;
+ rem -= 1;
+ }
+ if rem > 1 {
+ chars_middle_space = true;
+ //rem -= 1;
}
let scrollbar = area.scrollbar(self.scroll, self.line_count() as i32);
let scrollbar_fg = styles.scrollbar_thumb.get_fg()
@@ -105,16 +127,35 @@ impl HexView {
let mut cw = CropWriter::new(w, area.width as usize - 1); // -1 for scrollbar
let cw = &mut cw;
if y < page.len() {
+ if left_margin {
+ cw.queue_char(&styles.default, ' ')?;
+ }
let line = &page[y];
for x in 0..16 {
- if x==8 && show_middle_space {
+ if x==8 && hex_middle_space {
cw.queue_char(&styles.default, ' ')?;
}
if let Some(b) = line.bytes.get(x) {
let byte = Byte::from(*b);
- cw.queue_string(byte.style(styles), format!(" {:02x}", b))?;
+ if inter_hex {
+ cw.queue_string(byte.style(styles), format!("{:02x} ", b))?;
+ } else {
+ cw.queue_string(byte.style(styles), format!("{:02x}", b))?;
+ }
} else {
- cw.queue_str(&styles.default, " ")?;
+ cw.queue_str(&styles.default, if inter_hex { " " } else { " " })?;
+ }
+ }
+ if chars {
+ cw.queue_char(&styles.default, ' ')?;
+ for x in 0..16 {
+ if x==8 && chars_middle_space {
+ cw.queue_char(&styles.default, ' ')?;
+ }
+ if let Some(b) = line.bytes.get(x) {
+ let byte = Byte::from(*b);
+ cw.queue_char(byte.style(styles), byte.as_char())?;
+ }
}
}
cw.fill(&styles.default, LONG_SPACE)?;