1 Discussed at https://github.com/neovim/neovim/pull/7204
3 diff -u -r ../neovim-9ff0cc70855fc3eb11ad0162ee02e742f354d360/src/nvim/tui/tui.c ./src/nvim/tui/tui.c
4 --- ../neovim-9ff0cc70855fc3eb11ad0162ee02e742f354d360/src/nvim/tui/tui.c 2017-08-22 01:46:43.000000000 +0200
5 +++ ./src/nvim/tui/tui.c 2017-08-22 13:09:48.599217223 +0200
7 unibi_out(ui, unibi_keypad_xmit);
8 unibi_out(ui, unibi_clear_screen);
9 // Enable bracketed paste
10 - unibi_out(ui, data->unibi_ext.enable_bracketed_paste);
11 + unibi_out_ext(ui, data->unibi_ext.enable_bracketed_paste);
12 // Enable focus reporting
13 - unibi_out(ui, data->unibi_ext.enable_focus_reporting);
14 + unibi_out_ext(ui, data->unibi_ext.enable_focus_reporting);
15 uv_loop_init(&data->write_loop);
16 if (data->out_isatty) {
17 uv_tty_init(&data->write_loop, &data->output_handle.tty, data->out_fd, 0);
19 unibi_out(ui, unibi_keypad_local);
20 unibi_out(ui, unibi_exit_ca_mode);
21 // Disable bracketed paste
22 - unibi_out(ui, data->unibi_ext.disable_bracketed_paste);
23 + unibi_out_ext(ui, data->unibi_ext.disable_bracketed_paste);
24 // Disable focus reporting
25 - unibi_out(ui, data->unibi_ext.disable_focus_reporting);
26 + unibi_out_ext(ui, data->unibi_ext.disable_focus_reporting);
29 uv_close((uv_handle_t *)&data->output_handle, NULL);
31 data->params[0].i = (fg >> 16) & 0xff; // red
32 data->params[1].i = (fg >> 8) & 0xff; // green
33 data->params[2].i = fg & 0xff; // blue
34 - unibi_out(ui, data->unibi_ext.set_rgb_foreground);
35 + unibi_out_ext(ui, data->unibi_ext.set_rgb_foreground);
39 data->params[0].i = (bg >> 16) & 0xff; // red
40 data->params[1].i = (bg >> 8) & 0xff; // green
41 data->params[2].i = bg & 0xff; // blue
42 - unibi_out(ui, data->unibi_ext.set_rgb_background);
43 + unibi_out_ext(ui, data->unibi_ext.set_rgb_background);
48 data->params[1].i = grid->bot;
49 unibi_out(ui, unibi_change_scroll_region);
50 if (grid->left != 0 || grid->right != ui->width - 1) {
51 - unibi_out(ui, data->unibi_ext.enable_lr_margin);
52 + unibi_out_ext(ui, data->unibi_ext.enable_lr_margin);
53 if (data->can_set_lr_margin) {
54 data->params[0].i = grid->left;
55 data->params[1].i = grid->right;
57 UGrid *grid = &data->grid;
59 if (0 <= data->unibi_ext.reset_scroll_region) {
60 - unibi_out(ui, data->unibi_ext.reset_scroll_region);
61 + unibi_out_ext(ui, data->unibi_ext.reset_scroll_region);
63 data->params[0].i = 0;
64 data->params[1].i = ui->height - 1;
66 data->params[0].i = ui->width - 1;
67 unibi_out(ui, unibi_set_right_margin_parm);
69 - unibi_out(ui, data->unibi_ext.disable_lr_margin);
70 + unibi_out_ext(ui, data->unibi_ext.disable_lr_margin);
72 unibi_goto(ui, grid->row, grid->col);
75 if (!got_winch) { // Try to resize the terminal window.
76 data->params[0].i = (int)height;
77 data->params[1].i = (int)width;
78 - unibi_out(ui, data->unibi_ext.resize_screen);
79 + unibi_out_ext(ui, data->unibi_ext.resize_screen);
80 // DECSLPP does not reset the scroll region.
81 if (data->scroll_region_is_full_screen) {
82 reset_scroll_region(ui);
85 TUIData *data = ui->data;
86 if (!data->mouse_enabled) {
87 - unibi_out(ui, data->unibi_ext.enable_mouse);
88 + unibi_out_ext(ui, data->unibi_ext.enable_mouse);
89 data->mouse_enabled = true;
94 TUIData *data = ui->data;
95 if (data->mouse_enabled) {
96 - unibi_out(ui, data->unibi_ext.disable_mouse);
97 + unibi_out_ext(ui, data->unibi_ext.disable_mouse);
98 data->mouse_enabled = false;
103 attrentry_T *aep = syn_cterm_attr2entry(attr);
104 data->params[0].i = aep->rgb_bg_color;
105 - unibi_out(ui, data->unibi_ext.set_cursor_color);
106 + unibi_out_ext(ui, data->unibi_ext.set_cursor_color);
111 default: WLOG("Unknown shape value %d", shape); break;
113 data->params[0].i = shape + (int)(c.blinkon == 0);
114 - unibi_out(ui, data->unibi_ext.set_cursor_style);
115 + unibi_out_ext(ui, data->unibi_ext.set_cursor_style);
118 /// @param mode editor mode
119 @@ -1189,11 +1189,23 @@
120 const char *str = NULL;
122 if (unibi_index >= 0) {
123 - if (unibi_index < unibi_string_begin_) {
124 - str = unibi_get_ext_str(data->ut, (unsigned)unibi_index);
126 - str = unibi_get_str(data->ut, (unsigned)unibi_index);
128 + str = unibi_get_str(data->ut, (unsigned)unibi_index);
132 + unibi_var_t vars[26 + 26] = {{0}};
133 + unibi_format(vars, vars + 26, str, data->params, out, ui, NULL, NULL);
137 +static void unibi_out_ext(UI *ui, int unibi_index)
139 + TUIData *data = ui->data;
141 + const char *str = NULL;
143 + if (unibi_index >= 0) {
144 + str = unibi_get_ext_str(data->ut, (unsigned)unibi_index);