mirror of
https://github.com/BurntSushi/ripgrep.git
synced 2025-11-23 21:54:45 +02:00
colors: add highlight type support for matching lines
This lets users highlight non-matching text in matching lines. Closes #3024, Closes #3107
This commit is contained in:
committed by
Andrew Gallant
parent
126bbeab8c
commit
99fe884536
@@ -363,10 +363,11 @@ _rg() {
|
||||
'column:specify coloring for column numbers'
|
||||
'line:specify coloring for line numbers'
|
||||
'match:specify coloring for match text'
|
||||
'highlight:specify coloring for matching lines'
|
||||
'path:specify coloring for file names'
|
||||
)
|
||||
descr='color/style type'
|
||||
elif [[ ${IPREFIX#--*=}$PREFIX == (column|line|match|path):[^:]# ]]; then
|
||||
elif [[ ${IPREFIX#--*=}$PREFIX == (column|line|match|highlight|path):[^:]# ]]; then
|
||||
suf=( -qS: )
|
||||
tmp=(
|
||||
'none:clear color/style for type'
|
||||
|
||||
@@ -751,7 +751,8 @@ the \flag{colors} flag to manually set all color styles to \fBnone\fP:
|
||||
\-\-colors 'path:none' \\
|
||||
\-\-colors 'line:none' \\
|
||||
\-\-colors 'column:none' \\
|
||||
\-\-colors 'match:none'
|
||||
\-\-colors 'match:none' \\
|
||||
\-\-colors 'highlight:none'
|
||||
.EE
|
||||
.sp
|
||||
"
|
||||
@@ -829,7 +830,7 @@ impl Flag for Colors {
|
||||
"Configure color settings and styles."
|
||||
}
|
||||
fn doc_long(&self) -> &'static str {
|
||||
r"
|
||||
r#"
|
||||
This flag specifies color settings for use in the output. This flag may be
|
||||
provided multiple times. Settings are applied iteratively. Pre-existing color
|
||||
labels are limited to one of eight choices: \fBred\fP, \fBblue\fP, \fBgreen\fP,
|
||||
@@ -839,11 +840,11 @@ are limited to \fBnobold\fP, \fBbold\fP, \fBnointense\fP, \fBintense\fP,
|
||||
.sp
|
||||
The format of the flag is
|
||||
\fB{\fP\fItype\fP\fB}:{\fP\fIattribute\fP\fB}:{\fP\fIvalue\fP\fB}\fP.
|
||||
\fItype\fP should be one of \fBpath\fP, \fBline\fP, \fBcolumn\fP or
|
||||
\fBmatch\fP. \fIattribute\fP can be \fBfg\fP, \fBbg\fP or \fBstyle\fP.
|
||||
\fIvalue\fP is either a color (for \fBfg\fP and \fBbg\fP) or a text style. A
|
||||
special format, \fB{\fP\fItype\fP\fB}:none\fP, will clear all color settings
|
||||
for \fItype\fP.
|
||||
\fItype\fP should be one of \fBpath\fP, \fBline\fP, \fBcolumn\fP,
|
||||
\fBhighlight\fP or \fBmatch\fP. \fIattribute\fP can be \fBfg\fP, \fBbg\fP or
|
||||
\fBstyle\fP. \fIvalue\fP is either a color (for \fBfg\fP and \fBbg\fP) or a
|
||||
text style. A special format, \fB{\fP\fItype\fP\fB}:none\fP, will clear all
|
||||
color settings for \fItype\fP.
|
||||
.sp
|
||||
For example, the following command will change the match color to magenta and
|
||||
the background color for line numbers to yellow:
|
||||
@@ -852,6 +853,17 @@ the background color for line numbers to yellow:
|
||||
rg \-\-colors 'match:fg:magenta' \-\-colors 'line:bg:yellow'
|
||||
.EE
|
||||
.sp
|
||||
Another example, the following command will "highlight" the non-matching text
|
||||
in matching lines:
|
||||
.sp
|
||||
.EX
|
||||
rg \-\-colors 'highlight:bg:yellow' \-\-colors 'highlight:fg:black'
|
||||
.EE
|
||||
.sp
|
||||
The "highlight" color type is particularly useful for contrasting matching
|
||||
lines with surrounding context printed by the \flag{before-context},
|
||||
\flag{after-context}, \flag{context} or \flag{passthru} flags.
|
||||
.sp
|
||||
Extended colors can be used for \fIvalue\fP when the tty supports ANSI color
|
||||
sequences. These are specified as either \fIx\fP (256-color) or
|
||||
.IB x , x , x
|
||||
@@ -874,7 +886,7 @@ or, equivalently,
|
||||
.sp
|
||||
Note that the \fBintense\fP and \fBnointense\fP styles will have no effect when
|
||||
used alongside these extended color codes.
|
||||
"
|
||||
"#
|
||||
}
|
||||
|
||||
fn update(&self, v: FlagValue, args: &mut LowArgs) -> anyhow::Result<()> {
|
||||
@@ -908,6 +920,24 @@ fn test_colors() {
|
||||
"line:bg:yellow".parse().unwrap()
|
||||
]
|
||||
);
|
||||
|
||||
let args = parse_low_raw(["--colors", "highlight:bg:240"]).unwrap();
|
||||
assert_eq!(args.colors, vec!["highlight:bg:240".parse().unwrap()]);
|
||||
|
||||
let args = parse_low_raw([
|
||||
"--colors",
|
||||
"match:fg:magenta",
|
||||
"--colors",
|
||||
"highlight:bg:blue",
|
||||
])
|
||||
.unwrap();
|
||||
assert_eq!(
|
||||
args.colors,
|
||||
vec![
|
||||
"match:fg:magenta".parse().unwrap(),
|
||||
"highlight:bg:blue".parse().unwrap()
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
/// --column
|
||||
|
||||
Reference in New Issue
Block a user