Added new --meta and --meta-width options

The usages are:

  --meta=<TAG>        prepend value of TAG before every line
  --meta-width=<NUM>  force the meta column to be NUM wide
  --meta=<TAG>:<NUM>  shortcut that also applies --meta-width
This commit is contained in:
John Wiegley 2010-03-17 02:20:08 -04:00
parent d7b8095c3d
commit 36b616da5e
2 changed files with 52 additions and 9 deletions

View file

@ -93,6 +93,33 @@ void report_t::normalize_options(const string& verb)
start_of_week = *weekday;
}
long meta_width = -1;
if (! HANDLED(prepend_format_) && HANDLED(meta_)) {
if (! HANDLED(meta_width_)) {
string::size_type i = HANDLER(meta_).str().find(':');
if (i != string::npos) {
HANDLED(meta_width_).on_with
(string("?normalize"),
lexical_cast<long>(string(HANDLER(meta_).str(), i + 1)));
HANDLED(meta_).on(string("?normalize"),
string(HANDLER(meta_).str(), 0, i));
}
}
if (HANDLED(meta_width_)) {
HANDLER(prepend_format_).on
(string("?normalize"),
string("%(justify(truncated(tag(\"") +
HANDLER(meta_).str() + "\"), " +
HANDLED(meta_width_).value.to_string() + " - 1), " +
HANDLED(meta_width_).value.to_string() + "))");
meta_width = HANDLED(meta_width_).value.to_long();
} else {
HANDLER(prepend_format_).on(string("?normalize"), string("%(tag(\"") +
HANDLER(meta_).str() + "\"))");
}
}
if (verb == "print" || verb == "xact" || verb == "dump") {
HANDLER(related).on_only(string("?normalize"));
HANDLER(related_all).on_only(string("?normalize"));
@ -165,6 +192,9 @@ void report_t::normalize_options(const string& verb)
else
cols = 80L;
if (meta_width > 0)
cols -= meta_width;
if (cols > 0) {
DEBUG("auto.columns", "cols = " << cols);
@ -187,11 +217,11 @@ void report_t::normalize_options(const string& verb)
HANDLER(total_width_).value.to_long() :
amount_width);
DEBUG("auto.columns", "date_width = " << date_width);
DEBUG("auto.columns", "payee_width = " << payee_width);
DEBUG("auto.columns", "date_width = " << date_width);
DEBUG("auto.columns", "payee_width = " << payee_width);
DEBUG("auto.columns", "account_width = " << account_width);
DEBUG("auto.columns", "amount_width = " << amount_width);
DEBUG("auto.columns", "total_width = " << total_width);
DEBUG("auto.columns", "amount_width = " << amount_width);
DEBUG("auto.columns", "total_width = " << total_width);
if (! HANDLER(date_width_).specified &&
! HANDLER(payee_width_).specified &&
@ -207,6 +237,8 @@ void report_t::normalize_options(const string& verb)
}
}
if (! HANDLED(meta_width_))
HANDLER(meta_width_).on_with(string("?normalize"), 0L);
if (! HANDLER(date_width_).specified)
HANDLER(date_width_).on_with(string("?normalize"), date_width);
if (! HANDLER(payee_width_).specified)
@ -862,6 +894,8 @@ option_t<report_t> * report_t::lookup_option(const char * p)
case 'm':
OPT(market);
else OPT(monthly);
else OPT(meta_);
else OPT(meta_width_);
break;
case 'n':
OPT_CH(collapse);

View file

@ -264,6 +264,7 @@ public:
HANDLER(lots).report(out);
HANDLER(lots_actual).report(out);
HANDLER(market).report(out);
HANDLER(meta_).report(out);
HANDLER(monthly).report(out);
HANDLER(no_total).report(out);
HANDLER(now_).report(out);
@ -312,6 +313,7 @@ public:
HANDLER(weekly).report(out);
HANDLER(wide).report(out);
HANDLER(yearly).report(out);
HANDLER(meta_width_).report(out);
HANDLER(date_width_).report(out);
HANDLER(payee_width_).report(out);
HANDLER(account_width_).report(out);
@ -619,6 +621,8 @@ public:
.set_expr(string("--market"), "market(total_expr, date, exchange)");
});
OPTION(report_t, meta_);
OPTION_(report_t, monthly, DO() { // -M
parent->HANDLER(period_).on(string("--monthly"), "monthly");
});
@ -776,12 +780,13 @@ public:
" %(ansify_if(justify(truncated(account, account_width, abbrev_len), "
" account_width), blue if color))"
" %(justify(scrub(display_amount), amount_width, "
" 3 + date_width + payee_width + account_width + amount_width, "
" true, color))"
" 3 + meta_width + date_width + payee_width + account_width"
" + amount_width, true, color))"
" %(justify(scrub(display_total), total_width, "
" 4 + date_width + payee_width + account_width + amount_width "
" + total_width, true, color))\n%/"
"%(justify(\" \", 2 + date_width + payee_width))%$3 %$4 %$5\n");
" 4 + meta_width + date_width + payee_width + account_width"
" + amount_width + total_width, true, color))\n%/"
"%(justify(\" \", 2 + date_width + payee_width))"
"%$3 %$4 %$5\n");
});
OPTION(report_t, related); // -r
@ -891,6 +896,10 @@ public:
parent->HANDLER(period_).on(string("--yearly"), "yearly");
});
OPTION__(report_t, meta_width_,
bool specified;
CTOR(report_t, meta_width_) { specified = false; }
DO_(args) { value = args[1].to_long(); specified = true; });
OPTION__(report_t, date_width_,
bool specified;
CTOR(report_t, date_width_) { specified = false; }