aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2021-06-02 12:59:57 +0200
committerAnton Khirnov <anton@khirnov.net>2021-06-02 12:59:57 +0200
commitb273e76dd1e917bb679974eeec932a76ff98e043 (patch)
tree75ffd35f258006b69d8bd7e73241f24114bdc7a5
parent5cfa00200a3c7aece46122fcd6afc963b747782f (diff)
Implement git commit hash matching.
-rw-r--r--reselect27
1 files 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 {