mirror of
https://github.com/GothenburgBitFactory/taskwarrior.git
synced 2025-06-26 10:54:26 +02:00
parent
6a7e741b02
commit
2181c48eb7
5 changed files with 237 additions and 16 deletions
|
@ -31,6 +31,7 @@ typeset -g _task_cmds _task_projects _task_tags _task_config _task_modifiers
|
|||
_task_projects=($(task _projects))
|
||||
_task_tags=($(task _tags))
|
||||
_task_ids=($(task _ids))
|
||||
_task_zshids=( ${(f)"$(task _zshids)"} )
|
||||
_task_config=($(task _config))
|
||||
_task_modifiers=(
|
||||
'before' \
|
||||
|
@ -47,17 +48,35 @@ _task_modifiers=(
|
|||
'noword'
|
||||
)
|
||||
_task_cmds=($(task _commands))
|
||||
_task_zshcmds=( ${(f)"$(task _zshcommands)"} )
|
||||
|
||||
# concat zshcmds and zshids
|
||||
_task_cmds_ids=($_task_zshcmds $_task_zshids)
|
||||
|
||||
_task_idCmds=(
|
||||
'append' \
|
||||
'prepend' \
|
||||
'annotate' \
|
||||
'denotate' \
|
||||
'edit' \
|
||||
'duplicate' \
|
||||
'info' \
|
||||
'start' \
|
||||
'stop' \
|
||||
'done'
|
||||
'append:Appends more description to an existing task.' \
|
||||
'prepend:Prepends more description to an existing task.' \
|
||||
'annotate:Adds an annotation to an existing task.' \
|
||||
'denotate:Deletes an annotation of an existing task.' \
|
||||
'edit:Launches an editor to let you modify a task directly.' \
|
||||
'duplicate:Duplicates the specified task, and allows modifications.' \
|
||||
'info:Shows all data, metadata for specified task.' \
|
||||
'start:Marks specified task as started.' \
|
||||
'stop:Removes the start time from a task.' \
|
||||
'done:Marks the specified task as completed.'
|
||||
)
|
||||
|
||||
_task_idCmdsDesc=(
|
||||
'append:Appends more description to an existing task.' \
|
||||
'prepend:Prepends more description to an existing task.' \
|
||||
'annotate:Adds an annotation to an existing task.' \
|
||||
'denotate:Deletes an annotation of an existing task.' \
|
||||
'edit:Launches an editor to let you modify a task directly.' \
|
||||
'duplicate:Duplicates the specified task, and allows modifications.' \
|
||||
'info:Shows all data, metadata for specified task.' \
|
||||
'start:Marks specified task as started.' \
|
||||
'stop:Removes the start time from a task.' \
|
||||
'done:Marks the specified task as completed.'
|
||||
)
|
||||
|
||||
_task() {
|
||||
|
@ -190,7 +209,7 @@ _task_default() {
|
|||
(( $+functions[_task_id] )) ||
|
||||
_task_id() {
|
||||
if (( CURRENT < 3 )); then
|
||||
_describe -t ids 'task IDs' _task_ids
|
||||
_describe -t ids 'task IDs' _task_zshids
|
||||
else
|
||||
_task_attributes "$@"
|
||||
fi
|
||||
|
@ -205,7 +224,7 @@ _task_merge() {
|
|||
# modify (task [0-9]* ...) completion
|
||||
(( $+functions[_task_modify] )) ||
|
||||
_task_modify() {
|
||||
_describe -t commands 'task command' _task_idCmds
|
||||
_describe -t commands 'task command' _task_idCmdsDesc
|
||||
_task_attributes "$@"
|
||||
}
|
||||
|
||||
|
@ -214,11 +233,11 @@ _task_modify() {
|
|||
_task_commands() {
|
||||
local cmd ret=1
|
||||
if (( CURRENT == 1 )); then
|
||||
# TODO add descriptions (assoz array)
|
||||
_describe -t commands 'task command' _task_cmds
|
||||
#TODO fix descriptions
|
||||
|
||||
_describe -t commands 'task command' _task_cmds_ids
|
||||
# TODO match more than one ID
|
||||
_describe -t ids 'task IDs' _task_ids
|
||||
# TODO sorting
|
||||
# TODO sorting (ids below commands)
|
||||
elif [[ $words[1] =~ ^[0-9]*$ ]] then
|
||||
_call_function ret _task_modify
|
||||
return ret
|
||||
|
|
|
@ -136,6 +136,8 @@ void Cmd::load ()
|
|||
commands.push_back ("_version");
|
||||
commands.push_back ("_urgency");
|
||||
commands.push_back ("_query");
|
||||
commands.push_back ("_zshcommands");
|
||||
commands.push_back ("_zshids");
|
||||
commands.push_back ("export.csv");
|
||||
commands.push_back ("export.ical");
|
||||
commands.push_back ("export.yaml");
|
||||
|
@ -243,6 +245,8 @@ bool Cmd::isReadOnlyCommand ()
|
|||
command == "_version" ||
|
||||
command == "_urgency" ||
|
||||
command == "_query" ||
|
||||
command == "_zshcommands" ||
|
||||
command == "_zshids" ||
|
||||
command == "export.csv" ||
|
||||
command == "export.ical" ||
|
||||
command == "export.yaml" ||
|
||||
|
|
|
@ -260,6 +260,8 @@ int Context::dispatch (std::string &out)
|
|||
else if (cmd.command == "_version") { rc = handleCompletionVersion (out); }
|
||||
else if (cmd.command == "_urgency") { rc = handleUrgency (out); }
|
||||
else if (cmd.command == "_query") { rc = handleQuery (out); }
|
||||
else if (cmd.command == "_zshcommands") { rc = handleZshCompletionCommands (out); }
|
||||
else if (cmd.command == "_zshids") { rc = handleZshCompletionIDs (out); }
|
||||
else if (cmd.command == "" &&
|
||||
sequence.size ()) { rc = handleModify (out); }
|
||||
|
||||
|
|
194
src/command.cpp
194
src/command.cpp
|
@ -618,6 +618,199 @@ int handleCompletionIDs (std::string& outs)
|
|||
return 0;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
int handleZshCompletionIDs (std::string& outs)
|
||||
{
|
||||
std::vector <Task> tasks;
|
||||
context.tdb.lock (context.config.getBoolean ("locking"));
|
||||
Filter filter;
|
||||
context.tdb.loadPending (tasks, filter);
|
||||
context.tdb.commit ();
|
||||
context.tdb.unlock ();
|
||||
|
||||
std::stringstream out;
|
||||
foreach (task, tasks) {
|
||||
if (task->getStatus () != Task::deleted &&
|
||||
task->getStatus () != Task::completed) {
|
||||
out << task->id << ":" << task->get("description") << "\n";
|
||||
}
|
||||
}
|
||||
|
||||
outs = out.str ();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
int handleZshCompletionCommands (std::string& outs)
|
||||
{
|
||||
// Get a list of all commands.
|
||||
std::vector <std::string> commands;
|
||||
context.cmd.allCommands (commands);
|
||||
|
||||
// Sort alphabetically.
|
||||
std::sort (commands.begin (), commands.end ());
|
||||
|
||||
std::stringstream out;
|
||||
foreach (command, commands) {
|
||||
out << *command << ":";
|
||||
|
||||
if (*command == "add") {
|
||||
out << "Adds a new task.";
|
||||
}
|
||||
else if (*command == "log") {
|
||||
out << "Adds a new task that is already completed.";
|
||||
}
|
||||
else if (*command == "append") {
|
||||
out << "Appends more description to an existing task.";
|
||||
}
|
||||
else if (*command == "prepend") {
|
||||
out << "Prepends more description to an existing task.";
|
||||
}
|
||||
else if (*command == "annotate") {
|
||||
out << "Adds an annotation to an existing task.";
|
||||
}
|
||||
else if (*command == "denotate") {
|
||||
out << "Deletes an annotation of an existing task.";
|
||||
}
|
||||
else if (*command == "edit") {
|
||||
out << "Launches an editor to let you modify a task directly.";
|
||||
}
|
||||
else if (*command == "undo") {
|
||||
out << "Reverts the most recent action.";
|
||||
}
|
||||
else if (*command == "shell") {
|
||||
out << "Launches an interactive shell.";
|
||||
}
|
||||
else if (*command == "duplicate") {
|
||||
out << "Duplicates the specified task, and allows modifications.";
|
||||
}
|
||||
else if (*command == "delete") {
|
||||
out << "Deletes the specified task.";
|
||||
}
|
||||
else if (*command == "info") {
|
||||
out << "Shows all data, metadata for specified task.";
|
||||
}
|
||||
else if (*command == "start") {
|
||||
out << "Marks specified task as started.";
|
||||
}
|
||||
else if (*command == "stop") {
|
||||
out << "Removes the 'start' time from a task.";
|
||||
}
|
||||
else if (*command == "done") {
|
||||
out << "Marks the specified task as completed.";
|
||||
}
|
||||
else if (*command == "projects") {
|
||||
out << "Shows a list of all project names used.";
|
||||
}
|
||||
else if (*command == "tags") {
|
||||
out << "Shows a list of all tags used.";
|
||||
}
|
||||
else if (*command == "summary") {
|
||||
out << "Shows a report of task status by project.";
|
||||
}
|
||||
else if (*command == "timesheet") {
|
||||
out << "Shows a weekly report of tasks completed and started.";
|
||||
}
|
||||
else if (*command == "history") {
|
||||
out << "Alias to history.monthly.";
|
||||
}
|
||||
else if (*command == "history.monthly") {
|
||||
out << "Shows a report of task history, by month.";
|
||||
}
|
||||
else if (*command == "history.annual") {
|
||||
out << "Shows a report of task history, by year.";
|
||||
}
|
||||
else if (*command == "ghistory") {
|
||||
out << "Alias to ghistory.monthly.";
|
||||
}
|
||||
else if (*command == "ghistory.monthly") {
|
||||
out << "Shows a graphical report of task history, by month.";
|
||||
}
|
||||
else if (*command == "ghistory.annual") {
|
||||
out << "Shows a graphical report of task history, by year.";
|
||||
}
|
||||
else if (*command == "burndown") {
|
||||
out << "Alias to burndown.weekly.";
|
||||
}
|
||||
else if (*command == "burndown.daily") {
|
||||
out << "Shows a graphical burndown chart, by day.";
|
||||
}
|
||||
else if (*command == "burndown.weekly") {
|
||||
out << "Shows a graphical burndown chart, by week.";
|
||||
}
|
||||
else if (*command == "burndown.monthly") {
|
||||
out << "Shows a graphical burndown chart, by month.";
|
||||
}
|
||||
else if (*command == "calendar") {
|
||||
out << "Shows a calendar, with due tasks marked.";
|
||||
}
|
||||
else if (*command == "stats") {
|
||||
out << "Shows task database statistics.";
|
||||
}
|
||||
else if (*command == "import") {
|
||||
out << "Imports tasks from a variety of formats.";
|
||||
}
|
||||
else if (*command == "export") {
|
||||
out << "Alias to export.csv.";
|
||||
}
|
||||
else if (*command == "export.csv") {
|
||||
out << "Lists all tasks in CSV format.";
|
||||
}
|
||||
else if (*command == "export.ical") {
|
||||
out << "Lists all tasks in iCalendar format.";
|
||||
}
|
||||
else if (*command == "export.vcalendar") {
|
||||
out << "Lists all tasks in vCalendar format.";
|
||||
}
|
||||
else if (*command == "export.yaml") {
|
||||
out << "Lists all tasks in YAML format.";
|
||||
}
|
||||
else if (*command == "merge") {
|
||||
out << "Merges the specified database with the local database.";
|
||||
}
|
||||
else if (*command == "push") {
|
||||
out << "Pushed the local database to the specified URI.";
|
||||
}
|
||||
else if (*command == "pull") {
|
||||
out << "Overwrites the local database with that found at the URI.";
|
||||
}
|
||||
else if (*command == "colors") {
|
||||
out << "Displays all possible colors or a named sample [legend | sample].";
|
||||
}
|
||||
else if (*command == "count") {
|
||||
out << "Shows only the number of matching tasks.";
|
||||
}
|
||||
else if (*command == "version") {
|
||||
out << "Shows the task version number.";
|
||||
}
|
||||
else if (*command == "show") {
|
||||
out << "Shows the entire task configuration variables.";
|
||||
}
|
||||
else if (*command == "config") {
|
||||
out << "Add, modify and remove settings in the task configuration.";
|
||||
}
|
||||
else if (*command == "diagnostics") {
|
||||
out << "Information needed when reporting a problem.";
|
||||
}
|
||||
else if (*command == "help") {
|
||||
out << "Shows the long usage text.";
|
||||
}
|
||||
else if (*command == "rm") {
|
||||
out << "Alias to delete.";
|
||||
}
|
||||
else {
|
||||
// try to interpret this as custom report
|
||||
out << context.config.get (std::string ("report." + *command + ".description"));
|
||||
}
|
||||
|
||||
out << "\n";
|
||||
}
|
||||
|
||||
outs = out.str ();
|
||||
return 0;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
void handleUndo ()
|
||||
{
|
||||
|
@ -2739,3 +2932,4 @@ int deltaSubstitutions (Task& task)
|
|||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// vim: ts=2 sw=2 et
|
||||
|
|
|
@ -69,6 +69,8 @@ int handleCompletionConfig (std::string&);
|
|||
int handleCompletionVersion (std::string&);
|
||||
int handleUrgency (std::string&);
|
||||
int handleQuery (std::string&);
|
||||
int handleZshCompletionCommands (std::string&);
|
||||
int handleZshCompletionIDs (std::string&);
|
||||
int handleVersion (std::string&);
|
||||
int handleConfig (std::string&);
|
||||
int handleShow (std::string&);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue