mirror of
https://github.com/neovim/neovim.git
synced 2025-09-17 16:58:17 +00:00
vim-patch:8.2.3018: 'quickfixtextfunc' formatting is lost when switching buffers (#14865)
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 vim/vim#8400, closes vim/vim#8403)
ad52f96a2d
This commit is contained in:
@@ -3925,7 +3925,15 @@ static void 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->handle;
|
if (curwin->w_llist == qi) {
|
||||||
|
win = curwin;
|
||||||
|
} else {
|
||||||
|
win = qf_find_win_with_loclist(qi);
|
||||||
|
if (win == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
qf_winid = (int)win->handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (old_last == NULL) {
|
if (old_last == NULL) {
|
||||||
|
@@ -5138,4 +5138,62 @@ 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
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
Reference in New Issue
Block a user