Re: [dev] [st] Rendering only half of emoji in curses-based program

From: Steffen Nurpmeso <steffen_AT_sdaoden.eu>
Date: Wed, 02 Apr 2025 21:52:06 +0200

Andrej Nabergoj wrote in
 <20250401210626.2g25ob2s5nxnge6i_AT_debian.si>:
 |The problem is not with lowermost, rightmost cell but one that is
 |two positions before rightmost, lowermost cell.
 
Of course, if you write a wide character that takes multiple
cells, we end up exactly there again.

 |I looked at tputc() function, but I don't know yet how to use these
 |debugging tools.
 |If I comment this two lines for example it renders whole character, but
 |of course this is not a solution:

Hmmm, i never looked there, but i see quite a bit of
"term.c.x+width < term.col", but also "term.c.x+width > term.col",
which is a bit odd, shouldn't it be >= in the latter, then? From
the logical-only side of the road.
This is shortly before this code you code me thinks

 |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; */
 |}
 |}

Ie i mean

        if (term.c.x+width > term.col) {
                if (IS_SET(MODE_WRAP))
                        tnewline(1);
                else
                        tmoveto(term.col - width, term.c.y);
                gp = &term.line[term.c.y][term.c.x];
        }

What happens if you use ">= term.col"?

  ...

--steffen
|
|Der Kragenbaer, The moon bear,
|der holt sich munter he cheerfully and one by one
|einen nach dem anderen runter wa.ks himself off
|(By Robert Gernhardt)
Received on Wed Apr 02 2025 - 21:52:06 CEST

This archive was generated by hypermail 2.3.0 : Wed Apr 02 2025 - 22:00:10 CEST