diff options
author | Bram Moolenaar <Bram@vim.org> | 2016-02-23 20:13:16 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2016-02-23 20:13:16 +0100 |
commit | 8aefbe0ad5d05ee7225b20024b0f3023286ebd0f (patch) | |
tree | bd881b8788cb6b626fb4b76c85b0e9bdf6a416dc | |
parent | 9186a276222ea8a7c88f4092ac5b4201381f4e20 (diff) | |
download | vim-git-8aefbe0ad5d05ee7225b20024b0f3023286ebd0f.tar.gz |
patch 7.4.1405v7.4.1405
Problem: Completion menu flickers.
Solution: Delay showing the popup menu. (Shougo, Justin M. Keyes, closes
#656)
-rw-r--r-- | src/edit.c | 54 | ||||
-rw-r--r-- | src/version.c | 2 |
2 files changed, 36 insertions, 20 deletions
diff --git a/src/edit.c b/src/edit.c index d6d31f990..60b652337 100644 --- a/src/edit.c +++ b/src/edit.c @@ -185,7 +185,8 @@ static int ins_compl_key2dir(int c); static int ins_compl_pum_key(int c); static int ins_compl_key2count(int c); static int ins_compl_use_match(int c); -static int ins_complete(int c); +static int ins_complete(int c, int enable_pum); +static void show_pum(int save_w_wrow); static unsigned quote_meta(char_u *dest, char_u *str, int len); #endif /* FEAT_INS_EXPAND */ @@ -1429,7 +1430,7 @@ doESCkey: docomplete: compl_busy = TRUE; - if (ins_complete(c) == FAIL) + if (ins_complete(c, TRUE) == FAIL) compl_cont_status = 0; compl_busy = FALSE; break; @@ -2765,6 +2766,8 @@ ins_compl_make_cyclic(void) void set_completion(colnr_T startcol, list_T *list) { + int save_w_wrow = curwin->w_wrow; + /* If already doing completions stop it. */ if (ctrl_x_mode != 0) ins_compl_prep(' '); @@ -2794,11 +2797,15 @@ set_completion(colnr_T startcol, list_T *list) compl_curr_match = compl_first_match; if (compl_no_insert) - ins_complete(K_DOWN); + ins_complete(K_DOWN, FALSE); else - ins_complete(Ctrl_N); + ins_complete(Ctrl_N, FALSE); if (compl_no_select) - ins_complete(Ctrl_P); + ins_complete(Ctrl_P, FALSE); + + /* Lazily show the popup menu, unless we got interrupted. */ + if (!compl_interrupted) + show_pum(save_w_wrow); out_flush(); } @@ -3484,7 +3491,7 @@ ins_compl_new_leader(void) } #endif compl_restarting = TRUE; - if (ins_complete(Ctrl_N) == FAIL) + if (ins_complete(Ctrl_N, TRUE) == FAIL) compl_cont_status = 0; compl_restarting = FALSE; } @@ -5017,7 +5024,7 @@ ins_compl_use_match(int c) * Returns OK if completion was done, FAIL if something failed (out of mem). */ static int -ins_complete(int c) +ins_complete(int c, int enable_pum) { char_u *line; int startcol = 0; /* column where searched text starts */ @@ -5610,20 +5617,9 @@ ins_complete(int c) } /* Show the popup menu, unless we got interrupted. */ - if (!compl_interrupted) + if (enable_pum && !compl_interrupted) { - /* RedrawingDisabled may be set when invoked through complete(). */ - n = RedrawingDisabled; - RedrawingDisabled = 0; - - /* If the cursor moved we need to remove the pum first. */ - setcursor(); - if (save_w_wrow != curwin->w_wrow) - ins_compl_del_pum(); - - ins_compl_show_pum(); - setcursor(); - RedrawingDisabled = n; + show_pum(save_w_wrow); } compl_was_interrupted = compl_interrupted; compl_interrupted = FALSE; @@ -5631,6 +5627,24 @@ ins_complete(int c) return OK; } + static void +show_pum(int save_w_wrow) +{ + /* RedrawingDisabled may be set when invoked through complete(). */ + int n = RedrawingDisabled; + + RedrawingDisabled = 0; + + /* If the cursor moved we need to remove the pum first. */ + setcursor(); + if (save_w_wrow != curwin->w_wrow) + ins_compl_del_pum(); + + ins_compl_show_pum(); + setcursor(); + RedrawingDisabled = n; +} + /* * Looks in the first "len" chars. of "src" for search-metachars. * If dest is not NULL the chars. are copied there quoting (with diff --git a/src/version.c b/src/version.c index de06135aa..5696dfc4b 100644 --- a/src/version.c +++ b/src/version.c @@ -749,6 +749,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1405, +/**/ 1404, /**/ 1403, |