mirror of
				https://github.com/sharkdp/bat.git
				synced 2025-10-31 07:04:04 +00:00 
			
		
		
		
	Enable non-printable chars for redirected output (#1061)
This commit is contained in:
		| @@ -5,6 +5,9 @@ | ||||
| - Added support for the `NO_COLOR` environment variable, see #1021 and #1031 (@eth-p) | ||||
|  | ||||
| ## Bugfixes | ||||
|  | ||||
| - Fixed non-printable characters display for redirected output, see #1061 (@gsomix) | ||||
|  | ||||
| ## Other | ||||
| ## Syntaxes | ||||
|  | ||||
|   | ||||
| @@ -113,7 +113,7 @@ impl<'b> Controller<'b> { | ||||
|                     }; | ||||
|  | ||||
|                     let mut printer: Box<dyn Printer> = if self.config.loop_through { | ||||
|                         Box::new(SimplePrinter::new()) | ||||
|                         Box::new(SimplePrinter::new(&self.config)) | ||||
|                     } else { | ||||
|                         Box::new(InteractivePrinter::new( | ||||
|                             &self.config, | ||||
|   | ||||
| @@ -52,15 +52,17 @@ pub(crate) trait Printer { | ||||
|     ) -> Result<()>; | ||||
| } | ||||
|  | ||||
| pub struct SimplePrinter; | ||||
| pub struct SimplePrinter<'a> { | ||||
|     config: &'a Config<'a> | ||||
| } | ||||
|  | ||||
| impl SimplePrinter { | ||||
|     pub fn new() -> Self { | ||||
|         SimplePrinter {} | ||||
| impl<'a> SimplePrinter<'a> { | ||||
|     pub fn new(config: &'a Config) -> Self { | ||||
|         SimplePrinter { config } | ||||
|     } | ||||
| } | ||||
|  | ||||
| impl Printer for SimplePrinter { | ||||
| impl<'a> Printer for SimplePrinter<'a> { | ||||
|     fn print_header( | ||||
|         &mut self, | ||||
|         _handle: &mut dyn Write, | ||||
| @@ -86,7 +88,15 @@ impl Printer for SimplePrinter { | ||||
|         line_buffer: &[u8], | ||||
|     ) -> Result<()> { | ||||
|         if !out_of_range { | ||||
|             handle.write_all(line_buffer)?; | ||||
|             if self.config.show_nonprintable { | ||||
|                 let line = replace_nonprintable(line_buffer, self.config.tab_width); | ||||
|                 write!(handle, "{}", line)?; | ||||
|                 if line_buffer.last() == Some(&b'\n') { | ||||
|                     writeln!(handle)?; | ||||
|                 } | ||||
|             } else { | ||||
|                 handle.write_all(line_buffer)? | ||||
|             }; | ||||
|         } | ||||
|         Ok(()) | ||||
|     } | ||||
|   | ||||
							
								
								
									
										
											BIN
										
									
								
								tests/examples/nonprintable.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								tests/examples/nonprintable.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -716,3 +716,13 @@ fn do_not_detect_different_syntax_for_stdin_and_files() { | ||||
|         from_utf8(&cmd_for_stdin.get_output().stdout).expect("output is valid utf-8") | ||||
|     ); | ||||
| } | ||||
|  | ||||
| #[test] | ||||
| fn show_all_mode() { | ||||
|     bat() | ||||
|         .arg("--show-all") | ||||
|         .arg("nonprintable.txt") | ||||
|         .assert() | ||||
|         .stdout("hello•world␊\n├──┤␍␀␇␈␛") | ||||
|         .stderr(""); | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user