# HG changeset patch # User Christian Brabandt # Date 1532812505 -7200 # Node ID cdc4eacdd81dfbce82cb05db62a8b71c73fa4a89 # Parent d221232f45788361c04c602f095d6e2c55f953d8 patch 8.1.0224: hang in bracketed paste mode when t_PE not encountered commit https://github.com/vim/vim/commit/fdd7155fab3447b38280035c66178330f8f041e7 Author: Bram Moolenaar Date: Sat Jul 28 23:12:05 2018 +0200 patch 8.1.0224: hang in bracketed paste mode when t_PE not encountered Problem: Hang in bracketed paste mode when t_PE not encountered. Solution: Break out of the loop when got_int is set. (suggested by Christian Brabandt, closes #3146) diff --git a/src/edit.c b/src/edit.c --- a/src/edit.c +++ b/src/edit.c @@ -9685,22 +9685,31 @@ bracketed_paste(paste_mode_T mode, int d int ret_char = -1; int save_allow_keys = allow_keys; int save_paste = p_paste; - int save_ai = curbuf->b_p_ai; /* If the end code is too long we can't detect it, read everything. */ if (STRLEN(end) >= NUMBUFLEN) end = NULL; ++no_mapping; allow_keys = 0; - p_paste = TRUE; - curbuf->b_p_ai = FALSE; + if (!p_paste) + // Also have the side effects of setting 'paste' to make it work much + // faster. + set_option_value((char_u *)"paste", TRUE, NULL, 0); for (;;) { - /* When the end is not defined read everything. */ + // When the end is not defined read everything there is. if (end == NULL && vpeekc() == NUL) break; - c = plain_vgetc(); + do + { + c = vgetc(); + } while (c == K_IGNORE || c == K_VER_SCROLLBAR || c == K_HOR_SCROLLBAR); + if (c == NUL || got_int) + // When CTRL-C was encountered the typeahead will be flushed and we + // won't get the end sequence. + break; + #ifdef FEAT_MBYTE if (has_mbyte) idx += (*mb_char2bytes)(c, buf + idx); @@ -9763,8 +9772,8 @@ bracketed_paste(paste_mode_T mode, int d --no_mapping; allow_keys = save_allow_keys; - p_paste = save_paste; - curbuf->b_p_ai = save_ai; + if (!save_paste) + set_option_value((char_u *)"paste", FALSE, NULL, 0); return ret_char; } diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -799,6 +799,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 224, +/**/ 223, /**/ 222,