--- ISelect.pm 2007/10/25 18:39:49 15 +++ ISelect.pm 2007/10/25 19:37:10 19 @@ -80,6 +80,9 @@ my $cols = $self->screen->cols; my $t = shift; + + $t =~ s/{s}//; + $t = '' unless defined $t; $t = substr($t,0,$cols) if length($t) > $cols; return $t . (" " x ($cols - length($t))); @@ -221,7 +224,7 @@ my $callback = shift; confess "expect callback as first arg" unless ref($callback) eq 'CODE'; - my @lines = $self->lines; + my @lines = @{ $self->lines }; # find which lines are selectable in input file for my $l (0 .. $#lines) { @@ -262,7 +265,12 @@ # last line on screen? if ( $pos - $top_screen_line == $lines_on_screen ) { $top_screen_line += $lines_on_screen; - $top_screen_line = $#lines - $lines_on_screen if $top_screen_line >= $#lines - $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; } $self->selected( $top_screen_line + $lines_on_screen - $pos );