ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/perl/matcher
(Generate patch)

Comparing rxvt-unicode/src/perl/matcher (file contents):
Revision 1.14 by root, Sat May 17 13:34:35 2014 UTC vs.
Revision 1.17 by sf-exg, Sat May 31 19:47:42 2014 UTC

1#! perl 1#! perl
2 2
3# Author: Tim Pope <rxvt-unicodeNOSPAM@tpope.org> 3# Author: Tim Pope <rxvt-unicodeNOSPAM@tpope.org>
4# Bob Farrell <robertanthonyfarrell@gmail.com> 4# Bob Farrell <robertanthonyfarrell@gmail.com>
5 5
6#:META:X_RESOURCE:%.launcher:string:default launcher command 6#:META:RESOURCE:%.launcher:string:default launcher command
7#:META:X_RESOURCE:%.button:string:the button, yeah 7#:META:RESOURCE:%.button:string:the button, yeah
8#:META:X_RESOURCE:%.pattern.:string:extra pattern to match 8#:META:RESOURCE:%.pattern.:string:extra pattern to match
9#:META:X_RESOURCE:%.launcher.:string:custom launcher for pattern 9#:META:RESOURCE:%.launcher.:string:custom launcher for pattern
10#:META:X_RESOURCE:%.rend.:string:custom rednition for pattern 10#:META:RESOURCE:%.rend.:string:custom rednition for pattern
11 11
12=head1 NAME 12=head1 NAME
13 13
14matcher - match strings in terminal output and change their rendition 14matcher - match strings in terminal output and change their rendition
15 15
17 17
18Uses per-line display filtering (C<on_line_update>) to underline text 18Uses per-line display filtering (C<on_line_update>) to underline text
19matching a certain pattern and make it clickable. When clicked with the 19matching a certain pattern and make it clickable. When clicked with the
20mouse button specified in the C<matcher.button> resource (default 2, or 20mouse button specified in the C<matcher.button> resource (default 2, or
21middle), the program specified in the C<matcher.launcher> resource 21middle), the program specified in the C<matcher.launcher> resource
22(default, the C<urlLauncher> resource, C<sensible-browser>) will be started 22(default, the C<url-launcher> resource, C<sensible-browser>) will be started
23with the matched text as first argument. The default configuration is 23with the matched text as first argument. The default configuration is
24suitable for matching URLs and launching a web browser, like the 24suitable for matching URLs and launching a web browser, like the
25former "mark-urls" extension. 25former "mark-urls" extension.
26 26
27The default pattern to match URLs can be overridden with the 27The default pattern to match URLs can be overridden with the
97} 97}
98 98
99sub matchlist { 99sub matchlist {
100 my ($self) = @_; 100 my ($self) = @_;
101 if ( $self->{showing} ) { 101 if ( $self->{showing} ) {
102 $self->{url_overlay}->hide; 102 $self->{url_overlay}->hide;
103 $self->{showing} = 0; 103 $self->{showing} = 0;
104 return; 104 return;
105 } 105 }
106 @{$self->{urls}} = (); 106 @{$self->{urls}} = ();
107 my $line; 107 my $line;
108 for (my $i = 0; $i < $self->nrow; $i ++) { 108 for (my $i = 0; $i < $self->nrow; $i ++) {
109 $line = $self->line($i); 109 $line = $self->line($i);
110 next if ($line->beg != $i); 110 next if ($line->beg != $i);
111 for my $url ($self->get_urls_from_line($line->t)) { 111 for my $url ($self->get_urls_from_line($line->t)) {
112 if (scalar(@{$self->{urls}}) == 10) { 112 if (scalar(@{$self->{urls}}) == 10) {
113 shift @{$self->{urls}}; 113 shift @{$self->{urls}};
114 } 114 }
115 push @{$self->{urls}}, $url; 115 push @{$self->{urls}}, $url;
116 } 116 }
117 } 117 }
118 118
119 if (! scalar(@{$self->{urls}})) { 119 if (! scalar(@{$self->{urls}})) {
120 return; 120 return;
121 } 121 }
122 122
123 my $max = 0; 123 my $max = 0;
124 my $i = scalar( @{$self->{urls}} ) - 1 ;; 124 my $i = scalar( @{$self->{urls}} ) - 1 ;;
125 125
126 my @temp = (); 126 my @temp = ();
127 127
128 for my $url (@{$self->{urls}}) { 128 for my $url (@{$self->{urls}}) {
129 my $url = "$i-$url"; 129 my $url = "$i-$url";
130 my $xpos = 0; 130 my $xpos = 0;
131 131
132 if ($self->ncol + (length $url) >= $self->ncol) { 132 if ($self->ncol + (length $url) >= $self->ncol) {
133 $url = substr( $url, 0, $self->ncol ); 133 $url = substr( $url, 0, $self->ncol );
134 } 134 }
135 135
136 push @temp, $url; 136 push @temp, $url;
137 137
138 if( length $url > $max ) { 138 if( length $url > $max ) {
139 $max = length $url; 139 $max = length $url;
140 } 140 }
141 141
142 $i--; 142 $i--;
143 } 143 }
144 144
145 @temp = reverse @temp; 145 @temp = reverse @temp;
146 146
147 $self->{url_overlay} = $self->overlay(0, 0, $max, scalar( @temp ), urxvt::OVERLAY_RSTYLE, 2); 147 $self->{url_overlay} = $self->overlay(0, 0, $max, scalar( @temp ), urxvt::OVERLAY_RSTYLE, 2);
148 my $i = 0; 148 my $i = 0;
149 for my $url (@temp) { 149 for my $url (@temp) {
150 $self->{url_overlay}->set( 0, $i, $url, [(urxvt::OVERLAY_RSTYLE) x length $url]); 150 $self->{url_overlay}->set( 0, $i, $url, [(urxvt::OVERLAY_RSTYLE) x length $url]);
151 $self->{showing} = 1; 151 $self->{showing} = 1;
152 $i++; 152 $i++;
153 } 153 }
154 154
155} 155}
156 156
157sub most_recent { 157sub most_recent {
158 my ($self) = shift; 158 my ($self) = shift;
230 230
231sub get_urls_from_line { 231sub get_urls_from_line {
232 my ($self, $line) = @_; 232 my ($self, $line) = @_;
233 my @urls; 233 my @urls;
234 for my $matcher (@{$self->{matchers}}) { 234 for my $matcher (@{$self->{matchers}}) {
235 while ($line =~ /$matcher->[0]/g) { 235 while ($line =~ /$matcher->[0]/g) {
236 push @urls, substr( $line, $-[0], $+[0] - $-[0] ); 236 push @urls, substr( $line, $-[0], $+[0] - $-[0] );
237 } 237 }
238 } 238 }
239 return @urls; 239 return @urls;
240} 240}
241 241
242sub on_line_update { 242sub on_line_update {
330 330
331 if($row == $event->{row} && abs($col-$event->{col}) < 2 331 if($row == $event->{row} && abs($col-$event->{col}) < 2
332 && join("\x00", @$cmd) eq join("\x00", $self->command_for($row,$col))) { 332 && join("\x00", @$cmd) eq join("\x00", $self->command_for($row,$col))) {
333 if($self->valid_button($event)) { 333 if($self->valid_button($event)) {
334 334
335 $self->exec_async (@$cmd); 335 $self->exec_async (@$cmd);
336 336
337 } 337 }
338 } 338 }
339 339
340 1; 340 1;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines