Fix bug restoring cursor position - st - Simple Terminal
       
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 950ff21e17af487b205ea0b666be015790114fa7
 (DIR) parent 5d39afc9023bc9a692ba6faf590abf9397a890ae
 (HTM) Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
       Date:   Thu,  8 Nov 2012 17:15:26 +0100
       
       Fix bug restoring cursor position
       
       Sequences like DECSC, DECRC, ESC [?1047l or ESC [?1047h save and restore
       cursor attributes, than taken from vt100 manual are:
       
              Save Cursor (DECSC) ESC   7
              ===========================
              Saves the following in terminal memory.
       
             - cursor position
             - graphic rendition
             - character set shift state
             - state of wrap flag
             - state of origin mode
       
             Restore Cursor (DECRC) ESC 8
             ===========================
             Restores the states described for (DECSC) above. If none of these
             characteristics were saved, the cursor moves to home position; origin
             mode is reset; no character attributes are assigned; and the default
             character set mapping is established.
       
       This implies that hide attribute of the cursor should not be saved/restored
       in these sequences. The best way to fix this problem is moving hide
       attribute into the terminal mode, instead of having it in the cursor state.
       ---
        st.c |   12 ++++++------
        1 file changed, 6 insertions(+), 6 deletions(-)
       Diffstat:
         st.c                                |      12 ++++++------
       
       1 file changed, 6 insertions(+), 6 deletions(-)
       ---
 (DIR) diff --git a/st.c b/st.c
       @@ -96,8 +96,7 @@ enum cursor_movement {
        
        enum cursor_state {
                CURSOR_DEFAULT  = 0,
       -        CURSOR_HIDE     = 1,
       -        CURSOR_WRAPNEXT = 2
       +        CURSOR_WRAPNEXT = 1,
        };
        
        enum glyph_state {
       @@ -115,7 +114,8 @@ enum term_mode {
                MODE_MOUSEMOTION = 64,
                MODE_MOUSE       = 32|64,
                MODE_REVERSE     = 128,
       -        MODE_KBDLOCK     = 256
       +        MODE_KBDLOCK     = 256,
       +        MODE_HIDE      = 512
        };
        
        enum escape_state {
       @@ -1464,8 +1464,8 @@ tsetmode(bool priv, bool set, int *args, int narg) {
                                case 0:  /* Error (IGNORED) */
                                case 12: /* att610 -- Start blinking cursor (IGNORED) */
                                        break;
       -                        case 25:
       -                                MODBIT(term.c.state, !set, CURSOR_HIDE);
       +                        case 25: /* DECTCEM -- Text Cursor Enable Mode */
       +                                MODBIT(term.mode, !set, MODE_HIDE);
                                        break;
                                case 1000: /* 1000,1002: enable xterm mouse report */
                                        MODBIT(term.mode, set, MODE_MOUSEBTN);
       @@ -2505,7 +2505,7 @@ xdrawcursor(void) {
                }
        
                /* draw the new one */
       -        if(!(term.c.state & CURSOR_HIDE)) {
       +        if(!(IS_SET(MODE_HIDE))) {
                        if(!(xw.state & WIN_FOCUSED))
                                g.bg = defaultucs;