To: vim_dev@googlegroups.com Subject: Patch 7.4.1405 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 7.4.1405 Problem: Completion menu flickers. Solution: Delay showing the popup menu. (Shougo, Justin M. Keyes, closes #656) Files: src/edit.c *** ../vim-7.4.1404/src/edit.c 2016-02-16 20:09:07.865342593 +0100 --- src/edit.c 2016-02-23 20:10:43.558344423 +0100 *************** *** 185,191 **** 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 unsigned quote_meta(char_u *dest, char_u *str, int len); #endif /* FEAT_INS_EXPAND */ --- 185,192 ---- 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, 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,1435 **** docomplete: compl_busy = TRUE; ! if (ins_complete(c) == FAIL) compl_cont_status = 0; compl_busy = FALSE; break; --- 1430,1436 ---- docomplete: compl_busy = TRUE; ! if (ins_complete(c, TRUE) == FAIL) compl_cont_status = 0; compl_busy = FALSE; break; *************** *** 2765,2770 **** --- 2766,2773 ---- 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,2804 **** compl_curr_match = compl_first_match; if (compl_no_insert) ! ins_complete(K_DOWN); else ! ins_complete(Ctrl_N); if (compl_no_select) ! ins_complete(Ctrl_P); out_flush(); } --- 2797,2811 ---- compl_curr_match = compl_first_match; if (compl_no_insert) ! ins_complete(K_DOWN, FALSE); else ! ins_complete(Ctrl_N, FALSE); if (compl_no_select) ! 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,3490 **** } #endif compl_restarting = TRUE; ! if (ins_complete(Ctrl_N) == FAIL) compl_cont_status = 0; compl_restarting = FALSE; } --- 3491,3497 ---- } #endif compl_restarting = TRUE; ! if (ins_complete(Ctrl_N, TRUE) == FAIL) compl_cont_status = 0; compl_restarting = FALSE; } *************** *** 5017,5023 **** * Returns OK if completion was done, FAIL if something failed (out of mem). */ static int ! ins_complete(int c) { char_u *line; int startcol = 0; /* column where searched text starts */ --- 5024,5030 ---- * Returns OK if completion was done, FAIL if something failed (out of mem). */ static int ! ins_complete(int c, int enable_pum) { char_u *line; int startcol = 0; /* column where searched text starts */ *************** *** 5610,5629 **** } /* Show the popup menu, unless we got interrupted. */ ! if (!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; } compl_was_interrupted = compl_interrupted; compl_interrupted = FALSE; --- 5617,5625 ---- } /* Show the popup menu, unless we got interrupted. */ ! if (enable_pum && !compl_interrupted) { ! show_pum(save_w_wrow); } compl_was_interrupted = compl_interrupted; compl_interrupted = FALSE; *************** *** 5631,5636 **** --- 5627,5650 ---- 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 *** ../vim-7.4.1404/src/version.c 2016-02-23 19:33:57.429544837 +0100 --- src/version.c 2016-02-23 20:09:34.463069833 +0100 *************** *** 750,751 **** --- 750,753 ---- { /* Add new patch number below this line */ + /**/ + 1405, /**/ -- Q: What do you call a fish without an eye? A: fsh! Q: What do you call a deer with no eyes? A: no eye deer. Q: What do you call a deer with no eyes and no legs? A: still no eye deer. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///