Mercurial > vim
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);