mirror of
				https://github.com/neovim/neovim.git
				synced 2025-10-26 12:27:24 +00:00 
			
		
		
		
	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} ...
This commit is contained in:
		| @@ -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); |   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) | static void termname_set_event(void **argv) | ||||||
| { | { | ||||||
|   char *termname = argv[0]; |   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_enter_ca_mode); | ||||||
|   unibi_out(ui, unibi_keypad_xmit); |   unibi_out(ui, unibi_keypad_xmit); | ||||||
|   unibi_out(ui, unibi_clear_screen); |   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); |   uv_loop_init(&data->write_loop); | ||||||
|   if (data->out_isatty) { |   if (data->out_isatty) { | ||||||
|     uv_tty_init(&data->write_loop, &data->output_handle.tty, data->out_fd, 0); |     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); |   update_size(ui); | ||||||
|   signal_watcher_start(&data->winch_handle, sigwinch_cb, SIGWINCH); |   signal_watcher_start(&data->winch_handle, sigwinch_cb, SIGWINCH); | ||||||
|   term_input_start(&data->input); |   term_input_start(&data->input); | ||||||
|  |   loop_schedule_deferred(data->loop, | ||||||
|  |                          event_create(terminfo_start_event, 1, ui)); | ||||||
| } | } | ||||||
|  |  | ||||||
| static void tui_terminal_stop(UI *ui) | static void tui_terminal_stop(UI *ui) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Justin M. Keyes
					Justin M. Keyes