--- rxvt-unicode/src/perl/tabbed 2006/01/20 15:40:39 1.7 +++ rxvt-unicode/src/perl/tabbed 2006/01/20 16:18:07 1.10 @@ -20,7 +20,10 @@ for my $tab (@{ $self->{tabs} }) { $idx++; - my $txt = " $idx "; + my $act = $tab->{activity} && $tab != $self->{cur} + ? "*" : " "; + + my $txt = "$act$idx$act"; my $len = length $txt; substr $text, $ofs, $len + 1, "$txt|"; @@ -98,6 +101,7 @@ my ($self, $tab) = @_; if (my $cur = $self->{cur}) { + delete $cur->{activity}; $cur->XUnmapWindow ($cur->parent) if $cur->mapped; $cur->focus_out; } @@ -107,6 +111,7 @@ $self->configure; $tab->focus_in; $tab->XMapWindow ($tab->parent); + delete $tab->{activity}; $self->refresh; () @@ -210,13 +215,42 @@ () } +sub tab_key_press { + my ($self, $tab, $event, $keysym, $str) = @_; + + if ($event->{state} & urxvt::ShiftMask) { + if ($keysym == 0xff51 || $keysym == 0xff53) { + my ($idx) = grep $self->{tabs}[$_] == $tab, 0 .. $#{ $self->{tabs} }; + + --$idx if $keysym == 0xff51; + ++$idx if $keysym == 0xff53; + + $self->make_current ($self->{tabs}[$idx % @{ $self->{tabs}}]); + + return 1; + } elsif ($keysym == 0xff54) { + $self->new_tab; + + return 1; + } + } + + () +} + +sub tab_activity { + my ($self, $tab) = @_; + + $self->refresh; +} + package urxvt::ext::tabbed::tab; # helper extension implementing the subwindows of a tabbed terminal. # simply proxies all interesting calls back to the tabbed class. { - for my $hook qw(start destroy) { + for my $hook qw(start destroy key_press) { eval qq{ sub on_$hook { my \$parent = \$_[0]{term}{parent} @@ -228,5 +262,10 @@ } } +sub on_add_lines { + $_[0]->{activity}++ + or $_[0]{term}{parent}->tab_activity ($_[0]); + () +}