tFix bug restoring cursor position - st - [fork] customized build of st, the si… | |
git clone git://src.adamsgaard.dk/st | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 950ff21e17af487b205ea0b666be015790114fa7 | |
parent 5d39afc9023bc9a692ba6faf590abf9397a890ae | |
Author: Roberto E. Vargas Caballero <[email protected]> | |
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: | |
M st.c | 12 ++++++------ | |
1 file changed, 6 insertions(+), 6 deletions(-) | |
--- | |
diff --git a/st.c b/st.c | |
t@@ -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 { | |
t@@ -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 { | |
t@@ -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); | |
t@@ -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; | |