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, > >