alacritty

fork of https://github.com/jwilm/alacritty, experimental
git clone git://git.thc420.xyz/alacritty
Log | Files | Refs | README

commit 204c46c7f9469a9d58ccc882afbd057f8675ef11
parent f59aa19892724f41e3a56817fb69e95413312920
Author: Kevin Zheng <kevzheng@umich.edu>
Date:   Sun,  9 Jun 2019 13:02:15 -0500

Fix dynamic multi-color escape codes



Diffstat:
MCHANGELOG.md | 1+
Malacritty_terminal/src/ansi.rs | 65++++++++++++++++++++++++-----------------------------------------
2 files changed, 25 insertions(+), 41 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md @@ -392,6 +392,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Pressing enter on the numpad should now insert a newline - The mouse bindings now support keyboard modifiers (shift/ctrl/alt/super) - Add support for the bright foreground color +- Support for setting foreground, background colors in one escape sequence ### Changed diff --git a/alacritty_terminal/src/ansi.rs b/alacritty_terminal/src/ansi.rs @@ -537,10 +537,10 @@ pub enum NamedColor { Foreground = 256, /// The background color Background, - /// Color for the text under the cursor - CursorText, /// Color for the cursor itself Cursor, + /// Color for the text under the cursor + CursorText, /// Dim black DimBlack, /// Dim red @@ -793,47 +793,30 @@ where unhandled(params); }, - // Get/set foreground color - b"10" => { - if params.len() >= 2 { - if let Some(color) = parse_rgb_color(params[1]) { - self.handler.set_color(NamedColor::Foreground as usize, color); - return; - } else if params[1] == b"?" { - self.handler.dynamic_color_sequence( - writer, - 10, - NamedColor::Foreground as usize, - ); - return; - } - } - unhandled(params); - }, - - // Get/set background color - b"11" => { + // Get/set Foreground, Background, Cursor colors + b"10" | b"11" | b"12" => { if params.len() >= 2 { - if let Some(color) = parse_rgb_color(params[1]) { - self.handler.set_color(NamedColor::Background as usize, color); - return; - } else if params[1] == b"?" { - self.handler.dynamic_color_sequence( - writer, - 11, - NamedColor::Background as usize, - ); - return; - } - } - unhandled(params); - }, + if let Some(mut dynamic_code) = parse_number(params[0]) { + for param in &params[1..] { + // 10 is the first dynamic color, also the foreground + let offset = dynamic_code as usize - 10; + let index = NamedColor::Foreground as usize + offset; + + // End of setting dynamic colors + if index > NamedColor::Cursor as usize { + unhandled(params); + break; + } - // Set text cursor color - b"12" => { - if params.len() >= 2 { - if let Some(color) = parse_rgb_color(params[1]) { - self.handler.set_color(NamedColor::Cursor as usize, color); + if let Some(color) = parse_rgb_color(param) { + self.handler.set_color(index, color); + } else if param == b"?" { + self.handler.dynamic_color_sequence(writer, dynamic_code, index); + } else { + unhandled(params); + } + dynamic_code += 1; + } return; } }