From 6d6b6a5d971decfb9d32752ac882ff56bc33d705 Mon Sep 17 00:00:00 2001 From: Armaan Bhojwani <3fb650a9-b47e-4604-a282-1dd91953b2ee@anonaddy.me> Date: Mon, 26 Oct 2020 16:26:22 -0400 Subject: [PATCH] semi-usable! --- .gitignore | 1 + cmake.h | 2 +- commit.h | 2 +- src/CMakeLists.txt | 2 +- src/diag.cpp | 23 ---- src/libtasksh.a | Bin 153660 -> 109206 bytes src/main.cpp | 24 +--- src/prompt.cpp | 2 +- src/review.cpp.bak | 320 --------------------------------------------- 9 files changed, 6 insertions(+), 370 deletions(-) delete mode 100644 src/review.cpp.bak diff --git a/.gitignore b/.gitignore index 9a787c4..33d0b7a 100644 --- a/.gitignore +++ b/.gitignore @@ -20,6 +20,7 @@ *.so *.dylib *.dll +*.a # Fortran module files *.mod diff --git a/cmake.h b/cmake.h index 53869b8..cf39861 100644 --- a/cmake.h +++ b/cmake.h @@ -39,7 +39,7 @@ /* #undef UNKNOWN */ /* Found the Readline library */ -/* #undef HAVE_READLINE */ +#define HAVE_READLINE /* Found the pthread library */ /* #undef HAVE_LIBPTHREAD */ diff --git a/commit.h b/commit.h index 582da05..e4651c6 100644 --- a/commit.h +++ b/commit.h @@ -1,4 +1,4 @@ /* commit.h.in. Creates commit.h during a cmake run */ /* git information */ -#define COMMIT "eb1e18e" +#define COMMIT "889d7af" diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d9c9d54..188b46b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -26,7 +26,7 @@ add_library (tasksh STATIC ${tasksh_SRCS}) add_library (libshared STATIC ${libshared_SRCS}) add_executable (tasksh_executable main.cpp) -target_link_libraries (tasksh_executable tasksh libshared ${TASKSH_LIBRARIES}) +target_link_libraries (tasksh_executable tasksh libshared ${GEN-SHELL_LIBRARIES}) set_property (TARGET tasksh_executable PROPERTY OUTPUT_NAME "gen-shell") diff --git a/src/diag.cpp b/src/diag.cpp index 3b4e3a9..9cbe9a7 100644 --- a/src/diag.cpp +++ b/src/diag.cpp @@ -135,29 +135,6 @@ int cmdDiagnostics () std::cout << " TASKDATA: " << (env ? env : "") << "\n"; - - // Taskwarrior version + location - std::string path (getenv ("PATH")); - std::cout << " PATH: " << path << "\n"; - - for (const auto& i : split (path, ':')) - { - File task (i + "/task"); - if (task.exists ()) - { - std::string input; - std::string output; - execute ("task", {"--version"}, input, output); - - std::cout << "Taskwarrior: " - << i - << "/task " - << output; // Still has \n - } - } - - std::cout << "\n"; - return 0; } //////////////////////////////////////////////////////////////////////////////// diff --git a/src/libtasksh.a b/src/libtasksh.a index 236d665237477f6c643c820bbb78d438a5692a0d..9162ae6bd7bf66d8ba22bed3f5b7e4a0bc5be727 100644 GIT binary patch delta 7754 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 AdH?_b delta 24694 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 RfC~Xe2_f~6*Q37{^`G+uBwzpl diff --git a/src/main.cpp b/src/main.cpp index bdac934..15523bf 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -39,22 +39,8 @@ #include #endif -// tasksh commands. -int cmdHelp (); -int cmdDiagnostics (); -// int cmdReview (const std::vector &, bool); -int cmdShell (const std::vector &); 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 {""}; @@ -115,14 +101,9 @@ static int commandLoop (bool autoClear) if (args[0] == "") 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); else if (command != "") { - command = "task " + command; + command = "echo " + command + " | lolcat "; std::cout << "[" << command << "]\n"; system (command.c_str ()); @@ -160,9 +141,6 @@ int main (int argc, const char** argv) output == "yes\n" || output == "on\n"); - if (isatty (fileno (stdin))) - welcome (); - while ((status = commandLoop (autoClear)) == 0) ; } diff --git a/src/prompt.cpp b/src/prompt.cpp index 3eb12b2..3d4eca0 100644 --- a/src/prompt.cpp +++ b/src/prompt.cpp @@ -92,7 +92,7 @@ std::string promptCompose () if (decoration.length ()) return "task " + decoration + "> "; - return "tasksh> "; + return ">>>"; } //////////////////////////////////////////////////////////////////////////////// diff --git a/src/review.cpp.bak b/src/review.cpp.bak deleted file mode 100644 index c74dcfa..0000000 --- a/src/review.cpp.bak +++ /dev/null @@ -1,320 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// -// Copyright 2006 - 2017, Paul Beckingham, Federico Hernandez -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -// -// http://www.opensource.org/licenses/mit-license.php -// -//////////////////////////////////////////////////////////////////////////////// - -#include -#include -#include -#include -#include -#include -#include - -#ifdef HAVE_READLINE -#include -#include -#endif - -#include -#include - -#ifdef SOLARIS -#include -#endif - -#include -#include -#include -#include - -std::string getResponse (const std::string&); - -//////////////////////////////////////////////////////////////////////////////// -static unsigned int getWidth () -{ - // Determine window size. -// int width = config.getInteger ("defaultwidth"); - static auto width = 0; - - if (width == 0) - { - unsigned short buff[4]; - if (ioctl (STDOUT_FILENO, TIOCGWINSZ, &buff) != -1) - width = buff[1]; - } - - return width; -} - -//////////////////////////////////////////////////////////////////////////////// -static void editTask (const std::string& uuid) -{ - std::string command = "task rc.confirmation:no rc.verbose:nothing " + uuid + " edit"; - system (command.c_str ()); - - command = "task rc.confirmation:no rc.verbose:nothing " + uuid + " modify reviewed:now"; - system (command.c_str ()); - std::cout << "Modified.\n\n\n\n"; -} - -//////////////////////////////////////////////////////////////////////////////// -static void modifyTask (const std::string& uuid) -{ - Color text ("color15 on gray6"); - std::string modifications; - do - { - modifications = getResponse (text.colorize (" Enter modification args [example: +tag -tag /teh/the/ project:X] ") + " "); - } - while (modifications == ""); - - std::string command = "task rc.confirmation:no rc.verbose:nothing " + uuid + " modify " + modifications; - system (command.c_str ()); - - std::cout << "Modified.\n\n\n\n"; -} - -//////////////////////////////////////////////////////////////////////////////// -static void reviewTask (const std::string& uuid) -{ - std::string command = "task rc.confirmation:no rc.verbose:nothing " + uuid + " modify reviewed:now"; - system (command.c_str ()); - std::cout << "Marked as reviewed.\n\n\n\n"; -} - -//////////////////////////////////////////////////////////////////////////////// -static void completeTask (const std::string& uuid) -{ - std::string command = "task rc.confirmation:no rc.verbose:nothing " + uuid + " done"; - system (command.c_str ()); - std::cout << "Completed.\n\n\n\n"; -} - -//////////////////////////////////////////////////////////////////////////////// -static void deleteTask (const std::string& uuid) -{ - std::string command = "task rc.confirmation:no rc.verbose:nothing " + uuid + " delete"; - system (command.c_str ()); - std::cout << "Deleted.\n\n\n\n"; -} - -//////////////////////////////////////////////////////////////////////////////// -static const std::string reviewNothing () -{ - return "\nThere are no tasks needing review.\n\n"; -} - -//////////////////////////////////////////////////////////////////////////////// -static const std::string reviewStart ( - unsigned int width) -{ - std::string welcome = "The review process is important for keeping your list " - "accurate, so you are working on the right tasks.\n" - "\n" - "For each task you are shown, look at the metadata. " - "Determine whether the task needs to be changed (enter " - "'e' to edit), or whether it is accurate ('enter' or " - "'r' to mark as reviewed). You may skip a task ('s') " - "but a skipped task is not considered reviewed.\n" - "\n" - "You may stop at any time, and resume later right " - "where you left off. See 'man tasksh' for more details."; - - std::vector lines; - wrapText (lines, welcome, width, false); - welcome = join ("\n", lines); - - return "\n" + welcome + "\n\n"; -} - -//////////////////////////////////////////////////////////////////////////////// -static const std::string banner ( - unsigned int current, - unsigned int total, - unsigned int width, - const std::string& message) -{ - std::stringstream progress; - progress << " [" - << current - << " of " - << total - << "] "; - - Color progressColor ("color15 on color9"); - Color descColor ("color15 on gray6"); - - std::string composed; - if (progress.str ().length () + message.length () + 1 < width) - composed = progressColor.colorize (progress.str ()) + - descColor.colorize (" " + message + - std::string (width - progress.str ().length () - message.length () - 1, ' ')); - else - composed = progressColor.colorize (progress.str ()) + - descColor.colorize (" " + message.substr (0, message.length () - 3) + "..."); - - return composed + "\n"; -} - -//////////////////////////////////////////////////////////////////////////////// -static const std::string menu () -{ - return Color ("color15 on gray6").colorize (" (Enter) Mark as reviewed, (s)kip, (e)dit, (m)odify, (c)omplete, (d)elete, (q)uit ") + " "; -} - -//////////////////////////////////////////////////////////////////////////////// -static void reviewLoop (const std::vector & uuids, unsigned int limit, bool autoClear) -{ - auto width = getWidth (); - unsigned int reviewed = 0; - - // If a limit was specified ('review 10'), then it should override the data - // set size, if it is smaller. - unsigned int total = uuids.size (); - if (limit) - total = std::min (total, limit); - - if (total == 0) - { - std::cout << reviewNothing (); - return; - } - - std::cout << reviewStart (width); - - unsigned int current = 0; - while (current < total && - (limit == 0 || reviewed < limit)) - { - // Run 'info' report for task. - auto uuid = uuids[current]; - - // Display banner for this task. - std::string dummy; - std::string description; - execute ("task", - {"_get", uuid + ".description"}, - dummy, - description); - - std::string response; - bool repeat; - do - { - repeat = false; - std::cout << banner (current + 1, total, width, Lexer::trimRight (description, "\n")); - - // Use 'system' to run the command and show the output. - std::string command = "task " + uuid + " information"; - system (command.c_str ()); - - // Display prompt, get input. - response = getResponse (menu ()); - - if (response == "e") { editTask (uuid); } - else if (response == "m") { modifyTask (uuid); repeat = true; } - else if (response == "s") { std::cout << "Skipped\n\n"; ++current; } - else if (response == "c") { completeTask (uuid); ++current; ++reviewed; } - else if (response == "d") { deleteTask (uuid); ++current; ++reviewed; } - else if (response == "") { reviewTask (uuid); ++current; ++reviewed; } - else if (response == "r") { reviewTask (uuid); ++current; ++reviewed; } - else if (response == "q") { break; } - - else - { - std::cout << format ("Command '{1}' is not recognized.", response) << "\n"; - } - - // Note that just hitting yields an empty command, which does - // nothing but advance to the next task. - - if (autoClear) - std::cout << "\033[2J\033[0;0H"; - } - while (repeat); - - if (response == "q") - break; - } - - std::cout << "\n" - << format ("End of review. {1} out of {2} tasks reviewed.", reviewed, total) - << "\n\n"; -} - -//////////////////////////////////////////////////////////////////////////////// -int cmdReview (const std::vector & args, bool autoClear) -{ - // Is there a specified limit? - unsigned int limit = 0; - if (args.size () == 2) - limit = strtol (args[1].c_str (), NULL, 10); - - // Configure 'reviewed' UDA, but only if necessary. - std::string input; - std::string output; - auto status = execute ("task", {"_get", "rc.uda.reviewed.type"}, input, output); - if (status || output != "date\n") - { - if (confirm ("Tasksh needs to define a 'reviewed' UDA of type 'date' for all tasks. Ok to proceed?")) - { - execute ("task", {"rc.confirmation:no", "rc.verbose:nothing", "config", "uda.reviewed.type", "date"}, input, output); - execute ("task", {"rc.confirmation:no", "rc.verbose:nothing", "config", "uda.reviewed.label", "Reviewed"}, input, output); - } - } - - // Configure '_reviewed' report, but only if necessary. - status = execute ("task", {"_get", "rc.report._reviewed.columns"}, input, output); - if (status || output != "uuid\n") - { - if (confirm ("Tasksh needs to define a '_reviewed' report to identify tasks needing review. Ok to proceed?")) - { - execute ("task", {"rc.confirmation:no", "rc.verbose:nothing", "config", "report._reviewed.description", - "Tasksh review report. Adjust the filter to your needs." }, input, output); - execute ("task", {"rc.confirmation:no", "rc.verbose:nothing", "config", "report._reviewed.columns", "uuid" }, input, output); - execute ("task", {"rc.confirmation:no", "rc.verbose:nothing", "config", "report._reviewed.sort", "reviewed+,modified+"}, input, output); - execute ("task", {"rc.confirmation:no", "rc.verbose:nothing", "config", "report._reviewed.filter", - "( reviewed.none: or reviewed.before:now-6days ) and ( +PENDING or +WAITING )" }, input, output); - } - } - - // Obtain a list of UUIDs to review. - status = execute ("task", - { - "rc.color=off", - "rc.detection=off", - "rc._forcecolor=off", - "rc.verbose=nothing", - "_reviewed" - }, - input, output); - - // Review the set of UUIDs. - auto uuids = split (Lexer::trimRight (output, "\n"), '\n'); - reviewLoop (uuids, limit, autoClear); - return 0; -} - -//////////////////////////////////////////////////////////////////////////////// -- 2.39.2