From b273e76dd1e917bb679974eeec932a76ff98e043 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Wed, 2 Jun 2021 12:59:57 +0200 Subject: Implement git commit hash matching. --- reselect | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/reselect b/reselect index 1a9dc5b..f841784 100644 --- a/reselect +++ b/reselect @@ -12,11 +12,13 @@ my $re_url = )+ }x; +my $re_git_hash = qr{\b[0-9a-f]{7,40}\b}x; + sub find_matches { - my ($text, $rowmap) = @_; + my ($pattern, $text, $rowmap) = @_; my @overlays; - while ($text =~ /$re_url/g) { + while ($text =~ /$pattern/g) { my $ndx = $-[0]; my $href = $&; my $col = 0; @@ -39,14 +41,14 @@ sub find_matches { } sub build_overlays { - my ($self, $text, $rowmap) = @_; + my ($self, $pattern, $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); + my @overlays = find_matches($pattern, $text, $rowmap); @overlays = reverse @overlays if ($self->{descending}); for my $ov (@overlays) { @@ -63,9 +65,18 @@ sub build_overlays { return ($num, $labels, $hrefs) }; -sub on_user_command { +sub on_action { my ($self, $cmd) = @_; - if ($cmd =~ s/^reselect\b//) { + + my $pattern; + if ($cmd eq 'url') { + $pattern = $re_url; + } elsif ($cmd eq 'git_hash') { + $pattern = $re_git_hash; + } else { + return; + } + my $rowmap = {}; my $row = 0; my $base_col = 0; @@ -92,7 +103,7 @@ sub on_user_command { } } - my ($num, $labels, $hrefs) = $self->build_overlays($text, $rowmap); + my ($num, $labels, $hrefs) = $self->build_overlays($pattern, $text, $rowmap); if ($num < 1) { my $desc = $issel ? "in visible selected text" : "on visible screen"; @@ -113,8 +124,6 @@ sub on_user_command { $self->{url_picker} = $url_picker; $self->update($url_picker); } - } - () } sub on_key_press { -- cgit v1.2.3