mirror of
				https://github.com/vim/vim.git
				synced 2025-10-30 09:47:20 -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:
		
				
					committed by
					
						 Christian Brabandt
						Christian Brabandt
					
				
			
			
				
	
			
			
			
						parent
						
							a0b5bc1285
						
					
				
				
					commit
					b9de1a057f
				
			| @@ -3552,9 +3552,34 @@ get_next_filename_completion(void) | |||||||
|     size_t	path_with_wildcard_len; |     size_t	path_with_wildcard_len; | ||||||
|     char_u	*path_with_wildcard; |     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) |     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) | 	if (last_sep == NULL) | ||||||
| 	{ | 	{ | ||||||
| 	    // No path separator or separator is the last character, | 	    // No path separator or separator is the last character, | ||||||
|   | |||||||
| @@ -2668,6 +2668,38 @@ func Test_complete_fuzzy_match() | |||||||
|   unlet g:word |   unlet g:word | ||||||
| endfunc | 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 | " Check that tie breaking is stable for completeopt+=fuzzy (which should | ||||||
| " behave the same on different platforms). | " behave the same on different platforms). | ||||||
| func Test_complete_fuzzy_match_tie() | func Test_complete_fuzzy_match_tie() | ||||||
|   | |||||||
| @@ -704,6 +704,8 @@ static char *(features[]) = | |||||||
|  |  | ||||||
| static int included_patches[] = | static int included_patches[] = | ||||||
| {   /* Add new patch number below this line */ | {   /* Add new patch number below this line */ | ||||||
|  | /**/ | ||||||
|  |     654, | ||||||
| /**/ | /**/ | ||||||
|     653, |     653, | ||||||
| /**/ | /**/ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user