diff options
| author | Aurélien Aptel <aurelien.aptel@gmail.com> | 2010-09-02 01:42:03 +0200 | 
|---|---|---|
| committer | Aurélien Aptel <aurelien.aptel@gmail.com> | 2010-09-02 01:42:03 +0200 | 
| commit | 5c7be4ad4dc50862e43f3d8cecc97380cb158b52 (patch) | |
| tree | 45b463e7f32cc6fe680cb9cbc04ff319d0131dc9 | |
| parent | 195aa6bb9cca2975775dbb7951bb36135a779a21 (diff) | |
| download | st-5c7be4ad4dc50862e43f3d8cecc97380cb158b52.tar.xz st-5c7be4ad4dc50862e43f3d8cecc97380cb158b52.zip | |
resize from the top.
| -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]);  	} | 
