X-Git-Url: http://dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2Fconsole.pl;h=41eb8016cc38249e2eccb891b38fedc05cede131;hb=e03572bb51a1ab00ed6be9bc8286354fba91bfa4;hp=29817564533c95cd37b243435c683c13c06409ab;hpb=46001b2fa7ddb237001a9f661faca4885f9daf9d;p=spider.git diff --git a/perl/console.pl b/perl/console.pl index 29817564..41eb8016 100755 --- a/perl/console.pl +++ b/perl/console.pl @@ -118,6 +118,15 @@ sub show_screen $top->refresh(); } +# add a line to the end of the top screen +sub addtotop +{ + my $inbuf = shift; + push @shistory, $inbuf; + shift @shistory if @shistory > $maxshist; + show_screen(); +} + # handle incoming messages sub rec_socket { @@ -129,10 +138,7 @@ sub rec_socket my ($sort, $call, $line) = $msg =~ /^(\w)(\S+)\|(.*)$/; if ($sort eq 'D') { - push @shistory, $line; - shift @shistory if @shistory > $maxshist; -# $spos = @shistory if $spos >= @shistory - 1; - show_screen(); + addtotop($line); } elsif ($sort eq 'Z') { # end, disconnect, go, away ..... cease(0); } @@ -157,6 +163,21 @@ sub rec_stdin # save the lines if ($inbuf) { + # check for a pling and do a search back for a command + if ($inbuf =~ /^!/o) { + my $i; + $inbuf =~ s/^!//o; + for ($i = $#khistory; $i >= 0; $i--) { + if ($khistory[$i] =~ /^$inbuf/) { + $inbuf = $khistory[$i]; + last; + } + } + if ($i < 0) { + beep(); + return; + } + } push @khistory, $inbuf if $inbuf; shift @khistory if @khistory > $maxkhist; $khistpos = @khistory; @@ -164,6 +185,9 @@ sub rec_stdin $bot->clrtoeol(); $bot->addstr(substr($inbuf, 0, COLS)); } + + # add it to the monitor window + addtotop($inbuf) if $inbuf; # send it to the cluster $inbuf = " " unless $inbuf; @@ -186,7 +210,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; @@ -194,7 +218,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; @@ -216,6 +240,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); @@ -250,11 +276,11 @@ sub rec_stdin $pos++; $lth++; } elsif ($r eq "\014" || $r eq "\022") { - $scr->touchwin(); - $scr->refresh(); +# curscr()->refresh(); + return; } elsif ($r eq "\013") { - $inbuf = ""; - $pos = $lth = 0; + $inbuf = substr($inbuf, 0, $pos); + $lth = length $inbuf; } else { beep(); }