--- rxvt-unicode/src/perl/mark-urls 2006/01/05 01:04:10 1.1 +++ rxvt-unicode/src/perl/mark-urls 2006/01/10 21:20:53 1.4 @@ -3,27 +3,48 @@ # same url as used in "selection" my $url = qr{( - (?:https?|ftp|news|mailto|file)://[ab-zA-Z0-9\-\@;\/?:&=%\$_.+!*\x27(),]+ - [^.] # do not include a trailing dot, its wrong too often + (?:https?|ftp|news|mailto|file)://[ab-zA-Z0-9\-\@;\/?:&=%\$_.+!*\x27(),~]+ + [ab-zA-Z0-9\-\@;\/?:&=%\$_+!*\x27()~] # exclude some trailing characters (heuristic) )}x; -sub on_add_lines { - my ($term, $str) = @_; +sub on_line_update { + my ($self, $row) = @_; - while ($str =~ $url) { - # found a url, first output preceding text - $term->scr_add_lines (substr $str, 0, $-[1], ""); - # then toggle underline - $term->rstyle ($term->rstyle ^ urxvt::RS_Uline); - # now output the url - $term->scr_add_lines (substr $str, 0, $+[1] - $-[1], ""); - # toggle undelrine again - $term->rstyle ($term->rstyle ^ urxvt::RS_Uline); - } + # fetch the line that has changed + my $line = $self->line ($row); + my $text = $line->t; + + # find all urls (if any) + while ($text =~ /$url/g) { + my $rend = $line->r; - # output trailing text - $term->scr_add_lines ($str); + # mark all characters as underlined. we _must_ not toggle underline, + # as we might get called on an already-marked url. + $_ |= urxvt::RS_Uline + for @{$rend}[ $-[1] .. $+[1] - 1]; - 1 + $line->r ($rend); + } + + () } +# needs confgiurability TODO +#sub on_button_press { +# my ($self, $event) = @_; +# my $row = $event->{row}; +# my $col = $event->{col}; +# +# my $line = $self->line ($row); +# my $text = $line->t; +# +# while($text =~ /$url/g) { +# #print "... " . ($-[0] +# if ($-[0] <= $col && $+[0] >= $col) { +# system "firefox \Q$1\E &"; +# return 1; +# } +# } +# () +#} +