Skip to content

Commit 9d53cb8

Browse files
committed
Respect NO_COLOR env variable
1 parent 1afae8d commit 9d53cb8

File tree

1 file changed

+37
-2
lines changed

1 file changed

+37
-2
lines changed

src/display/utils.rs

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,13 @@ use crate::{
66
};
77

88
pub(super) fn detect_color_mode(number_of_colors: u16) -> ColorMode {
9+
// respect the NO_COLOR env variable, and disable colors (https://no-color.org/)
10+
if let Ok(no_color) = var("NO_COLOR") {
11+
if !no_color.is_empty() {
12+
return ColorMode::TwoTone;
13+
}
14+
}
15+
916
// respect COLORTERM being truecolor or 24bit
1017
if let Ok(color_term) = var("COLORTERM") {
1118
if color_term == "truecolor" || color_term == "24bit" {
@@ -72,6 +79,10 @@ pub(super) fn register_selectable_color_pairs(
7279
// Copyright (c) 2015 Alexandre Bury - MIT License
7380
#[allow(clippy::integer_division)]
7481
fn find_color(color_mode: ColorMode, color: Color) -> CrosstermColor {
82+
if color_mode == ColorMode::TwoTone {
83+
return CrosstermColor::Reset;
84+
}
85+
7586
match color {
7687
Color::Default => CrosstermColor::Reset,
7788
Color::LightBlack => CrosstermColor::DarkGrey,
@@ -195,6 +206,7 @@ mod tests {
195206
use super::*;
196207

197208
fn clear_env() {
209+
remove_var("NO_COLOR");
198210
remove_var("COLORTERM");
199211
remove_var("TERM");
200212
remove_var("VTE_VERSION");
@@ -320,6 +332,22 @@ mod tests {
320332
assert_eq!(detect_color_mode(0), ColorMode::TrueColor);
321333
}
322334

335+
#[test]
336+
#[serial]
337+
fn detect_color_mode_no_color_with_value() {
338+
clear_env();
339+
set_var("NO_COLOR", "true");
340+
assert_eq!(detect_color_mode(16), ColorMode::TwoTone);
341+
}
342+
343+
#[test]
344+
#[serial]
345+
fn detect_color_mode_no_color_without_value() {
346+
clear_env();
347+
set_var("NO_COLOR", "");
348+
assert_eq!(detect_color_mode(16), ColorMode::FourBit);
349+
}
350+
323351
#[test]
324352
#[serial]
325353
fn detect_color_mode_colorterm_env_is_24bit() {
@@ -344,6 +372,13 @@ mod tests {
344372
set_var("WT_SESSION", "32a25081-6745-4b65-909d-e8257bdbe852");
345373
assert_eq!(detect_color_mode(0), ColorMode::TrueColor);
346374
}
375+
376+
#[test]
377+
fn find_color_two_tone() {
378+
let color = Color::DarkRed;
379+
assert_eq!(find_color(ColorMode::TwoTone, color), CrosstermColor::Reset);
380+
}
381+
347382
#[rstest]
348383
#[case::black(0, 0, 0, 0)]
349384
#[case::black(0, 0, 127, 0)]
@@ -509,7 +544,7 @@ mod tests {
509544
Color::LightYellow,
510545
Color::LightBlue,
511546
);
512-
assert_eq!(color, Colors::new(CrosstermColor::Red, CrosstermColor::Yellow));
513-
assert_eq!(selected, Colors::new(CrosstermColor::Red, CrosstermColor::Yellow));
547+
assert_eq!(color, Colors::new(CrosstermColor::Reset, CrosstermColor::Reset));
548+
assert_eq!(selected, Colors::new(CrosstermColor::Reset, CrosstermColor::Reset));
514549
}
515550
}

0 commit comments

Comments
 (0)