mirror of
https://github.com/neovim/neovim.git
synced 2024-12-23 04:35:04 -07:00
vim-patch:8.0.1160: getting tab-local variable fails after closing window
Problem: Getting tab-local variable fails after closing window.
Solution: set tp_firstwin and tp_lastwin. (Jason Franklin, closes vim/vim#2170)
816968defc
This commit is contained in:
parent
d671168574
commit
059986e038
@ -10222,7 +10222,8 @@ static void f_gettabvar(typval_T *argvars, typval_T *rettv, FunPtr fptr)
|
||||
if (tp != NULL && varname != NULL) {
|
||||
// Set tp to be our tabpage, temporarily. Also set the window to the
|
||||
// first window in the tabpage, otherwise the window is not valid.
|
||||
win_T *window = tp->tp_firstwin == NULL ? firstwin : tp->tp_firstwin;
|
||||
win_T *window = tp == curtab || tp->tp_firstwin == NULL ? firstwin
|
||||
: tp->tp_firstwin;
|
||||
if (switch_win(&oldcurwin, &oldtabpage, window, tp, true) == OK) {
|
||||
// look up the variable
|
||||
// Let gettabvar({nr}, "") return the "t:" dictionary.
|
||||
|
@ -86,3 +86,19 @@ func Test_var()
|
||||
call assert_equal(1, gettabwinvar(2, 3, '&nux', 1))
|
||||
tabonly
|
||||
endfunc
|
||||
|
||||
" It was discovered that "gettabvar()" would fail if called from within the
|
||||
" tabline when the user closed a window. This test confirms the fix.
|
||||
func Test_gettabvar_in_tabline()
|
||||
let t:var_str = 'value'
|
||||
|
||||
set tabline=%{assert_equal('value',gettabvar(1,'var_str'))}
|
||||
set showtabline=2
|
||||
|
||||
" Simulate the user opening a split (which becomes window #1) and then
|
||||
" closing the split, which triggers the redrawing of the tabline.
|
||||
leftabove split
|
||||
redrawstatus!
|
||||
close
|
||||
redrawstatus!
|
||||
endfunc
|
||||
|
@ -3970,19 +3970,21 @@ win_remove (
|
||||
tabpage_T *tp /* tab page "win" is in, NULL for current */
|
||||
)
|
||||
{
|
||||
if (wp->w_prev != NULL)
|
||||
if (wp->w_prev != NULL) {
|
||||
wp->w_prev->w_next = wp->w_next;
|
||||
else if (tp == NULL)
|
||||
firstwin = wp->w_next;
|
||||
else
|
||||
} else if (tp == NULL) {
|
||||
firstwin = curtab->tp_firstwin = wp->w_next;
|
||||
} else {
|
||||
tp->tp_firstwin = wp->w_next;
|
||||
if (wp->w_next != NULL)
|
||||
}
|
||||
if (wp->w_next != NULL) {
|
||||
wp->w_next->w_prev = wp->w_prev;
|
||||
else if (tp == NULL)
|
||||
lastwin = wp->w_prev;
|
||||
else
|
||||
} else if (tp == NULL) {
|
||||
lastwin = curtab->tp_lastwin = wp->w_prev;
|
||||
} else {
|
||||
tp->tp_lastwin = wp->w_prev;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Append frame "frp" in a frame list after frame "after".
|
||||
|
Loading…
Reference in New Issue
Block a user