gnuplot is supported again (-j and -J)

This commit is contained in:
John Wiegley 2004-08-12 20:20:30 -04:00
parent 7610aec86d
commit 71e8d50657
3 changed files with 43 additions and 9 deletions

28
NEWS
View file

@ -3,8 +3,8 @@
* 2.0 * 2.0
- The code base has been rewritten for clarity and consistency. The - The code base was rewritten for clarity and consistency. It is now
code is now simpler, more robust, and a fair bit faster. simpler, more robust, and faster.
- The most significant feature addition in this version is the use of - The most significant feature addition in this version is the use of
"value expressions". These are now used in many places to indicate "value expressions". These are now used in many places to indicate
@ -22,9 +22,33 @@
"-f" flag was seen (i.e., if the LEDGER environment variable is "-f" flag was seen (i.e., if the LEDGER environment variable is
used). used).
- New "-o FILE" option will output data to the given FILE. If FILE is
"-", the output is the same as the default (stdout).
- New -j and -J options replace the old -G (gnuplot) option. -j
reports the values column in a way gnuplot can consume, and -J
reports the totals column. An example can be found in
scripts/report.
- New "-y DATEFMT" options will change the date format used throughout - New "-y DATEFMT" options will change the date format used throughout
ledger. The default is "%Y/%m/%d". ledger. The default is "%Y/%m/%d".
- New -Y and -W options prints yearly and weekly subtotals, just as
the -M option printed monthly subtotals in the previous version.
- New "-z INTERVAL" allows for more flexible interval reporting. The
sublanguage used will probably mature over time, but for now it
supports expression like:
monthly
every week
every 3 quarters
weekly from 12/20
Note that when using the "from" date, this does not constrain the
report. It is only used for aligning report dates, for example if
you wish weekly reporting to start on Sundays.
- Regexps specified after the command name now apply to account names - Regexps specified after the command name now apply to account names
only. To search on a payee, use "--" to separate the two kinds of only. To search on a payee, use "--" to separate the two kinds of
regexps. For example, to find a payee named "John" within all regexps. For example, to find a payee named "John" within all

14
main.cc
View file

@ -15,6 +15,8 @@ static const std::string bal_fmt = "%20T %2_%-n\n";
static const std::string reg_fmt static const std::string reg_fmt
= "%D %-.20P %-.22N %12.66t %12.80T\n\ = "%D %-.20P %-.22N %12.66t %12.80T\n\
%/ %-.22N %12.66t %12.80T\n"; %/ %-.22N %12.66t %12.80T\n";
static const std::string plot_value_fmt = "%D %t\n";
static const std::string plot_total_fmt = "%D %T\n";
static const std::string print_fmt static const std::string print_fmt
= "\n%D %X%C%P\n %-34N %12o\n%/ %-34N %12o\n"; = "\n%D %X%C%P\n %-34N %12o\n%/ %-34N %12o\n";
static const std::string equity_fmt static const std::string equity_fmt
@ -219,7 +221,7 @@ int main(int argc, char * argv[])
int c, index; int c, index;
while (-1 != while (-1 !=
(c = getopt(argc, argv, (c = getopt(argc, argv,
"+ABb:Ccd:DEe:F:f:Ghi:L:l:MnOo:P:p:QRrS:sT:t:UVvWXYy:Zz:"))) { "+ABb:Ccd:DEe:F:f:Ghi:JjL:l:MnOo:P:p:QRrS:sT:t:UVvWXYy:Zz:"))) {
switch (char(c)) { switch (char(c)) {
// Basic options // Basic options
case 'h': case 'h':
@ -435,6 +437,16 @@ int main(int argc, char * argv[])
total_expr = "MD(MT/(1+(((t-d)/(30*86400))<0?0:((t-d)/(30*86400)))))"; total_expr = "MD(MT/(1+(((t-d)/(30*86400))<0?0:((t-d)/(30*86400)))))";
break; break;
case 'j':
value_expr = "S" + value_expr;
format_string = plot_value_fmt;
break;
case 'J':
total_expr = "S" + total_expr;
format_string = plot_total_fmt;
break;
default: default:
assert(0); assert(0);
break; break;

View file

@ -1,17 +1,15 @@
#!/bin/sh #!/bin/bash
args=("$@")
last=${args[`expr ${#args} - 3`]}
cd /tmp cd /tmp
ledger "$@" | stripreg > $last ledger -j reg "$@" > report
gnuplot <<EOF gnuplot <<EOF
set terminal png set terminal png
set output "report.png" set output "report.png"
set xdata time set xdata time
set timefmt "%Y/%m/%d" set timefmt "%Y/%m/%d"
plot "$1" using 1:2 with linespoints plot "report" using 1:2 with linespoints
EOF EOF
rm -f report
open report.png open report.png