diff --git a/crates/nu-pretty-hex/src/main.rs b/crates/nu-pretty-hex/src/main.rs index 4156cb5c2a..b7e1dacf81 100644 --- a/crates/nu-pretty-hex/src/main.rs +++ b/crates/nu-pretty-hex/src/main.rs @@ -7,6 +7,7 @@ fn main() { width: 16, group: 4, chunk: 1, + address_offset: 0, skip: Some(10), // length: Some(5), // length: None, diff --git a/crates/nu-pretty-hex/src/pretty_hex.rs b/crates/nu-pretty-hex/src/pretty_hex.rs index 99ebaf022c..b3066c0b92 100644 --- a/crates/nu-pretty-hex/src/pretty_hex.rs +++ b/crates/nu-pretty-hex/src/pretty_hex.rs @@ -57,6 +57,8 @@ pub struct HexConfig { pub group: usize, /// Source bytes per chunk (word). 0 for single word. pub chunk: usize, + /// Offset to start counting addresses from + pub address_offset: usize, /// Bytes from 0 to skip pub skip: Option, /// Length to return @@ -73,6 +75,7 @@ impl Default for HexConfig { width: 16, group: 4, chunk: 1, + address_offset: 0, skip: None, length: None, } @@ -164,6 +167,8 @@ where let skip = cfg.skip.unwrap_or(0); + let address_offset = cfg.address_offset; + let source_part_vec: Vec = source .as_ref() .iter() @@ -205,11 +210,11 @@ where writer, "{}{:08x}{}: ", style.prefix(), - i * cfg.width + skip, + i * cfg.width + skip + address_offset, style.suffix() )?; } else { - write!(writer, "{:08x}: ", i * cfg.width + skip,)?; + write!(writer, "{:08x}: ", i * cfg.width + skip + address_offset,)?; } } for (i, x) in row.as_ref().iter().enumerate() { diff --git a/src/main.rs b/src/main.rs index 7b15431a3b..6c92bdace3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -635,11 +635,21 @@ fn print_pipeline_data( return Ok(()); } PipelineData::ByteStream(stream, _, _) => { + let mut address_offset = 0; for v in stream { + let cfg = nu_pretty_hex::HexConfig { + title: false, + address_offset, + ..Default::default() + }; + + let v = v?; + address_offset += v.len(); + let s = if v.iter().all(|x| x.is_ascii()) { - format!("{}", String::from_utf8_lossy(&v?)) + format!("{}", String::from_utf8_lossy(&v)) } else { - format!("{}\n", nu_pretty_hex::pretty_hex(&v?)) + nu_pretty_hex::config_hex(&v, cfg) }; println!("{}", s); }