]> git.armaanb.net Git - gen-shell.git/blobdiff - src/main.cpp
added more CLI options!
[gen-shell.git] / src / main.cpp
index 1e8f1d2496742a2a8b2bc9919d4a8d40e0e58b7c..a570cdd792821bfee3f38891b4a2f919c4d41f19 100644 (file)
@@ -26,6 +26,8 @@
 
 #include <cmake.h>
 #include <iostream>
+#include <vector>
+#include <string>
 #include <../Sarge/src/sarge.h>
 #include <stdlib.h>
 
 ////////////////////////////////////////////////////////////////////////////////
 
 using namespace std;
-std::string promptCompose();
+
+static std::vector <std::string> 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;
+}
+
+////////////////////////////////////////////////////////////////////////////////
 
 const std::string getResponse(const std::string & prompt) {
   std::string response {
     ""
   };
 
-  // Display prompt, get input.
+  // Display prompt, get input
   #ifdef HAVE_READLINE
   char * line_read = readline(prompt.c_str());
   if (!line_read) {
     std::cout << "\n";
     response = "<EOF>";
   } else {
-    // Save history.
+    // Save history
     if ( * line_read)
       add_history(line_read);
 
@@ -78,10 +104,13 @@ int main(int argc, char** argv)
   // Command line arguments
   Sarge sarge;
 
+       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("c", "cmd", "Command to execute before entering the shell", true);
-       sarge.setDescription("Make a shell from any command");
-       sarge.setUsage("gen-shell <options> <command>");
+       sarge.setArgument("p", "prompt", "Define a custom prompt", true);
+       sarge.setDescription("Make a shell from any executable");
+       sarge.setUsage("gen-shell <options>");
 
        if (!sarge.parseArguments(argc, argv)) {
                std::cerr << "Couldn't parse arguments..." << std::endl;
@@ -93,23 +122,40 @@ int main(int argc, char** argv)
     return 0;
        }
 
+  // define input command
   string arg_cmd;
-  sarge.getFlag("cmd", arg_cmd);
+  sarge.getFlag("command", arg_cmd);
   arg_cmd += " ";
 
+  // define prompt
+  string prompt = "";
+  sarge.getFlag("prompt", prompt);
+
+  if ( prompt == "" )
+    prompt = "% ";
+  else
+    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.
+    // Display prompt, get input
     auto command = getResponse(prompt);
 
     if (command != "")
     {
-      // Dispatch command.
+      // Dispatch command
       if (command == "<EOF>")
       {
+        system (after_command.c_str ());
         return 0;
       }
       else if (command != "")