summaryrefslogtreecommitdiffstats
path: root/src/evalwindow.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2021-03-20 19:55:35 +0100
committerBram Moolenaar <Bram@vim.org>2021-03-20 19:55:35 +0100
commita0c8aea479ca055ce43ba2984a9933f6c48e6161 (patch)
tree23a6911e9f4220af6e1ee0c9578e29dffe31b237 /src/evalwindow.c
parent592f57f5fec1064cc276a0d7992cc543bed04fd5 (diff)
patch 8.2.2631: commands from winrestcmd() do not always work properlyv8.2.2631
Problem: Commands from winrestcmd() do not always work properly. (Leonid V. Fedorenchik) Solution: Repeat the size commands twice. (closes #7988)
Diffstat (limited to 'src/evalwindow.c')
-rw-r--r--src/evalwindow.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/src/evalwindow.c b/src/evalwindow.c
index e00747a2de..b1b60d1533 100644
--- a/src/evalwindow.c
+++ b/src/evalwindow.c
@@ -1007,18 +1007,25 @@ f_winnr(typval_T *argvars UNUSED, typval_T *rettv)
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);