Zsh completion

- added features #585 and #586
This commit is contained in:
Johannes Schlatow 2011-01-04 21:57:15 +01:00
parent 6a7e741b02
commit 2181c48eb7
5 changed files with 237 additions and 16 deletions

View file

@ -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