X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FLEI.pm;h=a2f8ffe73d735c736ff63314cbd8995f0a032d06;hb=9c55d0015717c198dce748afd97db12eb70586c7;hp=0da244994a1c3a437b7a44a09b77fa2abd24d2f0;hpb=c9ff20cbef45d32e4b46a78f081312543c781428;p=public-inbox.git diff --git a/lib/PublicInbox/LEI.pm b/lib/PublicInbox/LEI.pm index 0da24499..a2f8ffe7 100644 --- a/lib/PublicInbox/LEI.pm +++ b/lib/PublicInbox/LEI.pm @@ -179,6 +179,9 @@ our %CMD = ( # sorted in order of importance/use: qw(stdin| in-format|F=s out-format|f=s output|mfolder|o=s quiet|q lock=s@ kw|keywords|flags! C=s@), ], +'p2q' => [ 'FILE|COMMIT_OID|--stdin', + "use a patch to generate a query for `lei q --stdin'", + qw(stdin| want|w=s@ uri debug) ], 'config' => [ '[...]', sub { 'git-config(1) wrapper for '._config_path($_[0]); }, qw(config-file|system|global|file|f=s), # for conflict detection @@ -238,6 +241,10 @@ my %OPTDESC = ( 'show threads|t' => 'display entire thread a message belongs to', 'q threads|t+' => 'return all messages in the same threads as the actual match(es)', + +'want|w=s@' => [ 'PREFIX|dfpost|dfn', # common ones in help... + 'search prefixes to extract (default: dfpost7)' ], + 'alert=s@' => ['CMD,:WINCH,:bell,', 'run command(s) or perform ops when done writing to output ' . '(default: ":WINCH,:bell" with --mua and Maildir/IMAP output, ' . @@ -331,7 +338,7 @@ my %CONFIG_KEYS = ( 'leistore.dir' => 'top-level storage location', ); -my @WQ_KEYS = qw(lxs l2m imp mrr cnv); # internal workers +my @WQ_KEYS = qw(lxs l2m imp mrr cnv p2q); # internal workers # pronounced "exit": x_it(1 << 8) => exit(1); x_it(13) => SIGPIPE sub x_it ($$) { @@ -673,6 +680,11 @@ sub lei_convert { PublicInbox::LeiConvert->call(@_); } +sub lei_p2q { + require PublicInbox::LeiP2q; + PublicInbox::LeiP2q->call(@_); +} + sub lei_init { my ($self, $dir) = @_; my $cfg = _lei_cfg($self, 1); @@ -854,6 +866,22 @@ sub poke_mua { # forces terminal MUAs to wake up and hopefully notice new mail } } +my %path_to_fd = ('/dev/stdin' => 0, '/dev/stdout' => 1, '/dev/stderr' => 2); +$path_to_fd{"/dev/fd/$_"} = $path_to_fd{"/proc/self/fd/$_"} for (0..2); +sub fopen { + my ($self, $mode, $path) = @_; + rel2abs($self, $path); + $path =~ tr!/!/!s; + if (defined(my $fd = $path_to_fd{$path})) { + return $self->{$fd}; + } + if ($path =~ m!\A/(?:dev|proc/self)/fd/[0-9]+\z!) { + return fail($self, "cannot open $path from daemon"); + } + open my $fh, $mode, $path or return; + $fh; +} + # caller needs to "-t $self->{1}" to check if tty sub start_pager { my ($self) = @_;