tFix save/restore cursor - st - [fork] customized build of st, the simple termi… | |
git clone git://src.adamsgaard.dk/st | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 62ab938965f2673e029ae2e2a4244788e673bd70 | |
parent 2b1bc8087f232a7b0ba4c7233e76be7abae25a88 | |
Author: Mihail Zenkov <[email protected]> | |
Date: Tue, 1 Oct 2013 20:02:24 +0200 | |
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. | |
Diffstat: | |
M st.c | 15 ++++++++------- | |
1 file changed, 8 insertions(+), 7 deletions(-) | |
--- | |
diff --git a/st.c b/st.c | |
t@@ -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); | |
} | |
} | |
t@@ -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 xter… | |
+ 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, |