--- rxvt-unicode/src/perl/matcher 2007/06/10 23:10:01 1.3 +++ rxvt-unicode/src/perl/matcher 2011/08/19 23:02:46 1.5 @@ -12,29 +12,29 @@ )+ }x; -#sub on_user_command { -# my ($self, $cmd) = @_; -# if($cmd =~ s/^matcher\b//) { -# $self->most_recent; -# } -# my $row = $self->nrow; -# my @exec; -# while($row-- > $self->top_row) { -# #my $line = $self->line ($row); -# #my $text = $line->t; -# @exec = $self->command_for($row); -# last if(@exec); -# } -# if(@exec) { -# return $self->exec_async (@exec); -# } -# () -#} -# -#sub most_recent { -# my ($self) = shift; -# () -#} +sub on_user_command { + my ($self, $cmd) = @_; + if($cmd =~ s/^matcher\b//) { + $self->most_recent; + } + () +} + +sub most_recent { + my ($self) = shift; + my $row = $self->nrow; + my @exec; + while($row-- > $self->top_row) { + #my $line = $self->line ($row); + #my $text = $line->t; + @exec = $self->command_for($row); + last if(@exec); + } + if(@exec) { + return $self->exec_async (@exec); + } + () +} sub my_resource { my $self = shift; @@ -164,12 +164,16 @@ sub on_button_press { my ($self, $event) = @_; - if($self->valid_button($event)) { + if($self->valid_button($event) + && (my @exec = $self->command_for($event->{row},$event->{col}))) { $self->{row} = $event->{row}; $self->{col} = $event->{col}; + $self->{cmd} = \@exec; + return 1; } else { delete $self->{row}; delete $self->{col}; + delete $self->{cmd}; } () @@ -180,19 +184,20 @@ my $row = delete $self->{row}; my $col = delete $self->{col}; + my $cmd = delete $self->{cmd}; + + return if !defined $row; - if(defined($row) && $row == $event->{row} && abs($col-$event->{col}) < 2) { + if($row == $event->{row} && abs($col-$event->{col}) < 2 + && join("\x00", @$cmd) eq join("\x00", $self->command_for($row,$col))) { if($self->valid_button($event)) { - my @exec = $self->command_for($row,$col); - if(@exec) { - return $self->exec_async (@exec); - } + $self->exec_async (@$cmd); } } - () + 1; } # vim:set sw=3 sts=3 et: