1
1
mirror of https://github.com/wez/wezterm.git synced 2024-12-25 14:22:37 +03:00

term: add implicit SGR reset when switching alt screen

This was a bit of a pain to track down because this behavior
isn't specified anywhere or called out explicitly.

The issue is that if you use a true color escape sequence such as

```bash
printf "\x1b[38;2;255;100;0mTRUECOLOR\n"
```

the active color would remain active when switching between the
primary and the alt screen until something (eg: `ls --color`) changed
it again.

I hadn't run into this because in my prompt, many many years ago, I had
it set to perform an SGR reset (`\x1b[0m`) as the first thing to ensure
that the shell is in a saner state.

For users that don't do this they end up with a weird looking color
bleed effect.

refs: https://github.com/wez/wezterm/issues/169
This commit is contained in:
Wez Furlong 2020-04-18 19:16:13 -07:00
parent c634f35b05
commit ea401e1f58

View File

@ -1123,6 +1123,7 @@ impl TerminalState {
)) => {
if !self.screen.is_alt_screen_active() {
self.screen.activate_alt_screen();
self.pen = CellAttributes::default();
}
}
Mode::ResetDecPrivateMode(DecPrivateMode::Code(
@ -1130,6 +1131,7 @@ impl TerminalState {
)) => {
if self.screen.is_alt_screen_active() {
self.screen.activate_primary_screen();
self.pen = CellAttributes::default();
}
}
@ -1195,6 +1197,7 @@ impl TerminalState {
self.save_cursor();
self.screen.activate_alt_screen();
self.set_cursor_pos(&Position::Absolute(0), &Position::Absolute(0));
self.pen = CellAttributes::default();
self.erase_in_display(EraseInDisplay::EraseDisplay);
}
}
@ -1204,6 +1207,7 @@ impl TerminalState {
if self.screen.is_alt_screen_active() {
self.screen.activate_primary_screen();
self.restore_cursor();
self.pen = CellAttributes::default();
}
}
Mode::SaveDecPrivateMode(DecPrivateMode::Code(_))