on master help sign in
Display binary file content for bat -A
commitb48b9fcf3b339e0fb37599e2019dd9bc4c49b379 authorpjsier <pjsier@gmail.com> dateMon 26 Aug 2019, 22:05 (7 years ago) parentc64ab29
1 file changed+15−2
src/printer.rs+15−2
src/printer.rs+15−2
@@ -1,3 +1,4 @@
1+use std::ascii;
12use std::io::Write;
23use std::vec::Vec;
34
@@ -141,7 +142,10 @@ impl<'a> InteractivePrinter<'a> {
141142
142143 let mut line_changes = None;
143144
144− let highlighter = if reader.content_type.map_or(false, |c| c.is_binary()) {
145+ let highlighter = if reader
146+ .content_type
147+ .map_or(false, |c| c.is_binary() && !config.show_nonprintable)
148+ {
145149 None
146150 } else {
147151 // Get the Git modifications
@@ -328,9 +332,18 @@ impl<'a> Printer for InteractivePrinter<'a> {
328332 line_buffer: &[u8],
329333 ) -> Result<()> {
330334 let mut line = match self.content_type {
331− Some(ContentType::BINARY) | None => {
335+ None => {
332336 return Ok(());
333337 }
338+ Some(ContentType::BINARY) => String::from_utf8(
339+ line_buffer
340+ .as_ref()
341+ .iter()
342+ .map(|b| ascii::escape_default(*b))
343+ .flatten()
344+ .collect(),
345+ )
346+ .unwrap(),
334347 Some(ContentType::UTF_16LE) => UTF_16LE
335348 .decode(&line_buffer, DecoderTrap::Replace)
336349 .map_err(|_| "Invalid UTF-16LE")?,