diff options
Diffstat (limited to 'sb-position')
| -rw-r--r-- | sb-position/sb_position.pl | 22 | 
1 files changed, 16 insertions, 6 deletions
| diff --git a/sb-position/sb_position.pl b/sb-position/sb_position.pl index 744229f..5fb9654 100644 --- a/sb-position/sb_position.pl +++ b/sb-position/sb_position.pl @@ -21,6 +21,7 @@ use strict;  use warnings;  use Irssi; +use Irssi::TextUI;  use POSIX qw(ceil);  { package Irssi::Nick } @@ -35,8 +36,8 @@ our %IRSSI = (      changed     => '2010-12-02'  ); -my ($buf, $size, $pos, $height); -my ($pages, $cur_page, $buf_percent); +my ($buf, $size, $pos, $height, $empty); +my ($pages, $cur_page, $buf_pos_cache);  init(); @@ -76,10 +77,18 @@ sub update_position {      $height = $view->{height};      $size   = $buf->{lines_count}; -    $pages    = ceil($size / $height); -    $pages    = 1 unless $pages; +    $empty  = $view->{empty_linecount}; +    $empty  = 0 unless $empty; -    $cur_page = ceil(($size - $pos + $height -1) / $height); +    # $size -= $empty; + +    $pages = ceil($size / $height); +    $pages = 1 unless $pages; + +    $pos   = $pos < 0 ? 0 : $pos; + +    $buf_pos_cache = $size - $pos + ($height - $empty) - 1; +    $cur_page      = ceil($buf_pos_cache / $height);      Irssi::statusbar_items_redraw('position');  } @@ -91,11 +100,12 @@ sub position_statusbar {      if ($size < $height) {          $percent = 100;      } else { -        $percent = ceil(($size - $pos - 1 + $height) / $size * 100); +        $percent = ceil($buf_pos_cache / $size * 100);      }      # Alternate view.      #my $sb = "p=$pos, s=$size, h=$height, pp:$cur_page/$pages $percent%%";      my $sb = "Page: $cur_page/$pages $percent%%"; +      $statusbar_item->default_handler($get_size_only, "{sb $sb}", 0, 1);  } | 
