diff src/evalwindow.c @ 24180:3c165c7432ff v8.2.2631

patch 8.2.2631: commands from winrestcmd() do not always work properly Commit: https://github.com/vim/vim/commit/a0c8aea479ca055ce43ba2984a9933f6c48e6161 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Mar 20 19:55:35 2021 +0100 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)
author Bram Moolenaar <Bram@vim.org>
date Sat, 20 Mar 2021 20:00:03 +0100
parents 9fa72351c18f
children 8f2262c72178
line wrap: on
line diff
--- a/src/evalwindow.c
+++ b/src/evalwindow.c
@@ -1007,18 +1007,25 @@ f_winnr(typval_T *argvars UNUSED, typval
 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);