--- rxvt-unicode/src/urxvt.pm 2006/01/05 01:04:10 1.33 +++ rxvt-unicode/src/urxvt.pm 2006/01/06 01:27:27 1.35 @@ -62,13 +62,17 @@ Displays a digital clock using the built-in overlay. +=item mark-urls + +Uses per-line filtering (C) to underline urls. + =item example-refresh-hooks Displays a very simple digital clock in the upper right corner of the window. Illustrates overwriting the refresh callbacks to create your own overlays or changes. -=item mark-urls +=item example-filter-input A not very useful example of filtering all text output to the terminal, by underlining all urls that matches a certain regex (i.e. some urls :). It @@ -225,6 +229,20 @@ might be very slow, however, as your hook is called for B text being output. +=item on_line_update $term, $row + +Called whenever a line was updated or changed. Can be used to filter +screen output (e.g. underline urls or other useless stuff). Only lines +that are being shown will be filtered, and, due to performance reasons, +not always immediately. + +The row number is always the topmost row of the line if the line spans +multiple rows. + +Please note that, if you change the line, then the hook might get called +later with the already-modified line (e.g. if unrelated parts change), so +you cannot just toggle rendition bits, but only set them. + =item on_refresh_begin $term Called just before the screen gets redrawn. Can be used for overlay @@ -737,13 +755,13 @@ =over 4 -=item $text = $line->t +=item $text = $line->t ([$new_text]) -Returns the full text of the line, similar to C +Returns or replaces the full text of the line, similar to C -=item $rend = $line->r +=item $rend = $line->r ([$new_rend]) -Returns the full rendition array of the line, similar to C +Returns or replaces the full rendition array of the line, similar to C =item $length = $line->l @@ -782,6 +800,7 @@ term => $self, beg => $beg, end => $end, + ncol => $self->ncol, len => ($end - $beg) * $self->ncol + $self->ROW_l ($end), }, urxvt::line:: } @@ -789,18 +808,35 @@ sub urxvt::line::t { my ($self) = @_; - substr +(join "", map $self->{term}->ROW_t ($_), $self->{beg} .. $self->{end}), - 0, $self->{len} + if (@_ > 1) + { + $self->{term}->ROW_t ($_, $_[1], 0, ($_ - $self->{beg}) * $self->{ncol}, $self->{ncol}) + for $self->{beg} .. $self->{end}; + } + + defined wantarray && + substr +(join "", map $self->{term}->ROW_t ($_), $self->{beg} .. $self->{end}), + 0, $self->{len} } sub urxvt::line::r { my ($self) = @_; - my $rend = [ - map @{ $self->{term}->ROW_r ($_) }, $self->{beg} .. $self->{end} - ]; - $#$rend = $self->{len} - 1; - $rend + if (@_ > 1) + { + $self->{term}->ROW_r ($_, $_[1], 0, ($_ - $self->{beg}) * $self->{ncol}, $self->{ncol}) + for $self->{beg} .. $self->{end}; + } + + if (defined wantarray) { + my $rend = [ + map @{ $self->{term}->ROW_r ($_) }, $self->{beg} .. $self->{end} + ]; + $#$rend = $self->{len} - 1; + return $rend; + } + + () } sub urxvt::line::beg { $_[0]{beg} } @@ -810,7 +846,7 @@ sub urxvt::line::offset_of { my ($self, $row, $col) = @_; - ($row - $self->{beg}) * $self->{term}->ncol + $col + ($row - $self->{beg}) * $self->{ncol} + $col } sub urxvt::line::coord_of { @@ -819,8 +855,8 @@ use integer; ( - $offset / $self->{term}->ncol + $self->{beg}, - $offset % $self->{term}->ncol + $offset / $self->{ncol} + $self->{beg}, + $offset % $self->{ncol} ) }