248 |
$self->selected; |
$self->selected; |
249 |
|
|
250 |
my $lines_on_screen = $self->screen->rows - $status_lines; |
my $lines_on_screen = $self->screen->rows - $status_lines; |
251 |
|
my $max_top_screen_line = |
252 |
|
$nr_lines > $lines_on_screen ? $nr_lines - $lines_on_screen : 0; |
253 |
|
|
254 |
while(my $key = $self->screen->getch()) { |
while(my $key = $self->screen->getch()) { |
255 |
|
|
275 |
# last line on screen? |
# last line on screen? |
276 |
if ( $pos - $top_screen_line == $lines_on_screen ) { |
if ( $pos - $top_screen_line == $lines_on_screen ) { |
277 |
$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; |
|
|
|
|
278 |
$top_screen_line = $max_top_screen_line if $top_screen_line > $max_top_screen_line; |
$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"; |
|
279 |
$self->redraw_screen; |
$self->redraw_screen; |
280 |
} |
} |
281 |
if ( $pos == $nr_lines ) { |
if ( $pos == $nr_lines ) { |
295 |
$pos = 0; |
$pos = 0; |
296 |
$self->redraw_screen; |
$self->redraw_screen; |
297 |
} |
} |
298 |
|
} elsif ($key eq 'G' ) { |
299 |
|
if ( $top_screen_line == $max_top_screen_line ) { |
300 |
|
if ( $pos == $nr_lines ) { |
301 |
|
$self->error_text( "Already at bottom." ); |
302 |
|
} else { |
303 |
|
$self->selected( $nr_lines ); |
304 |
|
} |
305 |
|
} else { |
306 |
|
$top_screen_line = $max_top_screen_line; |
307 |
|
$pos = $nr_lines; |
308 |
|
$self->redraw_screen; |
309 |
|
} |
310 |
} |
} |
311 |
|
|
312 |
if ( length($key) > 1 ) { |
if ( length($key) > 1 ) { |