diff options
Diffstat (limited to 'st.c')
-rw-r--r-- | st.c | 17 |
1 files changed, 15 insertions, 2 deletions
@@ -1060,12 +1060,25 @@ tresize(int col, int row) { | |||
1060 | int i; | 1060 | int i; |
1061 | int minrow = MIN(row, term.row); | 1061 | int minrow = MIN(row, term.row); |
1062 | int mincol = MIN(col, term.col); | 1062 | int mincol = MIN(col, term.col); |
1063 | int slide = term.c.y - row + 1; | ||
1063 | 1064 | ||
1064 | if(col < 1 || row < 1) | 1065 | if(col < 1 || row < 1) |
1065 | return; | 1066 | return; |
1066 | 1067 | ||
1067 | /* free uneeded rows */ | 1068 | /* free unneeded rows */ |
1068 | for(i = row; i < term.row; i++) { | 1069 | i = 0; |
1070 | if(slide > 0) { | ||
1071 | /* slide screen to keep cursor where we expect it - | ||
1072 | * tscrollup would work here, but we can optimize to | ||
1073 | * memmove because we're freeing the earlier lines */ | ||
1074 | for(/* i = 0 */; i < slide; i++) { | ||
1075 | free(term.line[i]); | ||
1076 | free(term.alt[i]); | ||
1077 | } | ||
1078 | memmove(term.line, term.line + slide, row * sizeof(Line)); | ||
1079 | memmove(term.alt, term.alt + slide, row * sizeof(Line)); | ||
1080 | } | ||
1081 | for(i += row; i < term.row; i++) { | ||
1069 | free(term.line[i]); | 1082 | free(term.line[i]); |
1070 | free(term.alt[i]); | 1083 | free(term.alt[i]); |
1071 | } | 1084 | } |