diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2017-12-01 04:18:34 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-12-01 04:18:34 +0100 |
commit | 27f9b1c7b029d8f61723fd261bed76ea7a01e68d (patch) | |
tree | ccca56a4d621f0ff534662f06d7d010fa27b6dad /src | |
parent | 3d0ee17c916eca85ee28b8e716b6203f6d7fbf1c (diff) | |
download | rneovim-27f9b1c7b029d8f61723fd261bed76ea7a01e68d.tar.gz rneovim-27f9b1c7b029d8f61723fd261bed76ea7a01e68d.tar.bz2 rneovim-27f9b1c7b029d8f61723fd261bed76ea7a01e68d.zip |
tui: emit some termcodes later (after startup) (#7664)
For some reason, enabling focus reporting during terminal setup, causes
slow rendering during Nvim startup on tmux 2.3 with the tmux
`focus-events` option enabled.
To workaround that issue, this commit defers the request.
closes #7649
init.vim:
call plug#begin('~/.config/nvim/plugged')
Plug 'morhetz/gruvbox'
call plug#end()
set background=light " background light just to see the effect more quickly
colorscheme gruvbox
.tmux.conf:
set -g focus-events on
set-option -ga terminal-overrides ",xterm-256color:Tc"
set-option -g default-terminal "screen-256color"
Using `script` to record the terminal session (and `vterm-dump` to
post-process the result):
BEFORE this commit:
./build/bin/nvim -u NONE{CR}{LF}
{DECSM 1049}{DECSM 1}{ESC =}
{CUP *}{ED 2}{DECSM 2004}{DECSM 1004}{CSI 8,44,156 t}{CSI * r}
{CUP 1,1}
{CUP *}{ED 2}{DECSM 25}
{DECRM 25}{CSI 2 q}{CSI 2 q}
{CUP *}{ED 2}{LF}
{ESC (B}{SGR *}{SGR 94}~ {CR}{LF}
~ {CR}{LF}
AFTER this commit:
./build/bin/nvim -u NONE{CR}{LF}
{DECSM 1049}{DECSM 1}{ESC =}
{CUP *}{ED 2}{CSI 8,44,156 t}{CSI * r}
{CUP 1,1}
{CUP *}{ED 2}{DECSM 2004}{DECSM 1004}{DECSM 25}
{DECRM 25}{CSI 2 q}{CSI 2 q}
{CUP *}{ED 2}{LF}
{ESC (B}{SGR *}{SGR 94}~ {CR}{LF}
~ {CR}{LF}
...
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/tui/tui.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/nvim/tui/tui.c b/src/nvim/tui/tui.c index 56a81a1c36..9bd3364a43 100644 --- a/src/nvim/tui/tui.c +++ b/src/nvim/tui/tui.c @@ -167,6 +167,18 @@ static size_t unibi_pre_fmt_str(TUIData *data, unsigned int unibi_index, return unibi_run(str, data->params, buf, len); } +/// Emits some termcodes after Nvim startup, which were observed to slowdown +/// rendering during startup in tmux 2.3 (+focus-events). #7649 +static void terminfo_start_event(void **argv) +{ + UI *ui = argv[0]; + TUIData *data = ui->data; + // Enable bracketed paste + unibi_out_ext(ui, data->unibi_ext.enable_bracketed_paste); + // Enable focus reporting + unibi_out_ext(ui, data->unibi_ext.enable_focus_reporting); +} + static void termname_set_event(void **argv) { char *termname = argv[0]; @@ -244,10 +256,6 @@ static void terminfo_start(UI *ui) unibi_out(ui, unibi_enter_ca_mode); unibi_out(ui, unibi_keypad_xmit); unibi_out(ui, unibi_clear_screen); - // Enable bracketed paste - unibi_out_ext(ui, data->unibi_ext.enable_bracketed_paste); - // Enable focus reporting - unibi_out_ext(ui, data->unibi_ext.enable_focus_reporting); uv_loop_init(&data->write_loop); if (data->out_isatty) { uv_tty_init(&data->write_loop, &data->output_handle.tty, data->out_fd, 0); @@ -296,6 +304,8 @@ static void tui_terminal_start(UI *ui) update_size(ui); signal_watcher_start(&data->winch_handle, sigwinch_cb, SIGWINCH); term_input_start(&data->input); + loop_schedule_deferred(data->loop, + event_create(terminfo_start_event, 1, ui)); } static void tui_terminal_stop(UI *ui) |