ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/perl/mark-urls
Revision: 1.7
Committed: Thu Jan 12 02:20:56 2006 UTC (18 years, 4 months ago) by root
Branch: MAIN
CVS Tags: rel-7_0, post_menubar_removal
Changes since 1.6: +8 -3 lines
Log Message:
*** empty log message ***

File Contents

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