patch 8.2.2631: commands from winrestcmd() do not always work properly
Problem: Commands from winrestcmd() do not always work properly. (Leonid V.
Fedorenchik)
Solution: Repeat the size commands twice. (closes #7988)
diff --git a/src/evalwindow.c b/src/evalwindow.c
index e00747a..b1b60d1 100644
--- a/src/evalwindow.c
+++ b/src/evalwindow.c
@@ -1007,18 +1007,25 @@
f_winrestcmd(typval_T *argvars UNUSED, typval_T *rettv)
{
win_T *wp;
- int winnr = 1;
+ int i;
+ int winnr;
garray_T ga;
char_u buf[50];
ga_init2(&ga, (int)sizeof(char), 70);
- FOR_ALL_WINDOWS(wp)
+
+ // Do this twice to handle some window layouts properly.
+ for (i = 0; i < 2; ++i)
{
- sprintf((char *)buf, ":%dresize %d|", winnr, wp->w_height);
- ga_concat(&ga, buf);
- sprintf((char *)buf, "vert :%dresize %d|", winnr, wp->w_width);
- ga_concat(&ga, buf);
- ++winnr;
+ winnr = 1;
+ FOR_ALL_WINDOWS(wp)
+ {
+ sprintf((char *)buf, ":%dresize %d|", winnr, wp->w_height);
+ ga_concat(&ga, buf);
+ sprintf((char *)buf, "vert :%dresize %d|", winnr, wp->w_width);
+ ga_concat(&ga, buf);
+ ++winnr;
+ }
}
ga_append(&ga, NUL);
diff --git a/src/testdir/test_window_cmd.vim b/src/testdir/test_window_cmd.vim
index 07347a3..fda34eb 100644
--- a/src/testdir/test_window_cmd.vim
+++ b/src/testdir/test_window_cmd.vim
@@ -631,16 +631,29 @@
func Test_winrestcmd()
2split
3vsplit
- let a = winrestcmd()
+ let restcmd = winrestcmd()
call assert_equal(2, winheight(0))
call assert_equal(3, winwidth(0))
wincmd =
call assert_notequal(2, winheight(0))
call assert_notequal(3, winwidth(0))
- exe a
+ exe restcmd
call assert_equal(2, winheight(0))
call assert_equal(3, winwidth(0))
only
+
+ wincmd v
+ wincmd s
+ wincmd v
+ redraw
+ let restcmd = winrestcmd()
+ wincmd _
+ wincmd |
+ exe restcmd
+ redraw
+ call assert_equal(restcmd, winrestcmd())
+
+ only
endfunc
func Fun_RenewFile()
diff --git a/src/version.c b/src/version.c
index a174b28..4204806 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2631,
+/**/
2630,
/**/
2629,