mirror of
				https://github.com/vim/vim.git
				synced 2025-10-29 09:37:35 -04:00 
			
		
		
		
	patch 8.2.3018: 'quickfixtextfunc' formatting is lost when switching buffers
Problem:    Formatting using quickfixtextfunc is lost when updating location
            lists for different buffers.  (Yorick Peterse)
Solution:   Use the right window for the locaiton list. (Yegappan Lakshmanan,
            closes #8400, closes #8403)
			
			
This commit is contained in:
		
				
					committed by
					
						 Bram Moolenaar
						Bram Moolenaar
					
				
			
			
				
	
			
			
			
						parent
						
							59b50c3bee
						
					
				
				
					commit
					ad52f96a2d
				
			| @@ -4473,7 +4473,17 @@ qf_update_buffer(qf_info_T *qi, qfline_T *old_last) | |||||||
| 	int		qf_winid = 0; | 	int		qf_winid = 0; | ||||||
|  |  | ||||||
| 	if (IS_LL_STACK(qi)) | 	if (IS_LL_STACK(qi)) | ||||||
| 	    qf_winid = curwin->w_id; | 	{ | ||||||
|  | 	    if (curwin->w_llist == qi) | ||||||
|  | 		win = curwin; | ||||||
|  | 	    else | ||||||
|  | 	    { | ||||||
|  | 		win = qf_find_win_with_loclist(qi); | ||||||
|  | 		if (win == NULL) | ||||||
|  | 		    return; | ||||||
|  | 	    } | ||||||
|  | 	    qf_winid = win->w_id; | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	if (old_last == NULL) | 	if (old_last == NULL) | ||||||
| 	    // set curwin/curbuf to buf and save a few things | 	    // set curwin/curbuf to buf and save a few things | ||||||
|   | |||||||
| @@ -5231,6 +5231,64 @@ func Test_qftextfunc() | |||||||
|   call Xtest_qftextfunc('l') |   call Xtest_qftextfunc('l') | ||||||
| endfunc | endfunc | ||||||
|  |  | ||||||
|  | " Test for updating a location list for some other window and check that | ||||||
|  | " 'qftextfunc' uses the correct location list. | ||||||
|  | func Test_qftextfunc_other_loclist() | ||||||
|  |   %bw! | ||||||
|  |   call setloclist(0, [], 'f') | ||||||
|  |  | ||||||
|  |   " create a window and a location list for it and open the location list | ||||||
|  |   " window | ||||||
|  |   lexpr ['F1:10:12:one', 'F1:20:14:two'] | ||||||
|  |   let w1_id = win_getid() | ||||||
|  |   call setloclist(0, [], ' ', | ||||||
|  |         \ {'lines': ['F1:10:12:one', 'F1:20:14:two'], | ||||||
|  |         \  'quickfixtextfunc': | ||||||
|  |         \    {d -> map(getloclist(d.winid, {'id' : d.id, | ||||||
|  |         \                'items' : 1}).items[d.start_idx-1:d.end_idx-1], | ||||||
|  |         \          "'Line ' .. v:val.lnum .. ', Col ' .. v:val.col")}}) | ||||||
|  |   lwindow | ||||||
|  |   let w2_id = win_getid() | ||||||
|  |  | ||||||
|  |   " create another window and a location list for it and open the location | ||||||
|  |   " list window | ||||||
|  |   topleft new | ||||||
|  |   let w3_id = win_getid() | ||||||
|  |   call setloclist(0, [], ' ', | ||||||
|  |         \ {'lines': ['F2:30:32:eleven', 'F2:40:34:twelve'], | ||||||
|  |         \  'quickfixtextfunc': | ||||||
|  |         \    {d -> map(getloclist(d.winid, {'id' : d.id, | ||||||
|  |         \                'items' : 1}).items[d.start_idx-1:d.end_idx-1], | ||||||
|  |         \          "'Ligne ' .. v:val.lnum .. ', Colonne ' .. v:val.col")}}) | ||||||
|  |   lwindow | ||||||
|  |   let w4_id = win_getid() | ||||||
|  |  | ||||||
|  |   topleft new | ||||||
|  |   lexpr ['F3:50:52:green', 'F3:60:54:blue'] | ||||||
|  |   let w5_id = win_getid() | ||||||
|  |  | ||||||
|  |   " change the location list for some other window | ||||||
|  |   call setloclist(0, [], 'r', {'lines': ['F3:55:56:aaa', 'F3:57:58:bbb']}) | ||||||
|  |   call setloclist(w1_id, [], 'r', {'lines': ['F1:62:63:bbb', 'F1:64:65:ccc']}) | ||||||
|  |   call setloclist(w3_id, [], 'r', {'lines': ['F2:76:77:ddd', 'F2:78:79:eee']}) | ||||||
|  |   call assert_equal(['Line 62, Col 63', 'Line 64, Col 65'], | ||||||
|  |         \ getbufline(winbufnr(w2_id), 1, '$')) | ||||||
|  |   call assert_equal(['Ligne 76, Colonne 77', 'Ligne 78, Colonne 79'], | ||||||
|  |         \ getbufline(winbufnr(w4_id), 1, '$')) | ||||||
|  |   call setloclist(w2_id, [], 'r', {'lines': ['F1:32:33:fff', 'F1:34:35:ggg']}) | ||||||
|  |   call setloclist(w4_id, [], 'r', {'lines': ['F2:46:47:hhh', 'F2:48:49:jjj']}) | ||||||
|  |   call assert_equal(['Line 32, Col 33', 'Line 34, Col 35'], | ||||||
|  |         \ getbufline(winbufnr(w2_id), 1, '$')) | ||||||
|  |   call assert_equal(['Ligne 46, Colonne 47', 'Ligne 48, Colonne 49'], | ||||||
|  |         \ getbufline(winbufnr(w4_id), 1, '$')) | ||||||
|  |  | ||||||
|  |   call win_gotoid(w5_id) | ||||||
|  |   lwindow | ||||||
|  |   call assert_equal(['F3|55 col 56| aaa', 'F3|57 col 58| bbb'], | ||||||
|  |         \ getline(1, '$')) | ||||||
|  |   %bw! | ||||||
|  | endfunc | ||||||
|  |  | ||||||
| " Running :lhelpgrep command more than once in a help window, doesn't jump to | " Running :lhelpgrep command more than once in a help window, doesn't jump to | ||||||
| " the help topic | " the help topic | ||||||
| func Test_lhelpgrep_from_help_window() | func Test_lhelpgrep_from_help_window() | ||||||
|   | |||||||
| @@ -750,6 +750,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 */ | ||||||
|  | /**/ | ||||||
|  |     3018, | ||||||
| /**/ | /**/ | ||||||
|     3017, |     3017, | ||||||
| /**/ | /**/ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user