hi, all. > Thanks for spotting this. I will need some more time and info to figure out > the fix. Could you send me a screen shot as well as a sample document for > me to reproduce the problem here. wcurses's(?) problem is default cursor position after opening text-file by nvi-1.81.6. this problems occur when first character(=default cursor) in this text-file is ''wcwidth > 1'' character. see attached archive: wcurses.tar.gz wcwidth_1/ nvi.log screenshot.png test.txt wcwidth_2/ nvi.log screenshot_BAD.png screenshot_OK.png test.txt wcurses_trace_diff.txt wcwidth_{1,2}/nvi.log aquired from following instruction: $ CURSES_TRACE_FILE=nvi LC_ALL=ja_JP.eucJP nvi test.txt screenshot_BAD.png just got for nvi-1.81.6 + wcurses. screenshot_OK.png is pkgsrc/editors/nvi + pkgsrc/devel/ncursesw with /etc/mk.conf PREFERE.ncursesw=pkgsrc PKG_OPTIONS.nvi=wide-curses. wcurses_trace_diff.txt is diff from both wcwidth_{1,2}/nvi.log. i'm just now reading wcurses source with this diff. and found following changes: Index: cr_put.c =================================================================== RCS file: /cvsroot/src/lib/libcurses/cr_put.c,v retrieving revision 1.25 diff -u -r1.25 cr_put.c --- cr_put.c 28 May 2007 15:01:54 -0000 1.25 +++ cr_put.c 14 Jun 2008 08:58:55 -0000 @@ -413,7 +413,9 @@ & WA_ATTRIBUTES) == curscr->wattr ) { if (WCOL(curscr->lines[outline]->line[outcol]) > 0) { +#if 0 __cputwchar(curscr->lines[outline]->line[outcol].ch); +#endif __cursesi_putnsp(curscr->lines[outline]->line[outcol].nsp, outline, outcol); may make default cursor position right place. but unfortunately moving cursor left or right (by pressing ``h'' and ''l'') might not work correctlly. i suspect continuous-cell(attr=0xfc000000)'s width are added somewhere by mistake... BTW, i found another bugs in wcurses. 1. __init_wacs() in src/libcurses/acs.c: 159 /* Add the SUSv2 defaults (those that are not '+') */ 160 lstr = setlocale( LC_ALL, "" ); 161 if ((lstr != NULL) && !strcasestr( lstr, "UTF-8" )) { ... ... 193 WACS_RARROW = 0x2192; setlocale(LC_ALL, "") may overwrite application's locale by environment variable LANG, LC_ALL and so on. use setlocale(LC_ALL, NULL) or nl_langinfo(CODESET) is prefered. but result string from both is implementation defined behavior. strcasestr("UTF-8") is **not portable**. do we really need ``rich'' arrow character in UTF-8 locale? 2. __waddbytes() in src/libcurses/addbytes.c: 150 n = mbtowc(&wc, bytes, count); as far as library function, using mbtowc(3) is not recommended, please use mbrtowc(3) instead. very truly yours. -- Takehiko NOZAKI <tnozaki%NetBSD.org@localhost>
Attachment:
wcurses.tar.gz
Description: Binary data