summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md1
-rw-r--r--alacritty_terminal/src/ansi.rs65
2 files changed, 25 insertions, 41 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ef9b493d..25437a1c 100644
--- 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
index bff59de5..27c07a57 100644
--- 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;
}
}