aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2021-06-02 10:31:30 +0200
committerAnton Khirnov <anton@khirnov.net>2021-06-02 10:31:30 +0200
commit7d4d615928df9329a207a6cae079479b01f55d57 (patch)
tree4bfa32230ac218e395921c55c9eda99fa0389dc7
parentfb606d51f9cbae3af58e85f272a6ac155081e489 (diff)
Factor out building the overlays.
-rw-r--r--url-picker48
1 files changed, 27 insertions, 21 deletions
diff --git a/url-picker b/url-picker
index 37b2dea..229ab5c 100644
--- a/url-picker
+++ b/url-picker
@@ -38,33 +38,38 @@ sub find_matches {
return @overlays;
}
+sub build_overlays {
+ my ($self, $text, $rowmap) = @_;
+
+ my $label_rend = $self->get_rend("label", urxvt::OVERLAY_RSTYLE);
+ my $num = 0;
+ my $labels = {};
+ my $hrefs = {};
+
+ my @overlays = find_matches($text, $rowmap);
+ @overlays = reverse @overlays if ($self->{descending});
+
+ for my $ov (@overlays) {
+ my ($col, $row, $href) = @$ov;
+ $num++;
+ my $overlay = $self->overlay($col, $row, $self->strwidth($num),
+ 1, $label_rend, 0);
+ $overlay->set(0, 0, $num);
+
+ $labels->{$num} = $overlay;
+ $hrefs->{$num} = $href;
+ }
+
+ return ($num, $labels, $hrefs)
+};
+
sub on_user_command {
my ($self, $cmd) = @_;
if ($cmd =~ s/^url-picker\b//) {
- my $labels = {};
- my $hrefs = {};
my $rowmap = {};
- my $num = 0;
my $row = 0;
my $base_col = 0;
my $text = '';
- my $label_rend = $self->get_rend("label", urxvt::OVERLAY_RSTYLE);
-
- my $label_urls = sub {
- my @overlays = find_matches($text, $rowmap);
-
- @overlays = reverse @overlays if ($self->{descending});
- for my $ov (@overlays) {
- my ($col, $row, $href) = @$ov;
- $num++;
- my $overlay = $self->overlay(
- $col, $row, $self->strwidth($num), 1, $label_rend, 0
- );
- $overlay->set(0,0,$num);
- $labels->{$num} = $overlay;
- $hrefs->{$num} = $href;
- }
- };
my ($brow, $bcol) = $self->selection_beg();
my ($erow, $ecol) = $self->selection_end();
@@ -86,7 +91,8 @@ sub on_user_command {
$rowmap->{$row} = [$start, (length($text)-1)];
}
}
- $label_urls->();
+
+ my ($num, $labels, $hrefs) = build_overlays($self, $text, $rowmap);
if ($num < 1) {
my $desc = $issel ? "in visible selected text" : "on visible screen";