mirror of
https://github.com/GothenburgBitFactory/taskshell.git
synced 2025-07-07 20:06:42 +02:00
Merge pull request #45 from ThomasAdam/gh/15
Allow tasksh to process cmdline args
This commit is contained in:
commit
6c80122d18
3 changed files with 64 additions and 26 deletions
2
NEWS
2
NEWS
|
@ -1,7 +1,7 @@
|
|||
|
||||
New Features in tasksh 1.3.0
|
||||
|
||||
-
|
||||
- tasksh passes command-line arguments through to taskwarrior.
|
||||
|
||||
New commands in tasksh 1.3.0
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
tasksh \- Interactive taskwarrior shell
|
||||
|
||||
.SH SYNOPSIS
|
||||
.B tasksh
|
||||
.B tasksh [task commands]...
|
||||
.br
|
||||
.B tasksh --version
|
||||
|
||||
|
@ -18,6 +18,9 @@ When built with libreadline, tasksh provides command editing and history.
|
|||
Tasksh has an integrated 'review' command that leads you through an interactive
|
||||
review session.
|
||||
|
||||
If Tasksh is invoked with command line arguments, those are passed straight
|
||||
through to taskwarrior.
|
||||
|
||||
Tasksh supports all recent versions of Taskwarrior.
|
||||
|
||||
.SH COMMANDS
|
||||
|
|
73
src/main.cpp
73
src/main.cpp
|
@ -93,8 +93,7 @@ const std::string getResponse (const std::string& prompt)
|
|||
return response;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
static int commandLoop (bool autoClear)
|
||||
static const std::string get_response ()
|
||||
{
|
||||
// Compose the prompt.
|
||||
auto prompt = promptCompose ();
|
||||
|
@ -102,6 +101,12 @@ static int commandLoop (bool autoClear)
|
|||
// Display prompt, get input.
|
||||
auto command = getResponse (prompt);
|
||||
|
||||
return command;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
static int commandLoop (std::string command, bool autoClear)
|
||||
{
|
||||
// Obey Taskwarrior's rc.tasksh.autoclear.
|
||||
if (autoClear)
|
||||
std::cout << "\033[2J\033[0;0H";
|
||||
|
@ -144,21 +149,8 @@ static int commandLoop (bool autoClear)
|
|||
return status;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
int main (int argc, const char** argv)
|
||||
static bool should_auto_clear()
|
||||
{
|
||||
int status = 0;
|
||||
|
||||
// Lightweight version checking that doesn't require initialization or any I/O.
|
||||
if (argc == 2 && !strcmp (argv[1], "--version"))
|
||||
{
|
||||
std::cout << VERSION << "\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
try
|
||||
{
|
||||
// Get the Taskwarrior rc.tasksh.autoclear Boolean setting.
|
||||
bool autoClear = false;
|
||||
std::string input;
|
||||
std::string output;
|
||||
|
@ -170,11 +162,55 @@ int main (int argc, const char** argv)
|
|||
output == "yes\n" ||
|
||||
output == "on\n");
|
||||
|
||||
return autoClear;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
int main (int argc, const char** argv)
|
||||
{
|
||||
std::string command = "";
|
||||
int status = 0;
|
||||
|
||||
// Lightweight version checking that doesn't require initialization or any I/O.
|
||||
if (argc == 2 && !strcmp (argv[1], "--version"))
|
||||
{
|
||||
std::cout << VERSION << "\n";
|
||||
|
||||
// Returning -1 drops out of the command loop, but gets translated to 0 here,
|
||||
// so that there is a clean way to exit.
|
||||
return status == -1 ? 0 : status;
|
||||
}
|
||||
|
||||
if (isatty (fileno (stdin)))
|
||||
welcome ();
|
||||
|
||||
while ((status = commandLoop (autoClear)) == 0)
|
||||
;
|
||||
// Process anything given as command-line arguments.
|
||||
if (argc > 1)
|
||||
{
|
||||
try
|
||||
{
|
||||
std::string cmd;
|
||||
for (int i = 1; i < argc; i++)
|
||||
{
|
||||
std::string cmd_str (argv[i]);
|
||||
command += " " + cmd_str;
|
||||
}
|
||||
status = commandLoop (command, should_auto_clear ());
|
||||
}
|
||||
catch (const std::string& error)
|
||||
{
|
||||
std::cerr << error << "\n";
|
||||
status = -1;
|
||||
}
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
while (status == 0)
|
||||
{
|
||||
command = get_response ();
|
||||
status = commandLoop (command, should_auto_clear ());
|
||||
}
|
||||
}
|
||||
|
||||
catch (const std::string& error)
|
||||
|
@ -188,7 +224,6 @@ int main (int argc, const char** argv)
|
|||
std::cerr << "Unknown error." << "\n";
|
||||
status = -2;
|
||||
}
|
||||
}
|
||||
|
||||
// Returning -1 drops out of the command loop, but gets translated to 0 here,
|
||||
// so that there is a clean way to exit.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue