mirror of
https://github.com/GothenburgBitFactory/taskwarrior.git
synced 2025-07-07 20:06:36 +02:00
Enhancement - added echo of id, description
- Added an echo of the ID and description of the task for the start, stop, do, undo, delete and undelete commands. Thanks to Bruce Dillahunty. - Updated documentation. - Added "echo.command=no" to delete.t, undo.t because the default value is "yes", which breaks tests. - Fixed syntax errors in utf8.t - Corrected expected number of tests in recur.t
This commit is contained in:
parent
ca933d7f39
commit
f790df24c5
9 changed files with 69 additions and 16 deletions
|
@ -9,6 +9,9 @@
|
||||||
+ UTF8 text is now supported in task project names, tags and descriptions.
|
+ UTF8 text is now supported in task project names, tags and descriptions.
|
||||||
+ Fixed bug that caused the y/n confirmation on task deletion to ignore the
|
+ Fixed bug that caused the y/n confirmation on task deletion to ignore the
|
||||||
Enter key and fail to re-prompt (thanks to Bruce Dillahunty).
|
Enter key and fail to re-prompt (thanks to Bruce Dillahunty).
|
||||||
|
+ Added support for the "echo.command" configuration variable that displays
|
||||||
|
the task affected by the start, stop, do, undo, delete and undelete
|
||||||
|
commands (thanks to Bruce Dillahunty).
|
||||||
|
|
||||||
------ old releases ------------------------------
|
------ old releases ------------------------------
|
||||||
|
|
||||||
|
|
|
@ -58,6 +58,13 @@
|
||||||
confirmation before deleting a task.
|
confirmation before deleting a task.
|
||||||
</dd>
|
</dd>
|
||||||
|
|
||||||
|
<dt>echo.command</dt>
|
||||||
|
<dd>
|
||||||
|
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,
|
||||||
|
delete and undelete commands. The default value is "yes".
|
||||||
|
</dd>
|
||||||
|
|
||||||
<dt>nag</dt>
|
<dt>nag</dt>
|
||||||
<dd>
|
<dd>
|
||||||
This may be a string of text, or blank. It is used as a prompt
|
This may be a string of text, or blank. It is used as a prompt
|
||||||
|
|
|
@ -105,6 +105,9 @@
|
||||||
<li>UTF8 text is now supported in task project names, tags and descriptions.
|
<li>UTF8 text is now supported in task project names, tags and descriptions.
|
||||||
<li>Fixed bug that caused the y/n confirmation on task deletion to ignore the
|
<li>Fixed bug that caused the y/n confirmation on task deletion to ignore the
|
||||||
Enter key and fail to re-prompt (thanks to Bruce Dillahunty).
|
Enter key and fail to re-prompt (thanks to Bruce Dillahunty).
|
||||||
|
<li>Added support for the "echo.command" configuration variable that displays
|
||||||
|
the task affected by the start, stop, do, undo, delete and undelete
|
||||||
|
commands (thanks to Bruce Dillahunty).
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
|
|
|
@ -140,6 +140,7 @@ void Config::createDefault (const std::string& home)
|
||||||
{
|
{
|
||||||
fprintf (out, "data.location=%s\n", dataDir.c_str ());
|
fprintf (out, "data.location=%s\n", dataDir.c_str ());
|
||||||
fprintf (out, "confirmation=yes\n");
|
fprintf (out, "confirmation=yes\n");
|
||||||
|
fprintf (out, "echo.command=yes\n");
|
||||||
fprintf (out, "next=2\n");
|
fprintf (out, "next=2\n");
|
||||||
fprintf (out, "dateformat=m/d/Y\n");
|
fprintf (out, "dateformat=m/d/Y\n");
|
||||||
fprintf (out, "#monthsperline=2\n");
|
fprintf (out, "#monthsperline=2\n");
|
||||||
|
|
|
@ -432,6 +432,8 @@ std::string handleVersion (Config& conf)
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
std::string handleDelete (TDB& tdb, T& task, Config& conf)
|
std::string handleDelete (TDB& tdb, T& task, Config& conf)
|
||||||
{
|
{
|
||||||
|
std::stringstream out;
|
||||||
|
|
||||||
if (conf.get ("confirmation") != "yes" || confirm ("Permanently delete task?"))
|
if (conf.get ("confirmation") != "yes" || confirm ("Permanently delete task?"))
|
||||||
{
|
{
|
||||||
std::vector <T> all;
|
std::vector <T> all;
|
||||||
|
@ -450,11 +452,19 @@ std::string handleDelete (TDB& tdb, T& task, Config& conf)
|
||||||
// Scan all pending tasks for siblings of this task, and the parent
|
// Scan all pending tasks for siblings of this task, and the parent
|
||||||
// itself, and delete them.
|
// itself, and delete them.
|
||||||
foreach (sibling, all)
|
foreach (sibling, all)
|
||||||
|
{
|
||||||
if (sibling->getAttribute ("parent") == parent ||
|
if (sibling->getAttribute ("parent") == parent ||
|
||||||
sibling->getUUID () == parent)
|
sibling->getUUID () == parent)
|
||||||
|
{
|
||||||
tdb.deleteT (*sibling);
|
tdb.deleteT (*sibling);
|
||||||
|
if (conf.get ("echo.command", true))
|
||||||
return std::string ("");
|
out << "Deleting recurring task "
|
||||||
|
<< sibling->getId ()
|
||||||
|
<< " "
|
||||||
|
<< sibling->getDescription ()
|
||||||
|
<< std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -462,20 +472,32 @@ std::string handleDelete (TDB& tdb, T& task, Config& conf)
|
||||||
t->setStatus (T::deleted);
|
t->setStatus (T::deleted);
|
||||||
updateRecurrenceMask (tdb, all, *t);
|
updateRecurrenceMask (tdb, all, *t);
|
||||||
tdb.deleteT (*t);
|
tdb.deleteT (*t);
|
||||||
return std::string ("");
|
out << "Deleting recurring task "
|
||||||
|
<< t->getId ()
|
||||||
|
<< " "
|
||||||
|
<< t->getDescription ()
|
||||||
|
<< std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
tdb.deleteT (*t);
|
tdb.deleteT (*t);
|
||||||
|
if (conf.get ("echo.command", true))
|
||||||
|
out << "Deleting task "
|
||||||
|
<< t->getId ()
|
||||||
|
<< " "
|
||||||
|
<< t->getDescription ()
|
||||||
|
<< std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
break; // No point continuing the loop.
|
break; // No point continuing the loop.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return std::string ("Task not deleted.\n");
|
out << "Task not deleted." << std::endl;
|
||||||
|
|
||||||
return std::string ("");
|
return out.str ();
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -490,6 +512,7 @@ std::string handleStart (TDB& tdb, T& task, Config& conf)
|
||||||
if (it->getId () == task.getId ())
|
if (it->getId () == task.getId ())
|
||||||
{
|
{
|
||||||
T original (*it);
|
T original (*it);
|
||||||
|
std::stringstream out;
|
||||||
|
|
||||||
if (original.getAttribute ("start") == "")
|
if (original.getAttribute ("start") == "")
|
||||||
{
|
{
|
||||||
|
@ -500,15 +523,20 @@ std::string handleStart (TDB& tdb, T& task, Config& conf)
|
||||||
original.setId (task.getId ());
|
original.setId (task.getId ());
|
||||||
tdb.modifyT (original);
|
tdb.modifyT (original);
|
||||||
|
|
||||||
|
if (conf.get ("echo.command", true))
|
||||||
|
out << "Started "
|
||||||
|
<< original.getId ()
|
||||||
|
<< " "
|
||||||
|
<< original.getDescription ()
|
||||||
|
<< std::endl;
|
||||||
nag (tdb, task, conf);
|
nag (tdb, task, conf);
|
||||||
return std::string ("");
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
std::stringstream out;
|
|
||||||
out << "Task " << task.getId () << " already started." << std::endl;
|
out << "Task " << task.getId () << " already started." << std::endl;
|
||||||
return out.str ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return out.str ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -528,6 +556,7 @@ std::string handleStop (TDB& tdb, T& task, Config& conf)
|
||||||
if (it->getId () == task.getId ())
|
if (it->getId () == task.getId ())
|
||||||
{
|
{
|
||||||
T original (*it);
|
T original (*it);
|
||||||
|
std::stringstream out;
|
||||||
|
|
||||||
if (original.getAttribute ("start") != "")
|
if (original.getAttribute ("start") != "")
|
||||||
{
|
{
|
||||||
|
@ -535,14 +564,15 @@ std::string handleStop (TDB& tdb, T& task, Config& conf)
|
||||||
original.setId (task.getId ());
|
original.setId (task.getId ());
|
||||||
tdb.modifyT (original);
|
tdb.modifyT (original);
|
||||||
|
|
||||||
return std::string ("");
|
if (conf.get ("echo.command", true))
|
||||||
|
out << "Stopped " << original.getId () << " " << original.getDescription () << std::endl;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
std::stringstream out;
|
|
||||||
out << "Task " << task.getId () << " not started." << std::endl;
|
out << "Task " << task.getId () << " not started." << std::endl;
|
||||||
return out.str ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return out.str ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -565,6 +595,13 @@ std::string handleDone (TDB& tdb, T& task, Config& conf)
|
||||||
{
|
{
|
||||||
if (t->getId () == task.getId ())
|
if (t->getId () == task.getId ())
|
||||||
{
|
{
|
||||||
|
if (conf.get ("echo.command", true))
|
||||||
|
out << "Completed "
|
||||||
|
<< t->getId ()
|
||||||
|
<< " "
|
||||||
|
<< t->getDescription ()
|
||||||
|
<< std::endl;
|
||||||
|
|
||||||
t->setStatus (T::completed);
|
t->setStatus (T::completed);
|
||||||
updateRecurrenceMask (tdb, all, *t);
|
updateRecurrenceMask (tdb, all, *t);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -33,7 +33,8 @@ use Test::More tests => 16;
|
||||||
# Create the rc file.
|
# Create the rc file.
|
||||||
if (open my $fh, '>', 'undelete.rc')
|
if (open my $fh, '>', 'undelete.rc')
|
||||||
{
|
{
|
||||||
print $fh "data.location=.\n";
|
print $fh "data.location=.\n",
|
||||||
|
"echo.command=no\n";
|
||||||
close $fh;
|
close $fh;
|
||||||
ok (-r 'undelete.rc', 'Created undelete.rc');
|
ok (-r 'undelete.rc', 'Created undelete.rc');
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use Test::More tests => 6;
|
use Test::More tests => 5;
|
||||||
|
|
||||||
# Create the rc file.
|
# Create the rc file.
|
||||||
if (open my $fh, '>', 'recur.rc')
|
if (open my $fh, '>', 'recur.rc')
|
||||||
|
|
|
@ -33,7 +33,8 @@ use Test::More tests => 15;
|
||||||
# Create the rc file.
|
# Create the rc file.
|
||||||
if (open my $fh, '>', 'undo.rc')
|
if (open my $fh, '>', 'undo.rc')
|
||||||
{
|
{
|
||||||
print $fh "data.location=.\n";
|
print $fh "data.location=.\n",
|
||||||
|
"echo.command=no\n";
|
||||||
close $fh;
|
close $fh;
|
||||||
ok (-r 'undo.rc', 'Created undo.rc');
|
ok (-r 'undo.rc', 'Created undo.rc');
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,11 +62,11 @@ diag ($output);
|
||||||
like ($output, qr/17/, 'all 17 tasks shown');
|
like ($output, qr/17/, 'all 17 tasks shown');
|
||||||
|
|
||||||
qx{../task rc:utf8.rc add project:Çirçös utf8 in project};
|
qx{../task rc:utf8.rc add project:Çirçös utf8 in project};
|
||||||
my $output = qx{../task rc:utf8.rc ls project:Çirçös};
|
$output = qx{../task rc:utf8.rc ls project:Çirçös};
|
||||||
like ($output, qr/Çirçös.+utf8 in project/, 'utf8 in project works');
|
like ($output, qr/Çirçös.+utf8 in project/, 'utf8 in project works');
|
||||||
|
|
||||||
qx{../task rc:utf8.rc add utf8 in tag +☺};
|
qx{../task rc:utf8.rc add utf8 in tag +☺};
|
||||||
my $output = qx{../task rc:utf8.rc ls +☺};
|
$output = qx{../task rc:utf8.rc ls +☺};
|
||||||
like ($output, qr/utf8 in tag/, 'utf8 in tag works');
|
like ($output, qr/utf8 in tag/, 'utf8 in tag works');
|
||||||
|
|
||||||
# Cleanup.
|
# Cleanup.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue