aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJonathan de Boyne Pollard <postmaster@localhost>2017-05-22 21:16:02 +0100
committerJonathan de Boyne Pollard <J.deBoynePollard-newsgroups@NTLWorld.com>2017-06-03 18:53:27 +0100
commitd711bb84e6a78360e470d82f3671da64583089c2 (patch)
treeb50bc6ef69a140274f259b5189bd2a01b90ca40e /src
parent5e5914655ba546c424a13d768469c21b444b8883 (diff)
downloadrneovim-d711bb84e6a78360e470d82f3671da64583089c2.tar.gz
rneovim-d711bb84e6a78360e470d82f3671da64583089c2.tar.bz2
rneovim-d711bb84e6a78360e470d82f3671da64583089c2.zip
tui: Eliminate superfluous SGR resets.
Track whether the terminal is in no attribute mode, assuming that it starts this way, and do not attempt to reset back to that mode if already in it.
Diffstat (limited to 'src')
-rw-r--r--src/nvim/tui/tui.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/nvim/tui/tui.c b/src/nvim/tui/tui.c
index 83198ee33c..84f23062ff 100644
--- a/src/nvim/tui/tui.c
+++ b/src/nvim/tui/tui.c
@@ -90,6 +90,7 @@ typedef struct {
bool busy;
cursorentry_T cursor_shapes[SHAPE_IDX_COUNT];
HlAttrs print_attrs;
+ bool default_attr;
ModeShape showing_mode;
TermType term;
struct {
@@ -155,6 +156,7 @@ static void terminfo_start(UI *ui)
data->scroll_region_is_full_screen = true;
data->bufpos = 0;
data->bufsize = sizeof(data->buf) - CNORM_COMMAND_MAX_SIZE;
+ data->default_attr = false;
data->showing_mode = SHAPE_IDX_N;
data->unibi_ext.enable_mouse = -1;
data->unibi_ext.disable_mouse = -1;
@@ -336,7 +338,10 @@ static void update_attrs(UI *ui, HlAttrs attrs)
}
data->print_attrs = attrs;
- unibi_out(ui, unibi_exit_attribute_mode);
+ if (!data->default_attr) {
+ data->default_attr = true;
+ unibi_out(ui, unibi_exit_attribute_mode);
+ }
UGrid *grid = &data->grid;
int fg = attrs.foreground != -1 ? attrs.foreground : grid->fg;
@@ -348,6 +353,7 @@ static void update_attrs(UI *ui, HlAttrs attrs)
data->params[1].i = (fg >> 8) & 0xff; // green
data->params[2].i = fg & 0xff; // blue
unibi_out(ui, data->unibi_ext.set_rgb_foreground);
+ data->default_attr = false;
}
if (bg != -1) {
@@ -355,30 +361,37 @@ static void update_attrs(UI *ui, HlAttrs attrs)
data->params[1].i = (bg >> 8) & 0xff; // green
data->params[2].i = bg & 0xff; // blue
unibi_out(ui, data->unibi_ext.set_rgb_background);
+ data->default_attr = false;
}
} else {
if (fg != -1) {
data->params[0].i = fg;
unibi_out(ui, unibi_set_a_foreground);
+ data->default_attr = false;
}
if (bg != -1) {
data->params[0].i = bg;
unibi_out(ui, unibi_set_a_background);
+ data->default_attr = false;
}
}
if (attrs.bold) {
unibi_out(ui, unibi_enter_bold_mode);
+ data->default_attr = false;
}
if (attrs.italic) {
unibi_out(ui, unibi_enter_italics_mode);
+ data->default_attr = false;
}
if (attrs.underline || attrs.undercurl) {
unibi_out(ui, unibi_enter_underline_mode);
+ data->default_attr = false;
}
if (attrs.reverse) {
unibi_out(ui, unibi_enter_reverse_mode);
+ data->default_attr = false;
}
}