mirror of
				https://github.com/vim/vim.git
				synced 2025-10-30 09:47:20 -04:00 
			
		
		
		
	patch 9.1.1127: preinsert text is not cleaned up correctly
Problem:  when 'completeopt' is set to preinsert the preinserted text is
          not cleared when adding new leader (Yee Cheng Chin)
Solution: add a condition to delete preinsert text in edit function
          (glepnir)
closes: #16672
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
						
							4418041698
						
					
				
				
					commit
					52fd867f5e
				
			
							
								
								
									
										10
									
								
								src/edit.c
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								src/edit.c
									
									
									
									
									
								
							| @@ -146,6 +146,7 @@ edit( | ||||
| #ifdef FEAT_CONCEAL | ||||
|     int		cursor_line_was_concealed; | ||||
| #endif | ||||
|     int		ins_completion = FALSE; | ||||
|  | ||||
|     // Remember whether editing was restarted after CTRL-O. | ||||
|     did_restart_edit = restart_edit; | ||||
| @@ -636,10 +637,11 @@ edit( | ||||
| 	 * and the cursor is still in the completed word.  Only when there is | ||||
| 	 * a match, skip this when no matches were found. | ||||
| 	 */ | ||||
| 	if (ins_compl_active() | ||||
| 		&& pum_wanted() | ||||
| 	ins_completion = ins_compl_active() | ||||
| 	    && curwin->w_cursor.col >= ins_compl_col() | ||||
| 		&& ins_compl_has_shown_match()) | ||||
| 	    && ins_compl_has_shown_match(); | ||||
|  | ||||
| 	if (ins_completion && pum_wanted()) | ||||
| 	{ | ||||
| 	    // BS: Delete one character from "compl_leader". | ||||
| 	    if ((c == K_BS || c == Ctrl_H) | ||||
| @@ -697,6 +699,8 @@ edit( | ||||
| 		    ins_compl_delete(); | ||||
| 	    } | ||||
| 	} | ||||
| 	else if (ins_completion && !pum_wanted() && ins_compl_preinsert_effect()) | ||||
| 	    ins_compl_delete(); | ||||
|  | ||||
| 	// Prepare for or stop CTRL-X mode.  This doesn't do completion, but | ||||
| 	// it does fix up the text when finishing completion. | ||||
|   | ||||
| @@ -3171,6 +3171,11 @@ function Test_completeopt_preinsert() | ||||
|   call assert_equal("fobar", getline('.')) | ||||
|   call assert_equal(5, col('.')) | ||||
|  | ||||
|   set cot=preinsert | ||||
|   call feedkeys("Sfoo1 foo2\<CR>f\<C-X>\<C-N>bar", 'tx') | ||||
|   call assert_equal("fbar", getline('.')) | ||||
|   call assert_equal(4, col('.')) | ||||
|  | ||||
|   bw! | ||||
|   set cot& | ||||
|   set omnifunc& | ||||
|   | ||||
| @@ -704,6 +704,8 @@ static char *(features[]) = | ||||
|  | ||||
| static int included_patches[] = | ||||
| {   /* Add new patch number below this line */ | ||||
| /**/ | ||||
|     1127, | ||||
| /**/ | ||||
|     1126, | ||||
| /**/ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user