diff options
| author | Quentin Rameau <quinq@fifth.space> | 2024-02-25 01:31:31 +0100 | 
|---|---|---|
| committer | Hiltjo Posthuma <hiltjo@codemadness.org> | 2024-02-25 11:56:43 +0100 | 
| commit | 7473a8d1a57e5f9aba41b953f4e498c35e1c9dc5 (patch) | |
| tree | 58b0baa2424b1e26c7661048ba2e429b52876067 | |
| parent | a3f7420310be0fd778ef9fe2abf20edc2d8dc81a (diff) | |
| download | st-7473a8d1a57e5f9aba41b953f4e498c35e1c9dc5.tar.xz st-7473a8d1a57e5f9aba41b953f4e498c35e1c9dc5.zip  | |
Fix cursor move with wide glyphs
st would always move back 1 column,
even with wide glyhps (using more than a single column).
The glyph rune is set on its first column,
and the other ones are to 0,
so loop until we detect the start of the previous glyph.
| -rw-r--r-- | st.c | 10 | 
1 files changed, 7 insertions, 3 deletions
@@ -86,8 +86,8 @@ enum escape_state {  typedef struct {  	Glyph attr; /* current char attributes */ -	int x; -	int y; +	int x; /* terminal column */ +	int y; /* terminal row */  	char state;  } TCursor; @@ -2175,12 +2175,16 @@ tstrsequence(uchar c)  void  tcontrolcode(uchar ascii)  { +	size_t i; +  	switch (ascii) {  	case '\t':   /* HT */  		tputtab(1);  		return;  	case '\b':   /* BS */ -		tmoveto(term.c.x-1, term.c.y); +		for (i = 1; term.c.x && term.line[term.c.y][term.c.x - i].u == 0; ++i) +			; +		tmoveto(term.c.x - i, term.c.y);  		return;  	case '\r':   /* CR */  		tmoveto(0, term.c.y);  | 
