From a7ff9c2b7dfa657138de82cda7d9d36c3773065f Mon Sep 17 00:00:00 2001
From: Ludovic Apvrille <ludovic.apvrille@telecom-paristech.fr>
Date: Wed, 27 Mar 2019 14:25:14 +0100
Subject: [PATCH] Update on history command

---
 src/main/java/cli/History.java     | 23 +++++++++++++++++++----
 src/main/java/cli/Interpreter.java | 26 ++++++++++++++++++++------
 src/main/java/myutil/Terminal.java | 25 +++++++------------------
 3 files changed, 46 insertions(+), 28 deletions(-)

diff --git a/src/main/java/cli/History.java b/src/main/java/cli/History.java
index 6aa501a4d3..575a4c381c 100644
--- a/src/main/java/cli/History.java
+++ b/src/main/java/cli/History.java
@@ -76,16 +76,31 @@ public class History extends Command  {
         return "hi";
     }
 
-    public String getUsage() { return "history"; }
+    public String getUsage() { return "history [command id (optional)]"; }
 
     public String getDescription() {
-        return "Prints all the non empty commands previously executed";
+        return "Prints all the non empty commands previously executed\n" +
+                " If an int arg is povided, the corresponding command is executed";
     }
 
 
     public  String executeCommand(String command, Interpreter interpreter) {
-        TraceManager.addDev("History command");
-        return interpreter.printAllFormerCommands();
+        //TraceManager.addDev("History command:" + command);
+
+        if (command.length() == 0) {
+            return interpreter.printAllFormerCommands();
+        }
+
+        try {
+            Integer indexInfo = new Integer(command);
+            return interpreter.executeFormerCommand(indexInfo);
+        } catch (Exception e) {
+            return "Invalid argument. Must provide an int";
+        }
+
+
+
+
     }
 
     public void fillSubCommands() {
diff --git a/src/main/java/cli/Interpreter.java b/src/main/java/cli/Interpreter.java
index 27921baaa6..e7ccfd1e54 100644
--- a/src/main/java/cli/Interpreter.java
+++ b/src/main/java/cli/Interpreter.java
@@ -87,6 +87,7 @@ public class Interpreter implements Runnable, TerminalProviderInterface  {
     public MainGUI mgui;
     private Vector<String> formerCommands;
     private Terminal term;
+    private int currentLine;
 
 
     public Interpreter(String script, InterpreterOutputInterface printInterface, boolean show) {
@@ -108,10 +109,10 @@ public class Interpreter implements Runnable, TerminalProviderInterface  {
         term.setTerminalProvider(this);
 
         String line;
-        int cptLine = 0;
+        currentLine = 0;
         while ((line = term.getNextCommand()) != null) {
-            executeLine(line, cptLine, false);
-            cptLine ++;
+            executeLine(line, currentLine, false);
+            currentLine++;
         }
     }
 
@@ -140,11 +141,11 @@ public class Interpreter implements Runnable, TerminalProviderInterface  {
 
     public void interpret() {
         Scanner scanner = new Scanner(script);
-        int cptLine = 0;
+        currentLine = 0;
         while (scanner.hasNextLine()) {
             String line = scanner.nextLine();
-            cptLine ++;
-            executeLine(line, cptLine, true);
+            currentLine ++;
+            executeLine(line, currentLine, true);
 
         }
         scanner.close();
@@ -302,6 +303,7 @@ public class Interpreter implements Runnable, TerminalProviderInterface  {
         printInterface.print(s);
     }
 
+    // History
     public String printAllFormerCommands() {
         StringBuffer sb = new StringBuffer("");
         for(int i=0; i<formerCommands.size(); i++) {
@@ -311,6 +313,18 @@ public class Interpreter implements Runnable, TerminalProviderInterface  {
         return null;
     }
 
+    public String executeFormerCommand(int indexOfCommand) {
+        if (indexOfCommand >= formerCommands.size() || (indexOfCommand < 0)) {
+            return "Invalid command index";
+        }
+
+        String formerCommand = formerCommands.get(indexOfCommand);
+        System.out.println("Executing: " + formerCommand);
+        executeLine(formerCommand, currentLine, false);
+
+        return null;
+    }
+
     // Terminal provider interface
     public String getMidPrompt() {
         return "> ";
diff --git a/src/main/java/myutil/Terminal.java b/src/main/java/myutil/Terminal.java
index 9e80f095f2..fa88ef2d50 100644
--- a/src/main/java/myutil/Terminal.java
+++ b/src/main/java/myutil/Terminal.java
@@ -189,6 +189,8 @@ public class Terminal {
 
                // Usual CHAR
                if ((sequence == null) && (val != -1)) {
+
+                   // CR
                    if (val == CR) {
                        cursorPosition = 0;
                        if (currentBuf.length() == 0) {
@@ -196,9 +198,10 @@ public class Terminal {
                            printPrompt(cpt);
                        } else {
                            cpt++;
-                           if (!(os.startsWith("mac"))) {
+
+                           //if (!(os.startsWith("mac"))) {
                                myPrint("\n");
-                           }
+                           //}
                            addToBuffer(currentBuf);
                            return currentBuf;
                        }
@@ -225,7 +228,7 @@ public class Terminal {
                            myPrint("" + x);
                            currentBuf += x;
                        } else {
-                           currentBuf = currentBuf.substring(0,cursorPosition) + x + currentBuf.substring(cursorPosition, currentBuf.length());
+                           currentBuf = currentBuf.substring(0,cursorPosition-1) + x + currentBuf.substring(cursorPosition, currentBuf.length());
                            myPrint("" + x + currentBuf.substring(cursorPosition, currentBuf.length()));
                        }
                        cursorPosition ++;
@@ -272,23 +275,9 @@ public class Terminal {
        //if (os.compareTo("mac") != 0) {
            System.out.print(s);
         //}
-       //System.out.flush();
-   }
-
-   public void printHistory() {
-       int cpt = 1;
-       for(String s: buffer) {
-           System.out.println("" + cpt+ ":" + s);
-           cpt ++;
-       }
+       System.out.flush();
    }
 
-   private void printSequence(String seq) {
-       for(int i=0; i<seq.length(); i++) {
-           System.out.print("" + (int)(seq.charAt(i)) + " ");
-       }
-       System.out.println("");
-   }
 
 
     private String delCurrent(String currentBuf) {
-- 
GitLab