diff options
| -rw-r--r-- | st.c | 17 | 
1 files changed, 15 insertions, 2 deletions
@@ -1060,12 +1060,25 @@ tresize(int col, int row) {  	int i;  	int minrow = MIN(row, term.row);  	int mincol = MIN(col, term.col); +	int slide = term.c.y - row + 1;  	if(col < 1 || row < 1)  		return; -	/* free uneeded rows */ -	for(i = row; i < term.row; i++) { +	/* free unneeded rows */ +	i = 0; +	if(slide > 0) { +		/* slide screen to keep cursor where we expect it - +		 * tscrollup would work here, but we can optimize to +		 * memmove because we're freeing the earlier lines */ +		for(/* i = 0 */; i < slide; i++) { +			free(term.line[i]); +			free(term.alt[i]); +		} +		memmove(term.line, term.line + slide, row * sizeof(Line)); +		memmove(term.alt, term.alt + slide, row * sizeof(Line)); +	} +	for(i += row; i < term.row; i++) {  		free(term.line[i]);  		free(term.alt[i]);  	}  | 
