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:
@@ -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
|
||||||
|
@@ -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);
|
||||||
|
@@ -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
|
||||||
|
@@ -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,
|
||||||
/**/
|
/**/
|
||||||
|
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)
|
#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.
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user