[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#3207: strange screen update choices from ncurses



Package: ncurses3.0
Version: 1.9.9e-1

To reproduce: install dpkg 1.2.3elf and ncurses 1.9.9e-1.  Run dselect
(as non-root will do) with TERM=vt220 (using vt100 doesn't show the
problem) and go into the selection list.  Using `n' repeatedly move
the highlight onto the first actual package.  Then use ^N and ^P
alternately to scroll the display up and down.

You'll see that when ncurses needs to scroll the list area it does it
by redrawing it.  I don't know why it doesn't choose to change the
scrolling region instead, but this is liveable with.

The bug I'm reporting here is that when it needs to redraw some of the
package list lines (particularly All packages) it tries to reuse small
bits of parts of the lines that were there before, by using many
insert/delete character sequences.  This is *very* slow indeed.

lynx has the same problem.

This bug has existed in ncurses for a long time.

Below is a transcript of what I see when I do what I describe above,
and a script (I call it `slowprint') to output things slowly.  Try:
  slowprint <typescript 0.003

#!/usr/bin/perl
$|=1;
$overhead= 0.0125;
$delay= @ARGV ? $ARGV[0]+0 : 0.025;
$onclear= @ARGV>1 ? $ARGV[1]+0 : 0.0;
$per=1;
while ($delay < $overhead) { $per*=2; $delay*=2; }
$delay -= $overhead;
while (sysread(STDIN,$v,$per)) {
    if ($onclear) {
        $add.= $v;
        if (length($add)>$per+6) { $add= substr($add,length($add)-$per-6); }
        if (($z= index($add,'',0)) >= 0) {
            $remain= length($add)-$z-5;
            print substr($v,0,length($v)-$remain);
            select("","","",$onclear);
            $v= substr($v,length($v)-$remain);
            $add='';
        }
    }
    print $v;
    select("","","",$delay);
}

begin 664 typescript.gz
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
!`(BZ
`
end


Reply to: