[hackers] [st] Fix bug restoring cursor position || "Roberto E. Vargas Caballero"

From: <hg_AT_suckless.org>
Date: Thu, 8 Nov 2012 17:24:46 +0100 (CET)

changeset: 388:3515a58a56c8
user: "Roberto E. Vargas Caballero" <k0ga_AT_shike2.com>
date: Thu Nov 08 17:15:26 2012 +0100
files: st.c
description:
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(-)
diff -r 30aa8728f01e -r 3515a58a56c8 st.c
--- a/st.c	Tue Nov 06 23:44:37 2012 +0100
+++ b/st.c	Thu Nov 08 17:15:26 2012 +0100
_AT_@ -96,8 +96,7 @@
 
 enum cursor_state {
 	CURSOR_DEFAULT  = 0,
-	CURSOR_HIDE     = 1,
-	CURSOR_WRAPNEXT = 2
+	CURSOR_WRAPNEXT = 1,
 };
 
 enum glyph_state {
_AT_@ -115,7 +114,8 @@
 	MODE_MOUSEMOTION = 64,
 	MODE_MOUSE       = 32|64,
 	MODE_REVERSE     = 128,
-	MODE_KBDLOCK     = 256
+	MODE_KBDLOCK     = 256,
+	MODE_HIDE      = 512
 };
 
 enum escape_state {
_AT_@ -1464,8 +1464,8 @@
 			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);
_AT_@ -2505,7 +2505,7 @@
 	}
 
 	/* draw the new one */
-	if(!(term.c.state & CURSOR_HIDE)) {
+	if(!(IS_SET(MODE_HIDE))) {
 		if(!(xw.state & WIN_FOCUSED))
 			g.bg = defaultucs;
 
Received on Thu Nov 08 2012 - 17:24:46 CET

This archive was generated by hypermail 2.3.0 : Thu Nov 08 2012 - 17:36:08 CET