Skip to content

Commit

Permalink
Underline highlighted lines in ANSI theme (#1985)
Browse files Browse the repository at this point in the history
* Underline highlighted lines in ANSI theme

* add test for ansi highlight underline, fix underscore in plain
  • Loading branch information
mdibaiee committed Feb 14, 2022
1 parent f6ce5d2 commit d21f1e8
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 0 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
## Features

- New style component `header-filesize` to show size of the displayed file in the header. See #1988 (@mdibaiee)
- Use underline for line highlighting on ANSI, see #1730 (@mdibaiee)

## Bugfixes

Expand Down
9 changes: 9 additions & 0 deletions src/printer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -463,6 +463,10 @@ impl<'a> Printer for InteractivePrinter<'a> {
let highlight_this_line =
self.config.highlighted_lines.0.check(line_number) == RangeCheckResult::InRange;

if highlight_this_line && self.config.theme == "ansi" {
self.ansi_style.update("^[4m");
}

let background_color = self
.background_color_highlight
.filter(|_| highlight_this_line);
Expand Down Expand Up @@ -649,6 +653,11 @@ impl<'a> Printer for InteractivePrinter<'a> {
writeln!(handle)?;
}

if highlight_this_line && self.config.theme == "ansi" {
self.ansi_style.update("^[24m");
write!(handle, "\x1B[24m")?;
}

Ok(())
}
}
Expand Down
19 changes: 19 additions & 0 deletions tests/integration_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1290,6 +1290,25 @@ fn grid_for_file_without_newline() {
.stderr("");
}

// For ANSI theme, use underscore as a highlighter
#[test]
fn ansi_highlight_underline() {
bat()
.arg("--paging=never")
.arg("--color=never")
.arg("--terminal-width=80")
.arg("--wrap=never")
.arg("--decorations=always")
.arg("--theme=ansi")
.arg("--style=plain")
.arg("--highlight-line=1")
.write_stdin("Ansi Underscore Test\nAnother Line")
.assert()
.success()
.stdout("\x1B[4mAnsi Underscore Test\n\x1B[24mAnother Line")
.stderr("");
}

// Ensure that ANSI passthrough is emitted properly for both wrapping and non-wrapping printer.
#[test]
fn ansi_passthrough_emit() {
Expand Down

0 comments on commit d21f1e8

Please sign in to comment.