From 7381166453ea76bef14403feb662d1e8bfccd209 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sun, 19 Sep 2021 12:50:28 +0000 Subject: lei ls-mail-source: pretty JSON support As with other commands, we enable pretty JSON by default if stdout is a terminal or if --pretty is specified. While the ->pretty JSON output has excessive vertical whitespace, too many lines is preferable to having everything on one line. --- lib/PublicInbox/LEI.pm | 2 +- lib/PublicInbox/LeiLsMailSource.pm | 19 ++++++++++--------- 2 files changed, 11 insertions(+), 10 deletions(-) (limited to 'lib/PublicInbox') diff --git a/lib/PublicInbox/LEI.pm b/lib/PublicInbox/LEI.pm index def85ef1..b468a32c 100644 --- a/lib/PublicInbox/LEI.pm +++ b/lib/PublicInbox/LEI.pm @@ -214,7 +214,7 @@ our %CMD = ( # sorted in order of importance/use: 'ls-mail-sync' => [ '[FILTER]', 'list mail sync folders', qw(z|0 globoff|g invert-match|v local remote), @c_opt ], 'ls-mail-source' => [ 'URL', 'list IMAP or NNTP mail source folders', - qw(z|0 ascii l url), @c_opt ], + qw(z|0 ascii l pretty url), @c_opt ], 'forget-external' => [ 'LOCATION...|--prune', 'exclude further results from a publicinbox|extindex', qw(prune), @c_opt ], diff --git a/lib/PublicInbox/LeiLsMailSource.pm b/lib/PublicInbox/LeiLsMailSource.pm index a2e75e94..2265969a 100644 --- a/lib/PublicInbox/LeiLsMailSource.pm +++ b/lib/PublicInbox/LeiLsMailSource.pm @@ -12,15 +12,9 @@ use parent qw(PublicInbox::IPC PublicInbox::LeiInput); sub input_path_url { # overrides LeiInput version my ($self, $url) = @_; # TODO: support ndjson and other JSONs we support elsewhere - my $json; my $lei = $self->{lei}; - my $ORS = "\n"; - if ($self->{lei}->{opt}->{l}) { - $json = ref(PublicInbox::Config->json)->new->utf8->canonical; - $json->ascii(1) if $lei->{opt}->{ascii}; - } elsif ($self->{lei}->{opt}->{z}) { - $ORS = "\0"; - } + my $json = $lei->{json}; + my $ORS = $self->{lei}->{opt}->{z} ? "\0" : "\n"; my @f; if ($url =~ m!\Aimaps?://!i) { my $uri = PublicInbox::URIimap->new($url); @@ -93,7 +87,14 @@ sub lei_ls_mail_source { my $self = bless { pfx => $pfx, -ls_ok => 1 }, __PACKAGE__; $self->{cfg} = $lei->_lei_cfg; # may be undef $self->prepare_inputs($lei, [ $url ]) or return; - $lei->start_pager if -t $lei->{1}; + my $isatty = -t $lei->{1}; + if ($lei->{opt}->{l}) { + my $json = ref(PublicInbox::Config->json)->new->utf8->canonical; + $lei->{json} = $json; + $json->ascii(1) if $lei->{opt}->{ascii}; + $json->pretty(1)->indent(2) if $isatty || $lei->{opt}->{pretty}; + } + $lei->start_pager if $isatty; my $ops = {}; $lei->{auth}->op_merge($ops, $self); (my $op_c, $ops) = $lei->workers_start($self, 1, $ops); -- cgit v1.2.3-24-ge0c7