mirror of
				https://github.com/vim/vim.git
				synced 2025-10-30 09:47:20 -04:00 
			
		
		
		
	patch 8.0.0622: selecting quoted text fails with 'selection' "exclusive"
Problem:    Using a text object to select quoted text fails when 'selection'
            is set to "exclusive". (Guraga)
Solution:   Swap cursor and visual start position. (Christian Brabandt,
            closes #1687)
			
			
This commit is contained in:
		
							
								
								
									
										15
									
								
								src/search.c
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								src/search.c
									
									
									
									
									
								
							| @@ -4364,7 +4364,7 @@ current_quote( | ||||
|     int		selected_quote = FALSE;	/* Has quote inside selection */ | ||||
|     int		i; | ||||
|  | ||||
|     /* Correct cursor when 'selection' is exclusive */ | ||||
|     /* Correct cursor when 'selection' is "exclusive". */ | ||||
|     if (VIsual_active) | ||||
|     { | ||||
| 	/* this only works within one line */ | ||||
| @@ -4372,8 +4372,19 @@ current_quote( | ||||
| 	    return FALSE; | ||||
|  | ||||
| 	vis_bef_curs = LT_POS(VIsual, curwin->w_cursor); | ||||
| 	if (*p_sel == 'e' && vis_bef_curs) | ||||
| 	if (*p_sel == 'e') | ||||
| 	{ | ||||
| 	    if (!vis_bef_curs) | ||||
| 	    { | ||||
| 		/* VIsual needs to be start of Visual selection. */ | ||||
| 		pos_T t = curwin->w_cursor; | ||||
|  | ||||
| 		curwin->w_cursor = VIsual; | ||||
| 		VIsual = t; | ||||
| 		vis_bef_curs = TRUE; | ||||
| 	    } | ||||
| 	    dec_cursor(); | ||||
| 	} | ||||
| 	vis_empty = EQUAL_POS(VIsual, curwin->w_cursor); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -5,7 +5,7 @@ if !has('textobjects') | ||||
| endif | ||||
|  | ||||
| set belloff=all | ||||
| function! CpoM(line, useM, expected) | ||||
| func CpoM(line, useM, expected) | ||||
|   new | ||||
|  | ||||
|   if a:useM | ||||
| @@ -29,16 +29,26 @@ function! CpoM(line, useM, expected) | ||||
|   call assert_equal(getreg('"'), a:expected[2]) | ||||
|  | ||||
|   q! | ||||
| endfunction | ||||
| endfunc | ||||
|  | ||||
| function! Test_inner_block_without_cpo_M() | ||||
| func Test_inner_block_without_cpo_M() | ||||
|   call CpoM('(red \(blue) green)', 0, ['red \(blue', 'red \(blue', '']) | ||||
| endfunction | ||||
| endfunc | ||||
|  | ||||
| function! Test_inner_block_with_cpo_M_left_backslash() | ||||
| func Test_inner_block_with_cpo_M_left_backslash() | ||||
|   call CpoM('(red \(blue) green)', 1, ['red \(blue) green', 'blue', 'red \(blue) green']) | ||||
| endfunction | ||||
| endfunc | ||||
|  | ||||
| function! Test_inner_block_with_cpo_M_right_backslash() | ||||
| func Test_inner_block_with_cpo_M_right_backslash() | ||||
|   call CpoM('(red (blue\) green)', 1, ['red (blue\) green', 'blue\', 'red (blue\) green']) | ||||
| endfunction | ||||
| endfunc | ||||
|  | ||||
| func Test_quote_selection_selection_exclusive() | ||||
|   new | ||||
|   call setline(1, "a 'bcde' f") | ||||
|   set selection=exclusive | ||||
|   exe "norm! fdvhi'y" | ||||
|   call assert_equal('bcde', @") | ||||
|   set selection&vim | ||||
|   bw! | ||||
| endfunc | ||||
|   | ||||
| @@ -764,6 +764,8 @@ static char *(features[]) = | ||||
|  | ||||
| static int included_patches[] = | ||||
| {   /* Add new patch number below this line */ | ||||
| /**/ | ||||
|     622, | ||||
| /**/ | ||||
|     621, | ||||
| /**/ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user