diff options
Diffstat (limited to 'src/popupmenu.c')
-rw-r--r-- | src/popupmenu.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/popupmenu.c b/src/popupmenu.c index 8a4b68f020..fdec5f3ec2 100644 --- a/src/popupmenu.c +++ b/src/popupmenu.c @@ -428,28 +428,35 @@ pum_under_menu(int row, int col, int only_redrawing) pum_compute_text_attrs(char_u *text, hlf_T hlf) { int i; - int leader_len; + size_t leader_len; int char_cells; int new_attr; char_u *ptr = text; int cell_idx = 0; garray_T *ga = NULL; int *attrs = NULL; - char_u *leader = ins_compl_leader(); - int in_fuzzy = (get_cot_flags() & COT_FUZZY) != 0; + char_u *leader = NULL; + int in_fuzzy; int matched_start = FALSE; int_u char_pos = 0; - if (leader == NULL || *leader == NUL || (hlf != HLF_PSI && hlf != HLF_PNI) + if ((hlf != HLF_PSI && hlf != HLF_PNI) || (highlight_attr[HLF_PMSI] == highlight_attr[HLF_PSI] && highlight_attr[HLF_PMNI] == highlight_attr[HLF_PNI])) return NULL; + leader = State == MODE_CMDLINE ? cmdline_compl_pattern() + : ins_compl_leader(); + if (leader == NULL || *leader == NUL) + return NULL; + attrs = ALLOC_MULT(int, vim_strsize(text)); if (attrs == NULL) return NULL; - leader_len = (int)STRLEN(leader); + in_fuzzy = State == MODE_CMDLINE ? cmdline_compl_is_fuzzy() + : (get_cot_flags() & COT_FUZZY) != 0; + leader_len = STRLEN(leader); if (in_fuzzy) ga = fuzzy_match_str_with_pos(text, leader); |