0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

patch 9.1.0654: completion does not respect completeslash with fuzzy

Problem:  completion does not respect completeslash with fuzzy
          (egesip)
Solution: Change path separator on Windows, depending on 'completeslash'
          option value (glepnir)

fixes: #15392
closes: #15418

Signed-off-by: glepnir <glephunter@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
glepnir 2024-08-02 19:14:38 +02:00 committed by Christian Brabandt
parent a0b5bc1285
commit b9de1a057f
No known key found for this signature in database
GPG Key ID: F3F92DA383FDDE09
3 changed files with 60 additions and 1 deletions

View File

@ -3552,9 +3552,34 @@ get_next_filename_completion(void)
size_t path_with_wildcard_len;
char_u *path_with_wildcard;
#ifdef BACKSLASH_IN_FILENAME
char pathsep = (curbuf->b_p_csl[0] == 's') ?
'/' : (curbuf->b_p_csl[0] == 'b') ? '\\' : PATHSEP;
#else
char pathsep = PATHSEP;
#endif
if (in_fuzzy)
{
last_sep = vim_strrchr(leader, PATHSEP);
#ifdef BACKSLASH_IN_FILENAME
if (curbuf->b_p_csl[0] == 's')
{
for (i = 0; i < leader_len; i++)
{
if (leader[i] == '\\')
leader[i] = '/';
}
}
else if (curbuf->b_p_csl[0] == 'b')
{
for (i = 0; i < leader_len; i++)
{
if (leader[i] == '/')
leader[i] = '\\';
}
}
#endif
last_sep = vim_strrchr(leader, pathsep);
if (last_sep == NULL)
{
// No path separator or separator is the last character,

View File

@ -2668,6 +2668,38 @@ func Test_complete_fuzzy_match()
unlet g:word
endfunc
func Test_complete_fuzzy_with_completeslash()
CheckMSWindows
call writefile([''], 'fobar', 'D')
let orig_shellslash = &shellslash
set cpt&
new
set completeopt+=fuzzy
set noshellslash
" Test with completeslash unset
set completeslash=
call setline(1, ['.\fob'])
call feedkeys("A\<C-X>\<C-F>\<Esc>0", 'tx!')
call assert_equal('.\fobar', getline('.'))
" Test with completeslash=backslash
set completeslash=backslash
call feedkeys("S.\\fob\<C-X>\<C-F>\<Esc>0", 'tx!')
call assert_equal('.\fobar', getline('.'))
" Test with completeslash=slash
set completeslash=slash
call feedkeys("S.\\fob\<C-X>\<C-F>\<Esc>0", 'tx!')
call assert_equal('./fobar', getline('.'))
" Reset and clean up
let &shellslash = orig_shellslash
set completeslash=
%bw!
endfunc
" Check that tie breaking is stable for completeopt+=fuzzy (which should
" behave the same on different platforms).
func Test_complete_fuzzy_match_tie()

View File

@ -704,6 +704,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
654,
/**/
653,
/**/