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