1
0
forked from aniani/vim

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:
Yegappan Lakshmanan
2021-06-19 18:22:53 +02:00
committed by Bram Moolenaar
parent 59b50c3bee
commit ad52f96a2d
3 changed files with 71 additions and 1 deletions

View File

@@ -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

View File

@@ -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()

View File

@@ -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,
/**/ /**/