--- rxvt-unicode/src/perl/searchable-scrollback 2006/01/09 23:03:13 1.3 +++ rxvt-unicode/src/perl/searchable-scrollback 2006/01/09 23:30:01 1.7 @@ -7,8 +7,8 @@ my $hotkey = $self->{argv}[0] || "M-s"; - $self->parse_keysym ($hotkey, "perl:searchable-scrollback:enter") - or warn "unable to register '$hotkey' as scrollback search enter hotkey\n"; + $self->parse_keysym ($hotkey, "perl:searchable-scrollback:start") + or warn "unable to register '$hotkey' as scrollback search start hotkey\n"; () } @@ -16,7 +16,7 @@ sub on_keyboard_command { my ($self, $cmd) = @_; - if ($cmd eq "searchable-scrollback:enter") { + if ($cmd eq "searchable-scrollback:start") { $self->enter; } @@ -40,6 +40,7 @@ $self->enable ( key_press => \&key_press, + tt_write => \&tt_write, refresh_begin => \&refresh, refresh_end => \&refresh, ); @@ -52,7 +53,7 @@ delete $self->{overlay}; - $self->disable ("key_press", "refresh_begin", "refresh_end"); + $self->disable ("key_press", "tt_write", "refresh_begin", "refresh_end"); $self->pty_ev_events ($self->{pty_ev_events}); $self->want_refresh; @@ -67,14 +68,16 @@ } sub search { - my ($self) = @_; + my ($self, $offset) = @_; - my $row = -$self->view_start; + my $row = -$self->view_start + ($self->nrow >> 1) + $offset; delete $self->{found}; + my $search = $self->special_encode ($self->{search}); + no re 'eval'; # just to be sure - my $re = qr/$self->{search}/; + my $re = qr/$search/; while ($row > -$self->nsaved) { my $line = $self->line ($row) @@ -103,7 +106,7 @@ return unless $self->{found}; - $self->scr_xor_span (@$_) + $self->scr_xor_span (@$_, urxvt::SET_FGCOLOR (urxvt::RS_RVid, 15)) for @{ $self->{found} }; () @@ -120,12 +123,9 @@ $self->idle; } elsif ($keysym == 0xff08) { substr $self->{search}, -1, 1, ""; - $self->search; } elsif ($string ne "") { - $self->{search} .= $string; - - $self->search; + return; } } else { if ($keysym == 0xff0d || $keysym == 0xff8d) { @@ -144,8 +144,9 @@ } elsif ($string eq "G") { $self->view_start (0); } elsif ($string eq "n") { - $self->search; - } elsif ($string eq "p") { + $self->search (-1); + $self->idle; + } elsif ($string eq "p" or $string eq "N") { # TODO } elsif ($string ne "") { $self->scr_bell; @@ -154,5 +155,14 @@ 1 } + +sub tt_write { + my ($self, $data) = @_; + + $self->{search} .= $self->locale_decode ($data); + $self->search; + + 1 +}