st
simple terminal
git clone https://9o.is/git/st.git
commit 8ccab2e68b15e8396effc21fa2ae509b140d7639 parent be5ad5cb8982511d6e32fced9796c5e510851110 Author: Quentin Rameau <quinq@fifth.space> Date: Sun, 25 Feb 2024 01:31:31 +0100 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. Diffstat:
| M | st.c | | | 10 | +++++++--- |
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/st.c b/st.c @@ -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);