0
0
mirror of https://github.com/vim/vim.git synced 2025-09-24 03:44:06 -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:
Bram Moolenaar
2016-08-14 19:08:45 +02:00
parent e56132bb41
commit e59215c7dc
5 changed files with 58 additions and 3 deletions

View File

@@ -475,7 +475,7 @@ close_buffer(
if (win != NULL if (win != NULL
#ifdef FEAT_WINDOWS #ifdef FEAT_WINDOWS
&& win_valid(win) /* in case autocommands closed the window */ && win_valid_any_tab(win) /* in case autocommands closed the window */
#endif #endif
) )
{ {
@@ -581,7 +581,7 @@ aucmd_abort:
if ( if (
#ifdef FEAT_WINDOWS #ifdef FEAT_WINDOWS
win_valid(win) && win_valid_any_tab(win) &&
#else #else
win != NULL && win != NULL &&
#endif #endif

View File

@@ -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(int size, int flags);
int win_split_ins(int size, int flags, win_T *new_wp, int dir); int win_split_ins(int size, int flags, win_T *new_wp, int dir);
int win_valid(win_T *win); int win_valid(win_T *win);
int win_valid_any_tab(win_T *win);
int win_count(void); int win_count(void);
int make_windows(int count, int vertical); int make_windows(int count, int vertical);
void win_move_after(win_T *win1, win_T *win2); void win_move_after(win_T *win1, win_T *win2);

View File

@@ -425,3 +425,33 @@ func Test_viminfo_file_marks()
call delete('Xviminfo') call delete('Xviminfo')
endfunc 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

View File

@@ -763,6 +763,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 */
/**/
2212,
/**/ /**/
2211, 2211,
/**/ /**/

View File

@@ -1358,7 +1358,7 @@ win_init_some(win_T *newp, win_T *oldp)
#if defined(FEAT_WINDOWS) || defined(PROTO) #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 int
win_valid(win_T *win) win_valid(win_T *win)
@@ -1373,6 +1373,28 @@ win_valid(win_T *win)
return FALSE; 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. * Return the number of windows.
*/ */