diff --git a/ChangeLog b/ChangeLog index a5769fbbb..886690b6e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -5,6 +5,7 @@ Features + #1492 task show to display default values when appropriate (thanks to Renato Alves). + #1501 info report streamlining - partially implemented. + + TW-197 New virtual tag READY. + TW-255 'Mask' instead of 'iMask' shown in info report (thanks to Benjamin Weber) + TW-261 Easy to create "not deletable" task (thanks to Jan Kunder). diff --git a/NEWS b/NEWS index f607c2135..dbb4d52b3 100644 --- a/NEWS +++ b/NEWS @@ -5,7 +5,7 @@ New Features in taskwarrior 2.4.0 - Removed deprecated commands 'push', 'pull' and 'merge'. - Portuguese (por-PRT) localization. - Better handling for deletion of recurring tasks. - - New virtual tags: YESTERDAY, TOMORROW. + - New virtual tags: YESTERDAY, TOMORROW, READY. New commands in taskwarrior 2.4.0 diff --git a/doc/man/task.1.in b/doc/man/task.1.in index 192a982c7..c7840819d 100644 --- a/doc/man/task.1.in +++ b/doc/man/task.1.in @@ -582,6 +582,7 @@ are: OVERDUE Matches if the task is overdue ACTIVE Matches if the task is started SCHEDULED Matches if the task is scheduled + READY Matches if the task is actionable PARENT Matches if the task is a parent CHILD Matches if the task has a parent UNTIL Matches if the task expires diff --git a/src/Task.cpp b/src/Task.cpp index 85c77344c..dbf612c37 100644 --- a/src/Task.cpp +++ b/src/Task.cpp @@ -324,6 +324,17 @@ void Task::setStatus (Task::status status) } #ifdef PRODUCT_TASKWARRIOR +//////////////////////////////////////////////////////////////////////////////// +// Ready means pending, not blocked and either not scheduled or scheduled before +// now. +bool Task::is_ready () const +{ + return getStatus () == Task::pending && + !is_blocked && + (! has ("scheduled") || + Date ("now").operator> (get_date ("scheduled"))); +} + //////////////////////////////////////////////////////////////////////////////// bool Task::is_due () const { @@ -1114,6 +1125,7 @@ bool Task::hasTag (const std::string& tag) const if (tag == "UNBLOCKED") return !is_blocked; if (tag == "BLOCKING") return is_blocking; #ifdef PRODUCT_TASKWARRIOR + if (tag == "READY") return is_ready (); if (tag == "DUE") return is_due (); if (tag == "DUETODAY") return is_duetoday (); if (tag == "TODAY") return is_duetoday (); diff --git a/src/Task.h b/src/Task.h index a431c4aa3..74372968a 100644 --- a/src/Task.h +++ b/src/Task.h @@ -103,6 +103,7 @@ public: void remove (const std::string&); #ifdef PRODUCT_TASKWARRIOR + bool is_ready () const; bool is_due () const; bool is_dueyesterday () const; bool is_duetoday () const;