mirror of
https://github.com/GothenburgBitFactory/taskwarrior.git
synced 2025-06-26 10:54:26 +02:00
Clean up annotation details
- changed variable name from annotation.details to annotations - added report.X.annotations - changed values from 2, 1, 0 to full, sparse, none - made reportdateformat available in timesheet
This commit is contained in:
parent
fccd0d6c96
commit
ab86490b37
7 changed files with 63 additions and 30 deletions
|
@ -116,8 +116,10 @@ May be "yes" or "no", and determines whether task will ask for confirmation befo
|
||||||
May be "yes" or "no", and causes task to display the ID and description of any task when you run the start, stop, do, undo or delete commands. The default value is "yes".
|
May be "yes" or "no", and causes task to display the ID and description of any task when you run the start, stop, do, undo or delete commands. The default value is "yes".
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B annotation.details=2
|
.B annotations=full
|
||||||
Controls the output of annotations in reports. Defaults to 2 - all annotations are displayed. Set to 1 only the last (youngest) annotation is displayed and if there are more than one present for a task a "+" sign is added to the description. Set to 0 the output of annotations is disabled and a "+" sign will be added if there are any annotations present.
|
.TP
|
||||||
|
.B report.X.annotations=full
|
||||||
|
Controls the output of annotations in reports. Defaults to full - all annotations are displayed. Set to "sparse" only the last (youngest) annotation is displayed and if there are more than one present for a task a "+" sign is added to the description. Set to "none" the output of annotations is disabled and a "+" sign will be added if there are any annotations present.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B next=2
|
.B next=2
|
||||||
|
@ -470,6 +472,13 @@ it is not set then reportdateformat and dateformat will be used in this order. S
|
||||||
.B DATES
|
.B DATES
|
||||||
section for details on the sequence placeholders.
|
section for details on the sequence placeholders.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.B report.X.annotations
|
||||||
|
GThis adds the possibility to control the output of annotations for a task in a report. See
|
||||||
|
the
|
||||||
|
.B annotations
|
||||||
|
variable for details on the possible values.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B report.X.limit
|
.B report.X.limit
|
||||||
An optional value to a report limiting the number of displayed tasks in the
|
An optional value to a report limiting the number of displayed tasks in the
|
||||||
|
|
|
@ -59,7 +59,7 @@ std::string Config::defaults =
|
||||||
"# Miscellaneous\n"
|
"# Miscellaneous\n"
|
||||||
"confirmation=yes # Confirmation on delete, big changes\n"
|
"confirmation=yes # Confirmation on delete, big changes\n"
|
||||||
"echo.command=yes # Details on command just run\n"
|
"echo.command=yes # Details on command just run\n"
|
||||||
"annotation.details=2 # Level of verbosity for annotations in reports\n"
|
"annotations=full # Level of verbosity for annotations in reports\n"
|
||||||
"next=2 # How many tasks per project in next report\n"
|
"next=2 # How many tasks per project in next report\n"
|
||||||
"bulk=2 # > 2 tasks considered 'a lot', for confirmation\n"
|
"bulk=2 # > 2 tasks considered 'a lot', for confirmation\n"
|
||||||
"nag=You have higher priority tasks. # Nag message to keep you honest\n" // TODO
|
"nag=You have higher priority tasks. # Nag message to keep you honest\n" // TODO
|
||||||
|
@ -153,6 +153,7 @@ std::string Config::defaults =
|
||||||
"report.long.sort=due+,priority-,project+\n"
|
"report.long.sort=due+,priority-,project+\n"
|
||||||
"report.long.filter=status:pending\n"
|
"report.long.filter=status:pending\n"
|
||||||
"#report.long.dateformat=m/d/Y\n"
|
"#report.long.dateformat=m/d/Y\n"
|
||||||
|
"#report.long.annotations=full\n"
|
||||||
"\n"
|
"\n"
|
||||||
"# task list\n"
|
"# task list\n"
|
||||||
"report.list.description=Lists all tasks matching the specified criteria\n"
|
"report.list.description=Lists all tasks matching the specified criteria\n"
|
||||||
|
@ -161,6 +162,7 @@ std::string Config::defaults =
|
||||||
"report.list.sort=due+,priority-,project+\n"
|
"report.list.sort=due+,priority-,project+\n"
|
||||||
"report.list.filter=status:pending\n"
|
"report.list.filter=status:pending\n"
|
||||||
"#report.list.dateformat=m/d/Y\n"
|
"#report.list.dateformat=m/d/Y\n"
|
||||||
|
"#report.list.annotations=full\n"
|
||||||
"\n"
|
"\n"
|
||||||
"# task ls\n"
|
"# task ls\n"
|
||||||
"report.ls.description=Minimal listing of all tasks matching the specified criteria\n"
|
"report.ls.description=Minimal listing of all tasks matching the specified criteria\n"
|
||||||
|
@ -169,6 +171,7 @@ std::string Config::defaults =
|
||||||
"report.ls.sort=priority-,project+\n"
|
"report.ls.sort=priority-,project+\n"
|
||||||
"report.ls.filter=status:pending\n"
|
"report.ls.filter=status:pending\n"
|
||||||
"#report.ls.dateformat=m/d/Y\n"
|
"#report.ls.dateformat=m/d/Y\n"
|
||||||
|
"#report.ls.annotations=full\n"
|
||||||
"\n"
|
"\n"
|
||||||
"# task minimal\n"
|
"# task minimal\n"
|
||||||
"report.minimal.description=A really minimal listing\n"
|
"report.minimal.description=A really minimal listing\n"
|
||||||
|
@ -177,6 +180,7 @@ std::string Config::defaults =
|
||||||
"report.minimal.sort=project+,description+\n"
|
"report.minimal.sort=project+,description+\n"
|
||||||
"report.minimal.filter=status:pending\n"
|
"report.minimal.filter=status:pending\n"
|
||||||
"#report.minimal.dateformat=m/d/Y\n"
|
"#report.minimal.dateformat=m/d/Y\n"
|
||||||
|
"#report.minimal.annotations=full\n"
|
||||||
"\n"
|
"\n"
|
||||||
"# task newest\n"
|
"# task newest\n"
|
||||||
"report.newest.description=Shows the newest tasks\n"
|
"report.newest.description=Shows the newest tasks\n"
|
||||||
|
@ -185,6 +189,7 @@ std::string Config::defaults =
|
||||||
"report.newest.sort=id-\n"
|
"report.newest.sort=id-\n"
|
||||||
"report.newest.filter=status:pending limit:10\n"
|
"report.newest.filter=status:pending limit:10\n"
|
||||||
"#report.newest.dateformat=m/d/Y\n"
|
"#report.newest.dateformat=m/d/Y\n"
|
||||||
|
"#report.newest.annotations=full\n"
|
||||||
"\n"
|
"\n"
|
||||||
"# task oldest\n"
|
"# task oldest\n"
|
||||||
"report.oldest.description=Shows the oldest tasks\n"
|
"report.oldest.description=Shows the oldest tasks\n"
|
||||||
|
@ -193,6 +198,7 @@ std::string Config::defaults =
|
||||||
"report.oldest.sort=id+\n"
|
"report.oldest.sort=id+\n"
|
||||||
"report.oldest.filter=status:pending limit:10\n"
|
"report.oldest.filter=status:pending limit:10\n"
|
||||||
"#report.oldest.dateformat=m/d/Y\n"
|
"#report.oldest.dateformat=m/d/Y\n"
|
||||||
|
"#report.oldest.annotations=full\n"
|
||||||
"\n"
|
"\n"
|
||||||
"# task overdue\n"
|
"# task overdue\n"
|
||||||
"report.overdue.description=Lists overdue tasks matching the specified criteria\n"
|
"report.overdue.description=Lists overdue tasks matching the specified criteria\n"
|
||||||
|
@ -201,6 +207,7 @@ std::string Config::defaults =
|
||||||
"report.overdue.sort=due+,priority-,project+\n"
|
"report.overdue.sort=due+,priority-,project+\n"
|
||||||
"report.overdue.filter=status:pending due.before:today\n"
|
"report.overdue.filter=status:pending due.before:today\n"
|
||||||
"#report.overdue.dateformat=m/d/Y\n"
|
"#report.overdue.dateformat=m/d/Y\n"
|
||||||
|
"#report.overdue.annotations=full\n"
|
||||||
"\n"
|
"\n"
|
||||||
"# task active\n"
|
"# task active\n"
|
||||||
"report.active.description=Lists active tasks matching the specified criteria\n"
|
"report.active.description=Lists active tasks matching the specified criteria\n"
|
||||||
|
@ -209,6 +216,7 @@ std::string Config::defaults =
|
||||||
"report.active.sort=due+,priority-,project+\n"
|
"report.active.sort=due+,priority-,project+\n"
|
||||||
"report.active.filter=status:pending start.any:\n"
|
"report.active.filter=status:pending start.any:\n"
|
||||||
"#report.active.dateformat=m/d/Y\n"
|
"#report.active.dateformat=m/d/Y\n"
|
||||||
|
"#report.active.annotations=full\n"
|
||||||
"\n"
|
"\n"
|
||||||
"# task completed\n"
|
"# task completed\n"
|
||||||
"report.completed.description=Lists completed tasks matching the specified criteria\n"
|
"report.completed.description=Lists completed tasks matching the specified criteria\n"
|
||||||
|
@ -217,6 +225,7 @@ std::string Config::defaults =
|
||||||
"report.completed.sort=end+,priority-,project+\n"
|
"report.completed.sort=end+,priority-,project+\n"
|
||||||
"report.completed.filter=status:completed\n"
|
"report.completed.filter=status:completed\n"
|
||||||
"#report.completed.dateformat=m/d/Y\n"
|
"#report.completed.dateformat=m/d/Y\n"
|
||||||
|
"#report.completed.annotations=full\n"
|
||||||
"\n"
|
"\n"
|
||||||
"# task recurring\n"
|
"# task recurring\n"
|
||||||
"report.recurring.description=Lists recurring tasks matching the specified criteria\n"
|
"report.recurring.description=Lists recurring tasks matching the specified criteria\n"
|
||||||
|
@ -225,6 +234,7 @@ std::string Config::defaults =
|
||||||
"report.recurring.sort=due+,priority-,project+\n"
|
"report.recurring.sort=due+,priority-,project+\n"
|
||||||
"report.recurring.filter=status:pending parent.any:\n"
|
"report.recurring.filter=status:pending parent.any:\n"
|
||||||
"#report.recurring.dateformat=m/d/Y\n"
|
"#report.recurring.dateformat=m/d/Y\n"
|
||||||
|
"#report.recurring.annotations=full\n"
|
||||||
"\n"
|
"\n"
|
||||||
"# task waiting\n"
|
"# task waiting\n"
|
||||||
"report.waiting.description=Lists all waiting tasks matching the specified criteria\n"
|
"report.waiting.description=Lists all waiting tasks matching the specified criteria\n"
|
||||||
|
@ -233,6 +243,7 @@ std::string Config::defaults =
|
||||||
"report.waiting.sort=wait+,priority-,project+\n"
|
"report.waiting.sort=wait+,priority-,project+\n"
|
||||||
"report.waiting.filter=status:waiting\n"
|
"report.waiting.filter=status:waiting\n"
|
||||||
"#report.waiting.dateformat=m/d/Y\n"
|
"#report.waiting.dateformat=m/d/Y\n"
|
||||||
|
"#report.waiting.annotations=full\n"
|
||||||
"\n"
|
"\n"
|
||||||
"# task all\n"
|
"# task all\n"
|
||||||
"report.all.description=Lists all tasks matching the specified criteria\n"
|
"report.all.description=Lists all tasks matching the specified criteria\n"
|
||||||
|
@ -240,6 +251,7 @@ std::string Config::defaults =
|
||||||
"report.all.labels=ID,Project,Pri,Due,Active,Age,Description\n"
|
"report.all.labels=ID,Project,Pri,Due,Active,Age,Description\n"
|
||||||
"report.all.sort=due+,priority-,project+\n"
|
"report.all.sort=due+,priority-,project+\n"
|
||||||
"#report.all.dateformat=m/d/Y\n"
|
"#report.all.dateformat=m/d/Y\n"
|
||||||
|
"#report.all.annotations=full\n"
|
||||||
"\n"
|
"\n"
|
||||||
"# task next\n"
|
"# task next\n"
|
||||||
"report.next.description=Lists the most urgent tasks\n"
|
"report.next.description=Lists the most urgent tasks\n"
|
||||||
|
@ -248,6 +260,7 @@ std::string Config::defaults =
|
||||||
"report.next.sort=due+,priority-,project+\n"
|
"report.next.sort=due+,priority-,project+\n"
|
||||||
"report.next.filter=status:pending\n"
|
"report.next.filter=status:pending\n"
|
||||||
"#report.next.dateformat=m/d/Y\n"
|
"#report.next.dateformat=m/d/Y\n"
|
||||||
|
"#report.next.annotations=full\n"
|
||||||
"\n";
|
"\n";
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -649,7 +649,7 @@ int handleConfig (std::string &outs)
|
||||||
// These are the regular configuration variables.
|
// These are the regular configuration variables.
|
||||||
// Note that there is a leading and trailing space, to make searching easier.
|
// Note that there is a leading and trailing space, to make searching easier.
|
||||||
std::string recognized =
|
std::string recognized =
|
||||||
" annotation.details blanklines bulk calendar.details calendar.details.report color "
|
" annotations blanklines bulk calendar.details calendar.details.report color "
|
||||||
"color.active color.due color.overdue color.pri.H color.pri.L color.pri.M color.pri.none "
|
"color.active color.due color.overdue color.pri.H color.pri.L color.pri.M color.pri.none "
|
||||||
"color.recurring color.tagged color.footnote color.header color.debug color.alternate "
|
"color.recurring color.tagged color.footnote color.header color.debug color.alternate "
|
||||||
"color.calendar.today color.calendar.due color.calendar.overdue color.calendar.weekend "
|
"color.calendar.today color.calendar.due color.calendar.overdue color.calendar.weekend "
|
||||||
|
|
|
@ -464,7 +464,7 @@ int runCustomReport (
|
||||||
|
|
||||||
int row = 0;
|
int row = 0;
|
||||||
foreach (task, tasks)
|
foreach (task, tasks)
|
||||||
table.addCell (row++, columnCount, getFullDescription (*task));
|
table.addCell (row++, columnCount, getFullDescription (*task, report));
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (*col == "recur")
|
else if (*col == "recur")
|
||||||
|
|
|
@ -102,7 +102,7 @@ int handleReportGHistory (std::string &);
|
||||||
int handleReportCalendar (std::string &);
|
int handleReportCalendar (std::string &);
|
||||||
int handleReportStats (std::string &);
|
int handleReportStats (std::string &);
|
||||||
int handleReportTimesheet (std::string &);
|
int handleReportTimesheet (std::string &);
|
||||||
std::string getFullDescription (Task&);
|
std::string getFullDescription (Task&, const std::string&);
|
||||||
std::string getDueDate (Task&, const std::string&);
|
std::string getDueDate (Task&, const std::string&);
|
||||||
|
|
||||||
// custom.cpp
|
// custom.cpp
|
||||||
|
|
|
@ -353,7 +353,7 @@ int handleInfo (std::string &outs)
|
||||||
|
|
||||||
row = table.addRow ();
|
row = table.addRow ();
|
||||||
table.addCell (row, 0, "Description");
|
table.addCell (row, 0, "Description");
|
||||||
table.addCell (row, 1, getFullDescription (*task));
|
table.addCell (row, 1, getFullDescription (*task, "info"));
|
||||||
|
|
||||||
if (task->has ("project"))
|
if (task->has ("project"))
|
||||||
{
|
{
|
||||||
|
@ -1223,9 +1223,12 @@ int handleReportTimesheet (std::string &outs)
|
||||||
if (compDate >= start && compDate < end)
|
if (compDate >= start && compDate < end)
|
||||||
{
|
{
|
||||||
int row = completed.addRow ();
|
int row = completed.addRow ();
|
||||||
|
std::string format = context.config.get ("reportdateformat");
|
||||||
|
if (format == "")
|
||||||
|
format = context.config.get ("dateformat");
|
||||||
completed.addCell (row, 1, task->get ("project"));
|
completed.addCell (row, 1, task->get ("project"));
|
||||||
completed.addCell (row, 2, getDueDate (*task, context.config.get("dateformat")));
|
completed.addCell (row, 2, getDueDate (*task, format));
|
||||||
completed.addCell (row, 3, getFullDescription (*task));
|
completed.addCell (row, 3, getFullDescription (*task, "timesheet"));
|
||||||
|
|
||||||
if (color)
|
if (color)
|
||||||
{
|
{
|
||||||
|
@ -1279,9 +1282,12 @@ int handleReportTimesheet (std::string &outs)
|
||||||
if (startDate >= start && startDate < end)
|
if (startDate >= start && startDate < end)
|
||||||
{
|
{
|
||||||
int row = started.addRow ();
|
int row = started.addRow ();
|
||||||
|
std::string format = context.config.get ("reportdateformat");
|
||||||
|
if (format == "")
|
||||||
|
format = context.config.get ("dateformat");
|
||||||
started.addCell (row, 1, task->get ("project"));
|
started.addCell (row, 1, task->get ("project"));
|
||||||
started.addCell (row, 2, getDueDate (*task, context.config.get ("dateformat")));
|
started.addCell (row, 2, getDueDate (*task, format));
|
||||||
started.addCell (row, 3, getFullDescription (*task));
|
started.addCell (row, 3, getFullDescription (*task, "timesheet"));
|
||||||
|
|
||||||
if (color)
|
if (color)
|
||||||
{
|
{
|
||||||
|
@ -2109,20 +2115,27 @@ void gatherNextTasks (std::vector <Task>& tasks)
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
std::string getFullDescription (Task& task)
|
std::string getFullDescription (Task& task, const std::string& report)
|
||||||
{
|
{
|
||||||
std::string desc = task.get ("description");
|
std::string desc = task.get ("description");
|
||||||
|
std::string annotationDetails;
|
||||||
|
|
||||||
std::vector <Att> annotations;
|
std::vector <Att> annotations;
|
||||||
task.getAnnotations (annotations);
|
task.getAnnotations (annotations);
|
||||||
|
|
||||||
if (annotations.size () != 0)
|
if (annotations.size () != 0)
|
||||||
switch (context.config.getInteger ("annotation.details"))
|
|
||||||
{
|
{
|
||||||
case 0:
|
std::string annotationDetails = context.config.get ("report." + report + ".annotations");
|
||||||
|
if (annotationDetails == "")
|
||||||
|
annotationDetails = context.config.get ("annotations");
|
||||||
|
if (report == "info")
|
||||||
|
annotationDetails = "full";
|
||||||
|
|
||||||
|
if (annotationDetails == "none")
|
||||||
|
{
|
||||||
desc = "+" + desc;
|
desc = "+" + desc;
|
||||||
break;
|
}
|
||||||
case 1:
|
else if (annotationDetails == "sparse")
|
||||||
{
|
{
|
||||||
if (annotations.size () > 1)
|
if (annotations.size () > 1)
|
||||||
desc = "+" + desc;
|
desc = "+" + desc;
|
||||||
|
@ -2131,15 +2144,13 @@ std::string getFullDescription (Task& task)
|
||||||
std::string when = dt.toString (context.config.get ("dateformat"));
|
std::string when = dt.toString (context.config.get ("dateformat"));
|
||||||
desc += "\n" + when + " " + anno.value ();
|
desc += "\n" + when + " " + anno.value ();
|
||||||
}
|
}
|
||||||
break;
|
else
|
||||||
case 2:
|
|
||||||
foreach (anno, annotations)
|
foreach (anno, annotations)
|
||||||
{
|
{
|
||||||
Date dt (atoi (anno->name ().substr (11).c_str ()));
|
Date dt (atoi (anno->name ().substr (11).c_str ()));
|
||||||
std::string when = dt.toString (context.config.get ("dateformat"));
|
std::string when = dt.toString (context.config.get ("dateformat"));
|
||||||
desc += "\n" + when + " " + anno->value ();
|
desc += "\n" + when + " " + anno->value ();
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return desc;
|
return desc;
|
||||||
|
|
|
@ -89,7 +89,7 @@ like ($output, qr/bar1.+\d{1,2}\/\d{1,2}\/\d{4} bar2/ms, 'second annotation task
|
||||||
like ($output, qr/three.+\d{1,2}\/\d{1,2}\/\d{4} baz1/ms,'first annotation task 3');
|
like ($output, qr/three.+\d{1,2}\/\d{1,2}\/\d{4} baz1/ms,'first annotation task 3');
|
||||||
like ($output, qr/4 tasks/, 'count');
|
like ($output, qr/4 tasks/, 'count');
|
||||||
|
|
||||||
$output = qx{../task rc:annotate.rc rc.annotation.details:1 rrr};
|
$output = qx{../task rc:annotate.rc rc.annotations:sparse rrr};
|
||||||
like ($output, qr/1 \+one/, 'task 1');
|
like ($output, qr/1 \+one/, 'task 1');
|
||||||
like ($output, qr/2 \+two/, 'task 2');
|
like ($output, qr/2 \+two/, 'task 2');
|
||||||
like ($output, qr/3 three/, 'task 3');
|
like ($output, qr/3 three/, 'task 3');
|
||||||
|
@ -102,7 +102,7 @@ like ($output, qr/two.+\d{1,2}\/\d{1,2}\/\d{4} bar2/ms, 'second annotation t
|
||||||
like ($output, qr/three.+\d{1,2}\/\d{1,2}\/\d{4} baz1/ms, 'third annotation task 3');
|
like ($output, qr/three.+\d{1,2}\/\d{1,2}\/\d{4} baz1/ms, 'third annotation task 3');
|
||||||
like ($output, qr/4 tasks/, 'count');
|
like ($output, qr/4 tasks/, 'count');
|
||||||
|
|
||||||
$output = qx{../task rc:annotate.rc rc.annotation.details:0 rrr};
|
$output = qx{../task rc:annotate.rc rc.annotations:none rrr};
|
||||||
like ($output, qr/1 \+one/, 'task 1');
|
like ($output, qr/1 \+one/, 'task 1');
|
||||||
like ($output, qr/2 \+two/, 'task 2');
|
like ($output, qr/2 \+two/, 'task 2');
|
||||||
like ($output, qr/3 \+three/, 'task 3');
|
like ($output, qr/3 \+three/, 'task 3');
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue