diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2018-06-16 18:21:14 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-06-16 18:21:14 +0200 |
commit | 26dc628ab3a640b4f713d38c71623982fedc997a (patch) | |
tree | 0c1c6d4d0b8c7e261bbd2959afc351dfe2cff7e0 /src/nvim/edit.c | |
parent | eeeaf04c5ecd4471c8a01c87d935e2c0e563272e (diff) | |
parent | 33596d5d076c335064e7c1a2e4679398d6f9e487 (diff) | |
download | rneovim-26dc628ab3a640b4f713d38c71623982fedc997a.tar.gz rneovim-26dc628ab3a640b4f713d38c71623982fedc997a.tar.bz2 rneovim-26dc628ab3a640b4f713d38c71623982fedc997a.zip |
Merge #8567 from ckelsel/vim-8.0.0530
Diffstat (limited to 'src/nvim/edit.c')
-rw-r--r-- | src/nvim/edit.c | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/src/nvim/edit.c b/src/nvim/edit.c index c20758cb0b..1f18fc36fd 100644 --- a/src/nvim/edit.c +++ b/src/nvim/edit.c @@ -4132,7 +4132,6 @@ ins_compl_next ( ) { int num_matches = -1; - int i; int todo = count; compl_T *found_compl = NULL; int found_end = FALSE; @@ -4294,15 +4293,27 @@ ins_compl_next ( * Truncate the file name to avoid a wait for return. */ if (compl_shown_match->cp_fname != NULL) { - STRCPY(IObuff, "match in file "); - i = (vim_strsize(compl_shown_match->cp_fname) + 16) - sc_col; - if (i <= 0) - i = 0; - else - STRCAT(IObuff, "<"); - STRCAT(IObuff, compl_shown_match->cp_fname + i); - msg(IObuff); - redraw_cmdline = FALSE; /* don't overwrite! */ + char *lead = _("match in file"); + int space = sc_col - vim_strsize((char_u *)lead) - 2; + char_u *s; + char_u *e; + + if (space > 0) { + // We need the tail that fits. With double-byte encoding going + // back from the end is very slow, thus go from the start and keep + // the text that fits in "space" between "s" and "e". + for (s = e = compl_shown_match->cp_fname; *e != NUL; MB_PTR_ADV(e)) { + space -= ptr2cells(e); + while (space < 0) { + space += ptr2cells(s); + MB_PTR_ADV(s); + } + } + vim_snprintf((char *)IObuff, IOSIZE, "%s %s%s", lead, + s > compl_shown_match->cp_fname ? "<" : "", s); + msg(IObuff); + redraw_cmdline = false; // don't overwrite! + } } return num_matches; |