On Wed, Dec 29, 2021 at 09:07:17AM -0800, jamin wrote: > Overtyping the first half of a wide character with the > second half of a wide character results in display garbage. > This is because the trailing dummy is not cleaned up. > > i.e. ATTR_WIDE, ATTR_WDUMMY, ATTR_WDUMMY > > Here is a short script for demonstrating the behavior: > > #!/bin/sh > alias printf=/usr/bin/printf > printf こんにちは!; sleep 2 > printf '\x1b[5D'; sleep 2 > printf へ; sleep 2 > printf ' '; sleep 2 > echo > --- > st.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/st.c b/st.c > index de2dd0e..51049ba 100644 > --- a/st.c > +++ b/st.c > @@ -2507,6 +2507,10 @@ check_control_code: > if (width == 2) { > gp->mode |= ATTR_WIDE; > if (term.c.x+1 < term.col) { > + if (gp[1].mode == ATTR_WIDE && term.c.x+2 < term.col) { > + gp[2].u = ' '; > + gp[2].mode &= ~ATTR_WDUMMY; > + } > gp[1].u = '\0'; > gp[1].mode = ATTR_WDUMMY; > } > -- > 2.34.1 > >
Hi Jamin, Thanks for the patch and the script to reproduce it easily. I've pushed the patch, -- Kind regards, Hiltjo