Fix save/restore cursor - st - simple terminal HTML git clone https://git.parazyd.org/st DIR Log DIR Files DIR Refs DIR README DIR LICENSE --- DIR commit 62ab938965f2673e029ae2e2a4244788e673bd70 DIR parent 2b1bc8087f232a7b0ba4c7233e76be7abae25a88 HTML Author: Mihail Zenkov <mihail.zenkov@gmail.com> 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(-) --- DIR diff --git a/st.c b/st.c @@ -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,