Interactive command-Line client using daemon.
This commit is contained in:
parent
e1857dc63f
commit
ce4c406fe6
1 changed files with 57 additions and 0 deletions
57
bean-query-cli.plx
Executable file
57
bean-query-cli.plx
Executable file
|
@ -0,0 +1,57 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Term::ReadLine;
|
||||
use Term::ReadKey;
|
||||
use File::Spec::Functions;
|
||||
use IPC::Shareable;
|
||||
|
||||
require 'bean-query-daemon-lib.pl';
|
||||
|
||||
my $term = new Term::ReadLine 'bean-query-d';
|
||||
my $prompt = 'bqd> ';
|
||||
|
||||
my $dir = $ENV{HOME};
|
||||
$dir = "~$ENV{USER}" if not defined $dir and defined $ENV{USER};
|
||||
$dir = "~$ENV{LOGNAME}" if not defined $dir and defined $ENV{LOGNAME};
|
||||
|
||||
my $pager = $ENV{PAGER} || '/usr/bin/less';
|
||||
my ($isPaging, $saveOut) = (0, undef);
|
||||
sub startpage {
|
||||
return if $isPaging;
|
||||
open($saveOut, '>&', STDOUT);
|
||||
open(STDOUT, "|-", $pager);
|
||||
$isPaging = 1;
|
||||
}
|
||||
sub endpage {
|
||||
return unless $isPaging;
|
||||
close(STDOUT);
|
||||
open(STDOUT, '>&', $saveOut);
|
||||
$isPaging = 0;
|
||||
}
|
||||
BeancountQueryInitialize();
|
||||
|
||||
my $histfile = catfile($dir, '.bean-shell-history');
|
||||
$term->ReadHistory($histfile);
|
||||
|
||||
my $cmd = "";
|
||||
while ( (defined ($cmd = $term->readline($prompt))) and $cmd ne 'exit') {
|
||||
next if $cmd =~ /^\s*$/;
|
||||
chomp $cmd;
|
||||
$term->AddHistory($cmd);
|
||||
$term->WriteHistory($histfile);
|
||||
|
||||
my $fileName = BeancountQuerySubmit($cmd, 'text', 1);
|
||||
open(my $fh, "<", $fileName);
|
||||
my($beanOutput, $lineCount) = ("", 0);
|
||||
my($wchar, $hchar, $wpixels, $hpixels) = GetTerminalSize();
|
||||
while (my $line = <$fh>) { $beanOutput .= $line; $lineCount++; print STDERR ".";}
|
||||
close $fh;
|
||||
BeancountQueryComplete();
|
||||
startpage() if ($lineCount >= $hchar);
|
||||
print $beanOutput;
|
||||
endpage();
|
||||
}
|
||||
print "\n";
|
Loading…
Reference in a new issue