On Sat, Jul 02, 2005 at 03:49:01PM -0400, Daniel Burrows wrote: > Package: libncursesw5 > Version: 5.4-8 > Severity: normal > > I've just finished converting aptitude's display routines to understand > about >8-bit character set locales such as utf8. Everything works fine in > typical European locales -- however, when I tried setting the locale to > zh_CN, I noticed some display artifacts. After a bit of experimentation, I > believe that I've found the general situation that's causing this problem. > As you probably know, Chinese characters are "wide" -- by which I mean that > they take two columns on the text terminal. The problem I'm encountering > occurs when a wide character is *partially* overlapped by a non-wide > character. For instance, you can see this when a popup menu appears on top > of a background of wide-character text:
I can see where the problem is, will make a fix in the next patch. Other than the usual distractions, it took a few hours debugging due to the large size of the trace when running aptitude (to see how to get the information I needed). It seems that aptitude creates a _lot_ of windows (my first cut of a trace got 300Mb of trace). aptitude would probably run faster if it didn't do that. Anyway, the problem is that for the special case I'm seeing, ncurses/tty/tty_update.c is doing the wrong thing when there's an overlapped character. This is the chunk that's wrong (around line 1300): if (oLastChar < nLastChar) { int m = max(nLastNonblank, oLastNonblank); GoTo(lineno, n + 1); if ( #if USE_WIDEC_SUPPORT isWidecExt(newLine[n + 1]) || #endif InsCharCost(nLastChar - oLastChar) > (m - n)) { PutRange(oldLine, newLine, lineno, n + 1, m); } else { InsStr(&newLine[n + 1], nLastChar - oLastChar); } The isWidecExt() ifdef is new since 5.4, and for this particular case is applied too late to work properly. Also if the InsStr() branch is taken, I see the menu border overwritten. So there are two problems in that chunk. (I have a preliminary fix, but it was late at night -have to review ;-) -- Thomas E. Dickey <[EMAIL PROTECTED]> http://invisible-island.net ftp://invisible-island.net
signature.asc
Description: Digital signature