#include <cstdio>
#include <stdlib.h>
#include <unistd.h>
-#include <shared.h>
#ifdef HAVE_READLINE
#include <readline/readline.h>
#include <readline/history.h>
#endif
-// tasksh commands.
-int cmdHelp ();
-int cmdDiagnostics ();
-// int cmdReview (const std::vector <std::string>&, bool);
-int cmdShell (const std::vector <std::string>&);
std::string promptCompose ();
-std::string findTaskwarrior ();
-////////////////////////////////////////////////////////////////////////////////
-static void welcome ()
-{
- std::cout << PACKAGE_STRING << "\n";
- cmdHelp ();
-}
-
-////////////////////////////////////////////////////////////////////////////////
const std::string getResponse (const std::string& prompt)
{
std::string response {""};
// Display prompt, get input.
auto command = getResponse (prompt);
- // Obey Taskwarrior's rc.tasksh.autoclear.
if (autoClear)
std::cout << "\033[2J\033[0;0H";
}
else if (command != "")
{
- auto args = split (command, ' ');
-
// Dispatch command.
- if (args[0] == "<EOF>") status = -1;
- else if (closeEnough ("exit", args[0], 3)) status = -1;
- else if (closeEnough ("quit", args[0], 3)) status = -1;
- else if (closeEnough ("help", args[0], 3)) status = cmdHelp ();
- else if (closeEnough ("diagnostics", args[0], 3)) status = cmdDiagnostics ();
- // else if (closeEnough ("review", args[0], 3)) status = cmdReview (args, autoClear);
- else if (closeEnough ("exec", args[0], 3) ||
- args[0][0] == '!') status = cmdShell (args);
+ if (command == "<EOF>") status = -1;
else if (command != "")
{
- command = "task " + command;
+ command = command;
std::cout << "[" << command << "]\n";
system (command.c_str ());
-
- // Deliberately ignoreѕ taskwarrior exit status, otherwise empty filters
- // cause the shell to terminate.
}
}
{
try
{
- // Get the Taskwarrior rc.tasksh.autoclear Boolean setting.
bool autoClear = false;
std::string input;
std::string output;
- execute ("task", {"_get", "rc.tasksh.autoclear"}, input, output);
- output = lowerCase (output);
autoClear = (output == "true\n" ||
output == "1\n" ||
output == "y\n" ||
output == "yes\n" ||
output == "on\n");
- if (isatty (fileno (stdin)))
- welcome ();
-
while ((status = commandLoop (autoClear)) == 0)
;
}