From 718a0218173a1e70896d13d739f87b11afcdb38a Mon Sep 17 00:00:00 2001 From: Wez Furlong Date: Thu, 28 Jul 2022 17:09:15 -0700 Subject: [PATCH] termwiz: use `6` for the rgba colorspace `4` is actually defined as CMYK according to ITU-T Rec. T.416: > A parameter substring for values 38 or 48 may be divided by one or more separators (03/10) into parameter elements, > denoted as Pe. The format of such a parameter sub-string is indicated as: > > Pe : P ... > > Each parameter element consists of zero, one or more bit combinations from 03/00 to 03/09, representing the digits > 0 to 9. An empty parameter element represents a default value for this parameter element. Empty parameter elements at > the end of the parameter substring need not be included. > > The first parameter element indicates a choice between: > > 0 implementation defined (only applicable for the character foreground colour) > 1 transparent; > 2 direct colour in RGB space; > 3 direct colour in CMY space; > 4 direct colour in CMYK space; > 5 indexed colour. refs: https://github.com/wez/wezterm/commit/6e9a22e199cc40ed75a26708343ea34a899542d5#commitcomment-79669016 --- termwiz/src/escape/csi.rs | 12 ++++++------ termwiz/src/escape/parser/mod.rs | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/termwiz/src/escape/csi.rs b/termwiz/src/escape/csi.rs index b90b1970a..af7f530bd 100644 --- a/termwiz/src/escape/csi.rs +++ b/termwiz/src/escape/csi.rs @@ -1448,7 +1448,7 @@ impl Display for Sgr { } else { write!( f, - "{}:4::{}:{}:{}:{}m", + "{}:6::{}:{}:{}:{}m", SgrCode::ForegroundColor as i64, red, green, @@ -1494,7 +1494,7 @@ impl Display for Sgr { } else { write!( f, - "{}:4::{}:{}:{}:{}m", + "{}:6::{}:{}:{}:{}m", SgrCode::BackgroundColor as i64, red, green, @@ -1518,7 +1518,7 @@ impl Display for Sgr { } else { write!( f, - "{}:4::{}:{}:{}:{}m", + "{}:6::{}:{}:{}:{}m", SgrCode::UnderlineColor as i64, red, green, @@ -2240,19 +2240,19 @@ impl<'a> CSIParser<'a> { fn parse_sgr_color(&mut self, params: &'a [CsiParam]) -> Result { match params { // wezterm extension to support an optional alpha channel in the `:` form only - [_, CsiParam::P(b':'), CsiParam::Integer(4), CsiParam::P(b':'), + [_, CsiParam::P(b':'), CsiParam::Integer(6), CsiParam::P(b':'), CsiParam::Integer(_colorspace), CsiParam::P(b':'), red, CsiParam::P(b':'), green, CsiParam::P(b':'), blue, CsiParam::P(b':'), alpha, ..] => { let res: SrgbaTuple = (to_u8(red)?, to_u8(green)?, to_u8(blue)?, to_u8(alpha)?).into(); Ok(self.advance_by(13, params, res.into())) } - [_, CsiParam::P(b':'), CsiParam::Integer(4), CsiParam::P(b':'), + [_, CsiParam::P(b':'), CsiParam::Integer(6), CsiParam::P(b':'), /* empty colorspace */ CsiParam::P(b':'), red, CsiParam::P(b':'), green, CsiParam::P(b':'), blue, CsiParam::P(b':'), alpha, ..] => { let res: SrgbaTuple = (to_u8(red)?, to_u8(green)?, to_u8(blue)?, to_u8(alpha)?).into(); Ok(self.advance_by(12, params, res.into())) } - [_, CsiParam::P(b':'), CsiParam::Integer(4), CsiParam::P(b':'), red, CsiParam::P(b':'), green, + [_, CsiParam::P(b':'), CsiParam::Integer(6), CsiParam::P(b':'), red, CsiParam::P(b':'), green, CsiParam::P(b':'), blue, CsiParam::P(b':'), alpha, ..] => { let res: SrgbaTuple = (to_u8(red)?, to_u8(green)?, to_u8(blue)?, to_u8(alpha)?).into(); diff --git a/termwiz/src/escape/parser/mod.rs b/termwiz/src/escape/parser/mod.rs index 83e47f827..dd1949a26 100644 --- a/termwiz/src/escape/parser/mod.rs +++ b/termwiz/src/escape/parser/mod.rs @@ -453,7 +453,7 @@ mod test { actions ); - let actions = p.parse_as_vec(b"\x1b[38:4:0:255:0:127mw"); + let actions = p.parse_as_vec(b"\x1b[38:6:0:255:0:127mw"); assert_eq!( vec![ Action::CSI(CSI::Sgr(Sgr::Foreground(ColorSpec::TrueColor(