From 7d4d615928df9329a207a6cae079479b01f55d57 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Wed, 2 Jun 2021 10:31:30 +0200 Subject: Factor out building the overlays. --- url-picker | 48 +++++++++++++++++++++++++++--------------------- 1 file 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"; -- cgit v1.2.3