on master help sign in
Always call the syntax highlighter
commit627181bcb657a5ded61648feaef9c63bc6bc7a8c authorsharkdp <davidpeter@web.de> dateThu 23 Aug 2018, 23:35 (8 years ago) parent226d9a5
2 files changed+16−5
src/controller.rs+6−4 src/printer.rs+10−1
src/controller.rs+6−4
@@ -77,16 +77,18 @@ impl<'b> Controller<'b> {
7777 match line_ranges {
7878 &Some(ref range) => {
7979 if line_number < range.lower {
80− // skip line
80+ // Call the printer in case we need to call the syntax highlighter
81+ // for this line. However, set `out_of_range` to `true`.
82+ printer.print_line(true, writer, line_number, &line_buffer)?;
8183 } else if line_number > range.upper {
82− // no more lines in range
84+ // no more lines in range, exit early
8385 break;
8486 } else {
85− printer.print_line(writer, line_number, &line_buffer)?;
87+ printer.print_line(false, writer, line_number, &line_buffer)?;
8688 }
8789 }
8890 &None => {
89− printer.print_line(writer, line_number, &line_buffer)?;
91+ printer.print_line(false, writer, line_number, &line_buffer)?;
9092 }
9193 }
9294
src/printer.rs+10−1
@@ -24,6 +24,7 @@ pub trait Printer {
2424 fn print_footer(&mut self, handle: &mut Write) -> Result<()>;
2525 fn print_line(
2626 &mut self,
27+ out_of_range: bool,
2728 handle: &mut Write,
2829 line_number: usize,
2930 line_buffer: &[u8],
@@ -49,11 +50,14 @@ impl Printer for SimplePrinter {
4950
5051 fn print_line(
5152 &mut self,
53+ out_of_range: bool,
5254 handle: &mut Write,
5355 _line_number: usize,
5456 line_buffer: &[u8],
5557 ) -> Result<()> {
56− handle.write(line_buffer)?;
58+ if !out_of_range {
59+ handle.write(line_buffer)?;
60+ }
5761 Ok(())
5862 }
5963}
@@ -188,6 +192,7 @@ impl<'a> Printer for InteractivePrinter<'a> {
188192
189193 fn print_line(
190194 &mut self,
195+ out_of_range: bool,
191196 handle: &mut Write,
192197 line_number: usize,
193198 line_buffer: &[u8],
@@ -195,6 +200,10 @@ impl<'a> Printer for InteractivePrinter<'a> {
195200 let line = String::from_utf8_lossy(&line_buffer);
196201 let regions = self.highlighter.highlight(line.as_ref());
197202
203+ if out_of_range {
204+ return Ok(());
205+ }
206+
198207 let mut cursor: usize = 0;
199208 let mut cursor_max: usize = self.config.term_width;
200209 let mut panel_wrap: Option<String> = None;