Fix save/restore cursor - st - Personal fork of st
 (HTM) git clone git://git.drkhsh.at/st.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 62ab938965f2673e029ae2e2a4244788e673bd70
 (DIR) parent 2b1bc8087f232a7b0ba4c7233e76be7abae25a88
 (HTM) 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,