X-Git-Url: https://git.armaanb.net/?p=gen-shell.git;a=blobdiff_plain;f=src%2Fmain.cpp;h=0d7a03412413b4ec790c1f64b06d8442df1d2c8d;hp=3d0e2c65d6d3c9e5fed8eadc22a129743b3f9328;hb=cc55b39b55f9906bf5364c8f69d9c87ae928400c;hpb=23462855da29a6a5cde4110e7dc339d96fa36e45 diff --git a/src/main.cpp b/src/main.cpp index 3d0e2c6..0d7a034 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -26,50 +26,17 @@ #include #include -#include -#include #include <../Sarge/src/sarge.h> #include #ifdef HAVE_READLINE -#include -#include + #include + #include #endif //////////////////////////////////////////////////////////////////////////////// using namespace std; -std::string promptCompose(); - -static std::vector contexts; -std::string composeContexts (bool pretty = false); - -int promptClear () -{ - contexts.clear (); - return 0; -} - -int promptRemove () -{ - if (contexts.size ()) - contexts.pop_back (); - - return 0; -} - -int promptAdd (const std::string& context) -{ - contexts.push_back (context); - return 0; -} - -std::string promptCompose () -{ - return "% "; -} - -//////////////////////////////////////////////////////////////////////////////// const std::string getResponse(const std::string & prompt) { std::string response { @@ -110,10 +77,14 @@ int main(int argc, char** argv) // Command line arguments Sarge sarge; - sarge.setArgument("h", "help", "Get help.", false); - sarge.setArgument("c", "cmd", "Command to execute before entering the shell", true); - sarge.setDescription("Make a shell from any command"); - sarge.setUsage("gen-shell "); + sarge.setArgument("a", "after", "Command to execute before leaving the shell", true); + sarge.setArgument("b", "before", "Command to execute before entering the shell", true); + sarge.setArgument("c", "command", "Command to convert to shell", true); + sarge.setArgument("h", "help", "Get help.", false); + sarge.setArgument("p", "prompt", "Define a custom prompt", true); + sarge.setArgument("", "no-space", "Dont automatically add spaces after custom prompt and command", false); + sarge.setDescription("Make a shell from any executable"); + sarge.setUsage("gen-shell "); if (!sarge.parseArguments(argc, argv)) { std::cerr << "Couldn't parse arguments..." << std::endl; @@ -125,15 +96,37 @@ int main(int argc, char** argv) return 0; } + bool space; + if (sarge.exists("no-space")) { + space = false; + } + + // Define input command string arg_cmd; - sarge.getFlag("cmd", arg_cmd); - arg_cmd += " "; + sarge.getFlag("command", arg_cmd); + if ( space ) + arg_cmd += " "; + + // Define prompt + string prompt = ""; + sarge.getFlag("prompt", prompt); + + if ( prompt == "" ) + prompt = "% "; + if ( space ) + prompt += " "; + + // Execute before-command + string before_command; + sarge.getFlag("before", before_command); + system (before_command.c_str ()); + + // Execute after-command + string after_command; + sarge.getFlag("after", after_command); // Main program while (true) { - // Compose the prompt - auto prompt = promptCompose(); - // Display prompt, get input auto command = getResponse(prompt); @@ -142,6 +135,7 @@ int main(int argc, char** argv) // Dispatch command if (command == "") { + system (after_command.c_str ()); return 0; } else if (command != "")