diff options
| author | Mihail Zenkov <mihail.zenkov@gmail.com> | 2013-10-01 20:02:24 +0200 | 
|---|---|---|
| committer | Roberto E. Vargas Caballero <k0ga@shike2.com> | 2013-10-02 20:47:19 +0200 | 
| commit | 62ab938965f2673e029ae2e2a4244788e673bd70 (patch) | |
| tree | 3bf4d187f7ac6614ac009c73edba192abc16464c | |
| parent | 2b1bc8087f232a7b0ba4c7233e76be7abae25a88 (diff) | |
Fix save/restore cursor
st was assuming that save/restore cursor position was independent
of the screen that was shown in each moment, but it is not true,
because each screen has a different save/restore buffer. This
patch fixes it.
| -rw-r--r-- | st.c | 15 | 
1 files changed, 8 insertions, 7 deletions
| @@ -1342,13 +1342,14 @@ tfulldirt(void) {  void  tcursor(int mode) { -	static TCursor c; +	static TCursor c[2]; +	bool alt = IS_SET(MODE_ALTSCREEN);  	if(mode == CURSOR_SAVE) { -		c = term.c; +		c[alt] = term.c;  	} else if(mode == CURSOR_LOAD) { -		term.c = c; -		tmoveto(c.x, c.y); +		term.c = c[alt]; +		tmoveto(c[alt].x, c[alt].y);  	}  } @@ -1854,12 +1855,12 @@ tsetmode(bool priv, bool set, int *args, int narg) {  			case 1034:  				MODBIT(term.mode, set, MODE_8BIT);  				break; -			case 1049: /* = 1047 and 1048 */ -			case 47: +			case 1049: /* swap screen & set/restore cursor as xterm */ +				tcursor((set) ? CURSOR_SAVE : CURSOR_LOAD); +			case 47: /* swap screen */  			case 1047:  				if (!allowaltscreen)  					break; -  				alt = IS_SET(MODE_ALTSCREEN);  				if(alt) {  					tclearregion(0, 0, term.col-1, | 
