| 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, |