The problem is not with lowermost, rightmost cell but one that is
two positions before rightmost, lowermost cell.
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:
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; */
    }
}

#include <curses.h>
#include <locale.h>
int main() {
    int row, col;
    setlocale(LC_ALL, "");
    initscr();
    getmaxyx(stdscr, row, col);
    mvprintw(row-1, col-3, "字");
    getch();
    endwin();
    return 0;
}

I will try to learn how to use gdb and give it another try when I have
time.

Thank you to both.
Regrads,
Andrej

On 01/04/25 09:05, Roberto E. Vargas Caballero wrote:
> Quoth Steffen Nurpmeso <stef...@sdaoden.eu>:
> > Note i have no idea and did not truly look into the issue, but
> > there is a problem with terminals and the lowermost, rightmost
> > cell.  Ie i have, which names termcap/terminfo capabilities
> 
> These capabilities are about when the terminal does wrapping. VT100
> alike terminals do wrapping when you write past the last column.
> It means that when you write the last column the cursor stays in the
> last column and it does not moves to the  next line. St behaves
> like this.
> 
> All the logic about wide chars is in the function tputc() in st.c.
> You can try run st from gdb, write in st until you arrive to that
> column, then set a breakpoint in tputc() using gdb and see what
> happens when you write that character. It is likely that some
> miscalculation is done.
> 
> Regards,
> 
> 

Reply via email to