diff options
author | Anton Khirnov <anton@khirnov.net> | 2021-06-02 12:59:57 +0200 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2021-06-02 12:59:57 +0200 |
commit | b273e76dd1e917bb679974eeec932a76ff98e043 (patch) | |
tree | 75ffd35f258006b69d8bd7e73241f24114bdc7a5 | |
parent | 5cfa00200a3c7aece46122fcd6afc963b747782f (diff) |
Implement git commit hash matching.
-rw-r--r-- | reselect | 27 |
1 files changed, 18 insertions, 9 deletions
@@ -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 { |