mirror of
https://github.com/vim/vim.git
synced 2025-09-23 03:43:49 -04:00
patch 7.4.2212
Problem: Mark " is not set when closing a window in another tab. (Guraga) Solution: Check all tabs for the window to be valid. (based on patch by Hirohito Higashi, closes #974)
This commit is contained in:
@@ -475,7 +475,7 @@ close_buffer(
|
||||
|
||||
if (win != NULL
|
||||
#ifdef FEAT_WINDOWS
|
||||
&& win_valid(win) /* in case autocommands closed the window */
|
||||
&& win_valid_any_tab(win) /* in case autocommands closed the window */
|
||||
#endif
|
||||
)
|
||||
{
|
||||
@@ -581,7 +581,7 @@ aucmd_abort:
|
||||
|
||||
if (
|
||||
#ifdef FEAT_WINDOWS
|
||||
win_valid(win) &&
|
||||
win_valid_any_tab(win) &&
|
||||
#else
|
||||
win != NULL &&
|
||||
#endif
|
||||
|
@@ -4,6 +4,7 @@ void get_wincmd_addr_type(char_u *arg, exarg_T *eap);
|
||||
int win_split(int size, int flags);
|
||||
int win_split_ins(int size, int flags, win_T *new_wp, int dir);
|
||||
int win_valid(win_T *win);
|
||||
int win_valid_any_tab(win_T *win);
|
||||
int win_count(void);
|
||||
int make_windows(int count, int vertical);
|
||||
void win_move_after(win_T *win1, win_T *win2);
|
||||
|
@@ -425,3 +425,33 @@ func Test_viminfo_file_marks()
|
||||
|
||||
call delete('Xviminfo')
|
||||
endfunc
|
||||
|
||||
func Test_viminfo_file_mark_tabclose()
|
||||
tabnew Xtestfileintab
|
||||
call setline(1, ['a','b','c','d','e'])
|
||||
4
|
||||
q!
|
||||
wviminfo Xviminfo
|
||||
sp Xviminfo
|
||||
/^> .*Xtestfileintab
|
||||
let lnum = line('.')
|
||||
while 1
|
||||
if lnum == line('$')
|
||||
call assert_false(1, 'mark not found in Xtestfileintab')
|
||||
break
|
||||
endif
|
||||
let lnum += 1
|
||||
let line = getline(lnum)
|
||||
if line == ''
|
||||
call assert_false(1, 'mark not found in Xtestfileintab')
|
||||
break
|
||||
endif
|
||||
if line =~ "^\t\""
|
||||
call assert_equal('4', substitute(line, ".*\"\t\\(\\d\\).*", '\1', ''))
|
||||
break
|
||||
endif
|
||||
endwhile
|
||||
|
||||
call delete('Xviminfo')
|
||||
silent! bwipe Xtestfileintab
|
||||
endfunc
|
||||
|
@@ -763,6 +763,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
2212,
|
||||
/**/
|
||||
2211,
|
||||
/**/
|
||||
|
24
src/window.c
24
src/window.c
@@ -1358,7 +1358,7 @@ win_init_some(win_T *newp, win_T *oldp)
|
||||
|
||||
#if defined(FEAT_WINDOWS) || defined(PROTO)
|
||||
/*
|
||||
* Check if "win" is a pointer to an existing window.
|
||||
* Check if "win" is a pointer to an existing window in the current tab page.
|
||||
*/
|
||||
int
|
||||
win_valid(win_T *win)
|
||||
@@ -1373,6 +1373,28 @@ win_valid(win_T *win)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*
|
||||
* Check if "win" is a pointer to an existing window in any tab page.
|
||||
*/
|
||||
int
|
||||
win_valid_any_tab(win_T *win)
|
||||
{
|
||||
win_T *wp;
|
||||
tabpage_T *tp;
|
||||
|
||||
if (win == NULL)
|
||||
return FALSE;
|
||||
FOR_ALL_TABPAGES(tp)
|
||||
{
|
||||
FOR_ALL_WINDOWS_IN_TAB(tp, wp)
|
||||
{
|
||||
if (wp == win)
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*
|
||||
* Return the number of windows.
|
||||
*/
|
||||
|
Reference in New Issue
Block a user