Skip to content

Commit c121250

Browse files
committed
Output ANSI color sequences only when CLICOLOR(_FORCE) is set
1 parent 02d6461 commit c121250

File tree

3 files changed

+11
-6
lines changed

3 files changed

+11
-6
lines changed

src/libsyntax/errors/emitter.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use errors::{Level, RenderSpan, DiagnosticBuilder};
1717
use errors::RenderSpan::*;
1818
use errors::Level::*;
1919

20-
use std::{cmp, fmt};
20+
use std::{cmp, fmt, env};
2121
use std::io::prelude::*;
2222
use std::io;
2323
use std::rc::Rc;

src/libterm/terminfo/mod.rs

+7-3
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ use Attr;
2424
use color;
2525
use Terminal;
2626
use self::searcher::get_dbpath_for_term;
27-
use self::parser::compiled::{parse, msys_terminfo};
27+
use self::parser::compiled::{parse, ansi_terminfo};
2828
use self::parm::{expand, Variables, Param};
2929

3030

@@ -81,14 +81,18 @@ impl fmt::Display for Error {
8181
impl TermInfo {
8282
/// Create a TermInfo based on current environment.
8383
pub fn from_env() -> Result<TermInfo, Error> {
84+
if env::var("CLICOLOR_FORCE").unwrap_or("0".to_string()) != "0" {
85+
return Ok(ansi_terminfo());
86+
}
8487
let term = match env::var("TERM") {
8588
Ok(name) => TermInfo::from_name(&name),
8689
Err(..) => return Err(Error::TermUnset),
8790
};
8891

89-
if term.is_err() && env::var("MSYSCON").ok().map_or(false, |s| "mintty.exe" == s) {
92+
if term.is_err() && (env::var("MSYSCON").ok().map_or(false, |s| "mintty.exe" == s) ||
93+
env::var("CLICOLOR").unwrap_or("0".to_string()) != "0") {
9094
// msys terminal
91-
Ok(msys_terminfo())
95+
Ok(ansi_terminfo())
9296
} else {
9397
term
9498
}

src/libterm/terminfo/parser/compiled.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -323,8 +323,9 @@ pub fn parse(file: &mut io::Read, longnames: bool) -> Result<TermInfo, String> {
323323
})
324324
}
325325

326-
/// Create a dummy TermInfo struct for msys terminals
327-
pub fn msys_terminfo() -> TermInfo {
326+
/// Create a dummy TermInfo struct which only supports ISO 6429 (ANSI) color sequences. This is
327+
/// used for msys and when CLICOLOR(_FORCE) is set.
328+
pub fn ansi_terminfo() -> TermInfo {
328329
let mut strings = HashMap::new();
329330
strings.insert("sgr0".to_string(), b"\x1B[0m".to_vec());
330331
strings.insert("bold".to_string(), b"\x1B[1m".to_vec());

0 commit comments

Comments
 (0)