diff --git a/src/main/java/myutil/Terminal.java b/src/main/java/myutil/Terminal.java index bbf7661565ad34e3218bd5324f1a0257c86f4b63..9e80f095f2eaf7a765714bf29670a4a0c5355b80 100644 --- a/src/main/java/myutil/Terminal.java +++ b/src/main/java/myutil/Terminal.java @@ -64,6 +64,7 @@ public class Terminal { private Vector<String> buffer; private int bufferPointer ; + private int cursorPosition; private int promptLength = 0; private int maxbufferSize = MAX_BUFFER_SIZE; private TerminalProviderInterface terminalProvider; @@ -89,12 +90,16 @@ public class Terminal { char x; int val = 0; + cursorPosition = 0; printPrompt(cpt); + String currentBuf = ""; sequence = null; long timeSeq = 0; + + try { while(val != 3) { val = (RawConsoleInput.read(true)); @@ -147,9 +152,26 @@ public class Terminal { myPrint(currentBuf); sequence = null; val = -1; - // DEL - //TraceManager.addDev("DEL"); - } + + + // BACKWARD + } else if ((sequence.charAt(0) == 91) && (sequence.charAt(1) == 68)) { + + //System.out.println("DOWN"); + backward(); + sequence = null; + val = -1; + + // FORWARD + } else if ((sequence.charAt(0) == 91) && (sequence.charAt(1) == 67)) { + + //System.out.println("DOWN"); + forward(currentBuf); + sequence = null; + val = -1; + // DEL + //TraceManager.addDev("DEL"); + } } if ((sequence != null) && (sequence.length() == 3)) { @@ -163,19 +185,20 @@ public class Terminal { //TraceManager.addDev("DEL"); } - } else if ((sequence != null) && (sequence.length() > 4)) { - } // Usual CHAR if ((sequence == null) && (val != -1)) { if (val == CR) { + cursorPosition = 0; if (currentBuf.length() == 0) { myPrint("\n"); printPrompt(cpt); } else { cpt++; - //myPrint("\n"); + if (!(os.startsWith("mac"))) { + myPrint("\n"); + } addToBuffer(currentBuf); return currentBuf; } @@ -185,7 +208,7 @@ public class Terminal { if ((val == BACKSPACE) || (val == DEL)) { currentBuf = del(currentBuf); - //TAB + //TAB } else if (val == TAB) { System.out.println("TAB"); if (terminalProvider != null) { @@ -194,10 +217,18 @@ public class Terminal { printPrompt(cpt); } } + + // Regular character } else if (val >= 32) { //System.out.print("" + x + "(val=" + val + ");"); - myPrint("" + x); - currentBuf += x; + if (cursorPosition == currentBuf.length()) { + myPrint("" + x); + currentBuf += x; + } else { + currentBuf = currentBuf.substring(0,cursorPosition) + x + currentBuf.substring(cursorPosition, currentBuf.length()); + myPrint("" + x + currentBuf.substring(cursorPosition, currentBuf.length())); + } + cursorPosition ++; } } @@ -275,7 +306,23 @@ public class Terminal { public void printPrompt(int cpt) { String p = "" + cpt + "> "; promptLength = p.length(); - System.out.print(p); + System.out.print(p); + } + + private void backward() { + if (cursorPosition == 0) { + return; + } + System.out.print("\033[1D"); + cursorPosition --; + } + + private void forward(String currentBuf) { + if (cursorPosition == currentBuf.length()) { + return ; + } + System.out.print("\033[1C"); + cursorPosition ++; }