From: Stefan Sperling Subject: Re: tog: fix display of lines ending in \r\n To: Christian Weisgerber Cc: gameoftrees@openbsd.org Date: Sat, 12 Dec 2020 13:41:06 +0100 On Sat, Dec 12, 2020 at 12:09:12AM +0100, Christian Weisgerber wrote: > Christian Weisgerber: > > > Alternatively, > > (2) tog continues to pass the control character to curses, but when > > calculating the column width, tog takes into account that curses > > will change the character into a printable representation. > > > > Below is a quick proof-of-concept that uses approach (2). > > Here's a variant that at least isn't outright wrong. OK. This is a nice and compact solution. Because it isn't obvious, could you add a comment that explains the behaviour we expect from ncurses? Something like: /* ncurses escapes control chars with ^, using an extra column */ > diff 9f6bb280654be7061fc00305743f6ace71f9a1cb /home/naddy/got > blob - 99232045ade1a4d37286e512dd4999368a1b89b5 > file + tog/tog.c > --- tog/tog.c > +++ tog/tog.c > @@ -35,6 +35,7 @@ > #include > #include > #include > +#include > #include > #include > #include > @@ -1193,6 +1194,10 @@ format_line(wchar_t **wlinep, int *widthp, const char > if (cols + width > wlimit) > break; > cols += width; > + } else if (iswcntrl(wline[i])) { > + if (cols + 2 > wlimit) > + break; > + cols += 2; > } > i++; > } else { > -- > Christian "naddy" Weisgerber naddy@mips.inka.de > >