diff options
| -rw-r--r-- | st.c | 30 | 
1 files changed, 12 insertions, 18 deletions
@@ -1586,37 +1586,31 @@ tclearregion(int x1, int y1, int x2, int y2) {  void  tdeletechar(int n) { -	int src = term.c.x + n; -	int dst = term.c.x; -	int size = term.col - src; +	int dst, src, size; -	term.dirty[term.c.y] = 1; +	LIMIT(n, 0, term.col - term.c.x); -	if(src >= term.col) { -		tclearregion(term.c.x, term.c.y, term.col-1, term.c.y); -		return; -	} +	dst = term.c.x; +	src = term.c.x + n; +	size = term.col - src;  	memmove(&term.line[term.c.y][dst], &term.line[term.c.y][src], -			size * sizeof(Glyph)); +	        size * sizeof(Glyph));  	tclearregion(term.col-n, term.c.y, term.col-1, term.c.y);  }  void  tinsertblank(int n) { -	int src = term.c.x; -	int dst = src + n; -	int size = term.col - dst; +	int dst, src, size; -	term.dirty[term.c.y] = 1; +	LIMIT(n, 0, term.col - term.c.x); -	if(dst >= term.col) { -		tclearregion(term.c.x, term.c.y, term.col-1, term.c.y); -		return; -	} +	dst = term.c.x + n; +	src = term.c.x; +	size = term.col - dst;  	memmove(&term.line[term.c.y][dst], &term.line[term.c.y][src], -			size * sizeof(Glyph)); +	        size * sizeof(Glyph));  	tclearregion(src, term.c.y, dst - 1, term.c.y);  }  | 
