X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2Fconsole.pl;h=14c945a58987edabecd084078caf58eedca9ed38;hb=2af6cce23d91c175f9fe9a5b4f7af6f8cfd43440;hp=b4fef51ad68ec56d5aca5c645a0de24a91501ac3;hpb=2c4fd7e2ec5736105e9a532982b2fb8a47c374eb;p=spider.git diff --git a/perl/console.pl b/perl/console.pl index b4fef51a..14c945a5 100755 --- a/perl/console.pl +++ b/perl/console.pl @@ -69,32 +69,52 @@ sub sig_term cease(1, @_); } -# display the top screen -sub show_screen +# determine the colour of the line +sub setattr { - my $p = $spos - $pages; - my $i; - $p = 0 if $p < 0; - - $top->move(0, 0); - $top->attrset(COLOR_PAIR(0)) if $has_colors; - $top->clrtobot(); - for ($i = 0; $i < $pages && $p < @shistory; $i++, $p++) { - my $line = $shistory[$p]; - $line = substr($line, 0, COLS()) if length $line > COLS(); - $top->move($i, 0); - if ($has_colors) { - foreach my $ref (@colors) { - if ($line =~ m{$$ref[0]}) { - $top->attrset($$ref[1]); - last; - } + if ($has_colors) { + foreach my $ref (@colors) { + if ($_[0] =~ m{$$ref[0]}) { + $top->attrset($$ref[1]); + last; } } + } +} + +# display the top screen +sub show_screen +{ + if ($spos == @shistory - 1) { + + # if we really are scrolling thru at the end of the history + my $line = $shistory[-1]; + $top->addstr("\n") if $spos > 0; + setattr($line); $top->addstr($line); $top->attrset(COLOR_PAIR(0)) if $has_colors; + $spos = @shistory; + + } else { + + # anywhere else + my $p = $spos - $pages; + my $i; + $p = 0 if $p < 0; + + $top->move(0, 0); + $top->attrset(COLOR_PAIR(0)) if $has_colors; + $top->clrtobot(); + for ($i = 0; $i < $pages && $p < @shistory; $i++, $p++) { + my $line = $shistory[$p]; + $line = substr($line, 0, COLS()) if length $line > COLS(); + $top->move($i, 0); + setattr($line); + $top->addstr($line); + $top->attrset(COLOR_PAIR(0)) if $has_colors; + } + $spos = $p; } - $spos = $p; $top->refresh(); } @@ -111,7 +131,7 @@ sub rec_socket if ($sort eq 'D') { push @shistory, $line; shift @shistory if @shistory > $maxshist; - $spos = @shistory if $spos >= @shistory - 1; +# $spos = @shistory if $spos >= @shistory - 1; show_screen(); } elsif ($sort eq 'Z') { # end, disconnect, go, away ..... cease(0); @@ -166,7 +186,7 @@ sub rec_stdin } else { beep(); } - } elsif ($r eq KEY_PPAGE || $r eq "\026") { + } elsif ($r eq KEY_PPAGE || $r eq "\032") { if ($spos > 0) { $spos -= $pages; $spos = 0 if $spos < 0; @@ -174,7 +194,7 @@ sub rec_stdin } else { beep(); } - } elsif ($r eq KEY_NPAGE || $r eq "\032") { + } elsif ($r eq KEY_NPAGE || $r eq "\026") { if ($spos < @shistory - 1) { $spos += $pages; $spos = @shistory if $spos > @shistory; @@ -196,6 +216,8 @@ sub rec_stdin } } elsif ($r eq KEY_HOME || $r eq "\001") { $pos = 0; + } elsif ($r eq KEY_END || $r eq "\005") { + $pos = $lth; } elsif ($r eq KEY_BACKSPACE || $r eq "\010") { if ($pos > 0) { my $a = substr($inbuf, 0, $pos-1); @@ -230,11 +252,14 @@ sub rec_stdin $pos++; $lth++; } elsif ($r eq "\014" || $r eq "\022") { + $top->touchwin(); + $bot->touchwin(); $scr->touchwin(); $scr->refresh(); + $top->refresh(); } elsif ($r eq "\013") { - $inbuf = ""; - $pos = $lth = 0; + $inbuf = substr($inbuf, 0, $pos); + $lth = length $inbuf; } else { beep(); } @@ -308,10 +333,9 @@ $scr->refresh(); $SIG{__DIE__} = \&sig_term; $pages = LINES()-4; -my $dpages = $pages - 2; $conn->send_now("A$call|$connsort"); -$conn->send_now("I$call|set/page $dpages"); +$conn->send_now("I$call|set/page $maxshist"); $conn->send_now("I$call|set/nobeep"); Msg->set_event_handler(\*STDIN, "read" => \&rec_stdin);