--- ISelect.pm 2007/10/25 21:14:33 22 +++ ISelect.pm 2007/10/25 21:27:58 23 @@ -248,6 +248,8 @@ $self->selected; my $lines_on_screen = $self->screen->rows - $status_lines; + my $max_top_screen_line = + $nr_lines > $lines_on_screen ? $nr_lines - $lines_on_screen : 0; while(my $key = $self->screen->getch()) { @@ -273,12 +275,7 @@ # last line on screen? if ( $pos - $top_screen_line == $lines_on_screen ) { $top_screen_line += $lines_on_screen; - - my $max_top_screen_line = - $nr_lines > $lines_on_screen ? $nr_lines - $lines_on_screen : 0; - $top_screen_line = $max_top_screen_line if $top_screen_line > $max_top_screen_line; - warn "max_top_screen_line = $max_top_screen_line top_screen_line = $top_screen_line\n"; $self->redraw_screen; } if ( $pos == $nr_lines ) { @@ -298,6 +295,18 @@ $pos = 0; $self->redraw_screen; } + } elsif ($key eq 'G' ) { + if ( $top_screen_line == $max_top_screen_line ) { + if ( $pos == $nr_lines ) { + $self->error_text( "Already at bottom." ); + } else { + $self->selected( $nr_lines ); + } + } else { + $top_screen_line = $max_top_screen_line; + $pos = $nr_lines; + $self->redraw_screen; + } } if ( length($key) > 1 ) {