tui: Several minor tweaks per commentary and 256-colourize PuTTY.

* Don't use &data->grid when we already have grid .
* Consolidate into a single assignment to the default_attr flag.
This commit is contained in:
Jonathan de Boyne Pollard
2017-05-31 21:17:50 +01:00
parent b672035ff5
commit 98907c57ae

View File

@@ -370,13 +370,16 @@ static void update_attrs(UI *ui, HlAttrs attrs)
int fg = attrs.foreground != -1 ? attrs.foreground : grid->fg; int fg = attrs.foreground != -1 ? attrs.foreground : grid->fg;
int bg = attrs.background != -1 ? attrs.background : grid->bg; int bg = attrs.background != -1 ? attrs.background : grid->bg;
data->default_attr = fg == -1 && bg == -1
&& !attrs.bold && !attrs.italic && !attrs.underline && !attrs.undercurl
&& !attrs.reverse;
if (ui->rgb) { if (ui->rgb) {
if (fg != -1) { if (fg != -1) {
data->params[0].i = (fg >> 16) & 0xff; // red data->params[0].i = (fg >> 16) & 0xff; // red
data->params[1].i = (fg >> 8) & 0xff; // green data->params[1].i = (fg >> 8) & 0xff; // green
data->params[2].i = fg & 0xff; // blue data->params[2].i = fg & 0xff; // blue
unibi_out(ui, data->unibi_ext.set_rgb_foreground); unibi_out(ui, data->unibi_ext.set_rgb_foreground);
data->default_attr = false;
} }
if (bg != -1) { if (bg != -1) {
@@ -384,37 +387,30 @@ static void update_attrs(UI *ui, HlAttrs attrs)
data->params[1].i = (bg >> 8) & 0xff; // green data->params[1].i = (bg >> 8) & 0xff; // green
data->params[2].i = bg & 0xff; // blue data->params[2].i = bg & 0xff; // blue
unibi_out(ui, data->unibi_ext.set_rgb_background); unibi_out(ui, data->unibi_ext.set_rgb_background);
data->default_attr = false;
} }
} else { } else {
if (fg != -1) { if (fg != -1) {
data->params[0].i = fg; data->params[0].i = fg;
unibi_out(ui, unibi_set_a_foreground); unibi_out(ui, unibi_set_a_foreground);
data->default_attr = false;
} }
if (bg != -1) { if (bg != -1) {
data->params[0].i = bg; data->params[0].i = bg;
unibi_out(ui, unibi_set_a_background); unibi_out(ui, unibi_set_a_background);
data->default_attr = false;
} }
} }
if (attrs.bold) { if (attrs.bold) {
unibi_out(ui, unibi_enter_bold_mode); unibi_out(ui, unibi_enter_bold_mode);
data->default_attr = false;
} }
if (attrs.italic) { if (attrs.italic) {
unibi_out(ui, unibi_enter_italics_mode); unibi_out(ui, unibi_enter_italics_mode);
data->default_attr = false;
} }
if (attrs.underline || attrs.undercurl) { if (attrs.underline || attrs.undercurl) {
unibi_out(ui, unibi_enter_underline_mode); unibi_out(ui, unibi_enter_underline_mode);
data->default_attr = false;
} }
if (attrs.reverse) { if (attrs.reverse) {
unibi_out(ui, unibi_enter_reverse_mode); unibi_out(ui, unibi_enter_reverse_mode);
data->default_attr = false;
} }
} }
@@ -491,17 +487,18 @@ static void cursor_goto(UI *ui, int row, int col)
} }
if (0 == row && 0 == col) { if (0 == row && 0 == col) {
unibi_out(ui, unibi_cursor_home); unibi_out(ui, unibi_cursor_home);
ugrid_goto(&data->grid, row, col); ugrid_goto(grid, row, col);
return; return;
} }
if (0 == col ? col != grid->col : if (0 == col ? col != grid->col :
row != grid->row ? false :
1 == col ? 2 < grid->col && cheap_to_print(ui, grid->row, 0, col) : 1 == col ? 2 < grid->col && cheap_to_print(ui, grid->row, 0, col) :
2 == col ? 5 < grid->col && cheap_to_print(ui, grid->row, 0, col) : 2 == col ? 5 < grid->col && cheap_to_print(ui, grid->row, 0, col) :
false) { false) {
// Motion to left margin from anywhere else, or CR + printing chars is // Motion to left margin from anywhere else, or CR + printing chars is
// even less expensive than using BSes or CUB. // even less expensive than using BSes or CUB.
unibi_out(ui, unibi_carriage_return); unibi_out(ui, unibi_carriage_return);
ugrid_goto(&data->grid, grid->row, 0); ugrid_goto(grid, grid->row, 0);
} else if (col > grid->col) { } else if (col > grid->col) {
int n = col - grid->col; int n = col - grid->col;
if (n <= (row == grid->row ? 4 : 2) if (n <= (row == grid->row ? 4 : 2)
@@ -527,7 +524,7 @@ static void cursor_goto(UI *ui, int row, int col)
data->params[0].i = n; data->params[0].i = n;
unibi_out(ui, unibi_parm_left_cursor); unibi_out(ui, unibi_parm_left_cursor);
} }
ugrid_goto(&data->grid, row, col); ugrid_goto(grid, row, col);
return; return;
} else if (col > grid->col) { } else if (col > grid->col) {
int n = col - grid->col; int n = col - grid->col;
@@ -539,7 +536,7 @@ static void cursor_goto(UI *ui, int row, int col)
data->params[0].i = n; data->params[0].i = n;
unibi_out(ui, unibi_parm_right_cursor); unibi_out(ui, unibi_parm_right_cursor);
} }
ugrid_goto(&data->grid, row, col); ugrid_goto(grid, row, col);
return; return;
} }
} }
@@ -554,7 +551,7 @@ static void cursor_goto(UI *ui, int row, int col)
data->params[0].i = n; data->params[0].i = n;
unibi_out(ui, unibi_parm_down_cursor); unibi_out(ui, unibi_parm_down_cursor);
} }
ugrid_goto(&data->grid, row, col); ugrid_goto(grid, row, col);
return; return;
} else if (row < grid->row) { } else if (row < grid->row) {
int n = grid->row - row; int n = grid->row - row;
@@ -566,12 +563,12 @@ static void cursor_goto(UI *ui, int row, int col)
data->params[0].i = n; data->params[0].i = n;
unibi_out(ui, unibi_parm_up_cursor); unibi_out(ui, unibi_parm_up_cursor);
} }
ugrid_goto(&data->grid, row, col); ugrid_goto(grid, row, col);
return; return;
} }
} }
unibi_goto(ui, row, col); unibi_goto(ui, row, col);
ugrid_goto(&data->grid, row, col); ugrid_goto(grid, row, col);
} }
static void clear_region(UI *ui, int top, int bot, int left, int right) static void clear_region(UI *ui, int top, int bot, int left, int right)
@@ -1315,7 +1312,7 @@ static void patch_terminfo_bugs(TUIData *data, const char *term,
unibi_set_num(ut, unibi_max_colors, 256); unibi_set_num(ut, unibi_max_colors, 256);
unibi_set_str(ut, unibi_set_a_foreground, XTERM_SETAF_256); unibi_set_str(ut, unibi_set_a_foreground, XTERM_SETAF_256);
unibi_set_str(ut, unibi_set_a_background, XTERM_SETAB_256); unibi_set_str(ut, unibi_set_a_background, XTERM_SETAB_256);
} else if (konsole || xterm || gnome || rxvt || st } else if (konsole || xterm || gnome || rxvt || st || putty
|| linuxvt // Linux 4.8+ supports 256-colour SGR. || linuxvt // Linux 4.8+ supports 256-colour SGR.
|| mate_pretending_xterm || gnome_pretending_xterm || mate_pretending_xterm || gnome_pretending_xterm
|| (colorterm && strstr(colorterm, "256")) || (colorterm && strstr(colorterm, "256"))