Skip to content

Commit 783c716

Browse files
committed
updated for version 7.4.365
Problem: Crash when using ":botright split" when there isn't much space. Solution: Add a check for the minimum width/height. (Yukihiro Nakadaira)
1 parent f589277 commit 783c716

File tree

2 files changed

+18
-4
lines changed

2 files changed

+18
-4
lines changed

src/version.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -734,6 +734,8 @@ static char *(features[]) =
734734

735735
static int included_patches[] =
736736
{ /* Add new patch number below this line */
737+
/**/
738+
365,
737739
/**/
738740
364,
739741
/**/

src/window.c

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -686,6 +686,8 @@ win_split_ins(size, flags, new_wp, dir)
686686
int layout;
687687
frame_T *frp, *curfrp;
688688
int before;
689+
int minwidth;
690+
int minheight;
689691

690692
if (flags & WSP_TOP)
691693
oldwin = firstwin;
@@ -725,11 +727,15 @@ win_split_ins(size, flags, new_wp, dir)
725727
needed += p_wiw - p_wmw;
726728
if (p_ea || (flags & (WSP_BOT | WSP_TOP)))
727729
{
730+
minwidth = frame_minwidth(topframe, NULL);
728731
available = topframe->fr_width;
729-
needed += frame_minwidth(topframe, NULL);
732+
needed += minwidth;
730733
}
731734
else
735+
{
736+
minwidth = frame_minwidth(oldwin->w_frame, NULL);
732737
available = oldwin->w_width;
738+
}
733739
if (available < needed && new_wp == NULL)
734740
{
735741
EMSG(_(e_noroom));
@@ -739,6 +745,8 @@ win_split_ins(size, flags, new_wp, dir)
739745
new_size = oldwin->w_width / 2;
740746
if (new_size > oldwin->w_width - p_wmw - 1)
741747
new_size = oldwin->w_width - p_wmw - 1;
748+
if (new_size > available - minwidth - 1)
749+
new_size = available - minwidth - 1;
742750
if (new_size < p_wmw)
743751
new_size = p_wmw;
744752

@@ -786,11 +794,13 @@ win_split_ins(size, flags, new_wp, dir)
786794
needed += p_wh - p_wmh;
787795
if (p_ea || (flags & (WSP_BOT | WSP_TOP)))
788796
{
797+
minheight = frame_minheight(topframe, NULL);
789798
available = topframe->fr_height;
790-
needed += frame_minheight(topframe, NULL);
799+
needed += minheight;
791800
}
792801
else
793802
{
803+
minheight = frame_minheight(oldwin->w_frame, NULL);
794804
available = oldwin->w_height;
795805
needed += p_wmh;
796806
}
@@ -810,6 +820,8 @@ win_split_ins(size, flags, new_wp, dir)
810820

811821
if (new_size > oldwin_height - p_wmh - STATUS_HEIGHT)
812822
new_size = oldwin_height - p_wmh - STATUS_HEIGHT;
823+
if (new_size > available - minheight - STATUS_HEIGHT)
824+
new_size = available - minheight - STATUS_HEIGHT;
813825
if (new_size < p_wmh)
814826
new_size = p_wmh;
815827

@@ -5732,7 +5744,7 @@ win_new_height(wp, height)
57325744
--wp->w_wrow;
57335745
}
57345746
}
5735-
set_topline(wp, lnum);
5747+
set_topline(wp, lnum);
57365748
}
57375749
else if (sline > 0)
57385750
{
@@ -5778,7 +5790,7 @@ win_new_height(wp, height)
57785790
wp->w_wrow -= sline;
57795791
}
57805792

5781-
set_topline(wp, lnum);
5793+
set_topline(wp, lnum);
57825794
}
57835795
}
57845796

0 commit comments

Comments
 (0)