aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2021-06-03 11:43:06 +0200
committerAnton Khirnov <anton@khirnov.net>2021-06-03 11:43:06 +0200
commite8861cb922b971a8f7d2f2fb7a88efa70b57d42a (patch)
tree829d06e72428290d68d271ceb3a1710c94081782
parentf2dd23b937d0baf787b74b2084d657cda32eb19e (diff)
Store the labels and the matches together in a hash.
-rw-r--r--reselect48
1 files changed, 24 insertions, 24 deletions
diff --git a/reselect b/reselect
index 92d5581..65e7ba8 100644
--- a/reselect
+++ b/reselect
@@ -48,12 +48,12 @@ sub build_overlays {
my $label_rend = $self->get_rend("label", urxvt::OVERLAY_RSTYLE);
my $num = 0;
- my $labels = {};
- my $hrefs = {};
my @overlays = find_matches($pattern, $text, $rowmap);
@overlays = reverse @overlays if ($self->{descending});
+ my $results = {};
+
for my $ov (@overlays) {
my ($col, $row, $href) = @$ov;
$num++;
@@ -61,11 +61,10 @@ sub build_overlays {
1, $label_rend, 0);
$overlay->set(0, 0, $num);
- $labels->{$num} = $overlay;
- $hrefs->{$num} = $href;
+ $results->{$num} = {label => $overlay, match => $href};
}
- return ($num, $labels, $hrefs)
+ return $results;
};
sub on_action {
@@ -108,20 +107,20 @@ sub on_action {
}
}
- my ($num, $labels, $hrefs) = $self->build_overlays($pattern, $text, $rowmap);
+ my $results = $self->build_overlays($pattern, $text, $rowmap);
- if ($num < 1) {
+ if (keys %{$results} < 1) {
my $desc = $issel ? "in visible selected text" : "on visible screen";
$self->status_msg("no matches found $desc");
} else {
my $url_picker = {};
- $url_picker->{prompt} = $self->overlay(
- 0, -1, 8, 1, $self->get_rend("prompt", urxvt::OVERLAY_RSTYLE), 0
- );
- $url_picker->{prompt}->set(0, 0, "Select match:");
- $url_picker->{labels} = $labels;
- $url_picker->{hrefs} = $hrefs;
- $url_picker->{num} = $num;
+
+ my $prompt = "Select match:";
+ $url_picker->{prompt} = $self->overlay(0, -1, length $prompt, 1,
+ $self->get_rend("prompt", urxvt::OVERLAY_RSTYLE), 0);
+ $url_picker->{prompt}->set(0, 0, $prompt);
+
+ $url_picker->{results} = $results;
$url_picker->{buffer} = '';
my ($crow,$ccol) = $self->screen_cur;
$url_picker->{crow} = $crow;
@@ -151,10 +150,10 @@ sub on_key_press {
$self->update($p);
} elsif ($keysym == 0xff0d) { # CR
my $num = $p->{buffer};
- my $hrefs = $p->{hrefs};
- if (($num > 0) && ($num <= $p->{num})) {
- my $href = $hrefs->{$num};
- $self->launch($href);
+ my $results = $p->{results};
+ if (exists $results->{$num}) {
+ my $match = $results->{$num}->{match};
+ $self->launch($match);
}
}
return 1;
@@ -169,17 +168,18 @@ sub update {
);
$p->{typing}->set(0,0,$p->{buffer});
my $ndx = 0;
- my $labels = $p->{labels};
- my $hrefs = $p->{hrefs};
+ my $results = $p->{results};
+ my $size = keys %{$results};
my $len = length($p->{buffer});
- my $size = $p->{num};
my @matches;
while (++$ndx <= $size) {
- my $overlay = $labels->{$ndx};
+ my $result = $results->{$ndx};
+ my $overlay = $result->{label};
+
if (($len == 0) ||
- (($len <= length($ndx)) && (substr($ndx,0,$len) eq $p->{buffer}))) {
+ (($len <= length($ndx)) && (substr($ndx,0,$len) eq $p->{buffer}))) {
$overlay->show;
- unshift @matches,$hrefs->{$ndx};
+ unshift @matches, $result->{match};
} else {
$overlay->hide;
}