ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/perl/mark-urls
Revision: 1.5
Committed: Wed Jan 11 02:13:56 2006 UTC (18 years, 4 months ago) by root
Branch: MAIN
Changes since 1.4: +22 -18 lines
Log Message:
*** empty log message ***

File Contents

# Content
1 #! perl
2
3 # same url as used in "selection"
4 my $url =
5 qr{(
6 (?:https?|ftp|news|mailto|file)://[ab-zA-Z0-9\-\@;\/?:&=%\$_.+!*\x27(),~]+
7 [ab-zA-Z0-9\-\@;\/?:&=%\$_+!*\x27()~] # exclude some trailing characters (heuristic)
8 )}x;
9
10 sub on_start {
11 my ($self) = @_;
12
13 $self->{browser} = urxvt::untaint $self->x_resource ("urlLauncher") || "x-www-browser";
14 }
15
16 sub on_line_update {
17 my ($self, $row) = @_;
18
19 # fetch the line that has changed
20 my $line = $self->line ($row);
21 my $text = $line->t;
22
23 # find all urls (if any)
24 while ($text =~ /$url/g) {
25 my $rend = $line->r;
26
27 # mark all characters as underlined. we _must_ not toggle underline,
28 # as we might get called on an already-marked url.
29 $_ |= urxvt::RS_Uline
30 for @{$rend}[ $-[1] .. $+[1] - 1];
31
32 $line->r ($rend);
33 }
34
35 ()
36 }
37
38 sub on_button_press {
39 my ($self, $event) = @_;
40 my $row = $event->{row};
41 my $col = $event->{col};
42
43 my $line = $self->line ($row);
44 my $text = $line->t;
45
46 while($text =~ /$url/g) {
47 if ($-[0] <= $col && $+[0] >= $col) {
48 system "$self->{browser} \Q$1\E &";
49 return 1;
50 }
51 }
52 ()
53 }
54