From ecc6b492fb57a865beed7f3f2a555a3aacd5a85f Mon Sep 17 00:00:00 2001 From: Mark Wooding Date: Sun, 25 Jun 2023 00:33:32 +0100 Subject: [PATCH] pldb (list): Add `-w' option to show a window around the group position(s). --- pldb | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/pldb b/pldb index 7f59373..40c67e0 100755 --- a/pldb +++ b/pldb @@ -260,11 +260,11 @@ defcmd "next [-pu] [-o N] [-n N] GROUP [LIST]", sub { defined $prevlist and print "$prevlist\n", map "\t$_\n", @out; }; -defcmd "list [-g [MARK=]GROUP,...] [-r [LO][-[HI]],...] LIST", sub { +defcmd "list [-g [MARK=]GROUP,...] [-r [LO][-[HI]],...] [-w WIN] LIST", sub { local @ARGV = @_; my $bogusp = 0; my %opt; - getopts("g:r:", \%opt) or $bogusp = 1; + getopts("g:r:w:", \%opt) or $bogusp = 1; @ARGV == 1 or $bogusp = 1; if ($bogusp) { bail_usage; } my ($list) = @ARGV; @@ -285,9 +285,10 @@ defcmd "list [-g [MARK=]GROUP,...] [-r [LO][-[HI]],...] LIST", sub { my %pos; my $plen = -1; if (defined $opt{"g"}) { my @g = split /,/, $opt{"g"}; - for (@g) { + GROUP: for (@g) { my ($pre, $g) = /^ (?: (.*?)=)? (.*) $/x; must_group $g; $st_pos->execute($g, $list); my ($pos) = $st_pos->fetchrow_array; + next GROUP unless defined $pos; my $t = $pos{$pos} = (exists $pos{$pos} ? $pos{$pos} . "," : "") . ($pre // (@g == 1 ? "" : $g)); @@ -320,6 +321,12 @@ defcmd "list [-g [MARK=]GROUP,...] [-r [LO][-[HI]],...] LIST", sub { } } + if (defined $opt{"w"}) { + (my $w = $opt{"w"}) =~ /^\d+$/ or die "bad window size `$opt{w}'"; + %pos or die "no positions"; + for my $pos (keys %pos) { push @r, [$pos - $w, $pos + $w + 1] } + } + if (@r) { my ($curr_lo, $curr_hi) = (undef, undef); my @newr; -- 2.11.0