Changeset 533 for kraken-core
- Timestamp:
- 01/22/10 20:00:59 (6 months ago)
- Location:
- kraken-core
- Files:
-
- 7 modified
-
pom.xml (modified) (2 diffs)
-
src/main/java/org/krakenapps/console/ConsoleController.java (modified) (9 diffs)
-
src/main/java/org/krakenapps/console/ConsoleHandler.java (modified) (1 diff)
-
src/main/java/org/krakenapps/console/ConsoleHistoryManager.java (modified) (2 diffs)
-
src/main/java/org/krakenapps/console/TelnetArrowKeyHandler.java (modified) (1 diff)
-
src/main/java/org/krakenapps/console/TelnetStateMachine.java (modified) (3 diffs)
-
src/main/java/org/krakenapps/script/batch/BatchScript.java (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
kraken-core/pom.xml
r479 r533 9 9 </parent> 10 10 <artifactId>kraken-core</artifactId> 11 <version>1. 2.0</version>11 <version>1.3.0</version> 12 12 <name>Kraken Core</name> 13 13 <packaging>jar</packaging> … … 30 30 <groupId>org.krakenapps</groupId> 31 31 <artifactId>kraken-api</artifactId> 32 <version>1. 2.0</version>32 <version>1.3.0</version> 33 33 </dependency> 34 34 <dependency> -
kraken-core/src/main/java/org/krakenapps/console/ConsoleController.java
r464 r533 21 21 22 22 import org.apache.mina.core.session.IoSession; 23 import org.krakenapps.ansicode.CursorPosCode; 23 24 import org.krakenapps.ansicode.EraseLineCode; 25 import org.krakenapps.ansicode.MoveCode; 24 26 import org.krakenapps.ansicode.MoveToCode; 25 27 import org.krakenapps.ansicode.EraseLineCode.Option; … … 34 36 private ConsoleAutoComplete autoComplete; 35 37 38 private int cursorPos; 39 36 40 public ConsoleController(IoSession session, ConsoleAutoComplete autoComplete) { 37 41 this.session = session; 38 42 dataList = new LinkedList<String>(); 43 setCursorPos(0); 39 44 this.autoComplete = autoComplete; 40 45 } … … 42 47 public void addCharacter(String character) { 43 48 if (character.length() > 0 && (character.getBytes()[0] == (byte) 127 || character.getBytes()[0] == (byte) 8)) { 44 eraseCharacter(character); 49 eraseCharacter(character, false); 50 try { 51 throw new Exception("asdf"); 52 } catch (Exception e) { 53 // TODO Auto-generated catch block 54 e.printStackTrace(); 55 } 45 56 } else if (character.equals("\t")) { 46 57 String input = peekLine(); 47 58 doAutoCompletion(input); 48 59 } else if (character.equals("\n")) { 49 dataList.add(character);50 60 hasLine = true; 51 61 52 if (isEchoOn()) 62 if (isEchoOn()) { 63 dataList.addLast("\r"); 64 dataList.addLast(character); 65 session.write(new EraseLineCode(Option.CursorToEnd)); 66 Iterator<String> i = dataList.listIterator(cursorPos); 67 while (i.hasNext()) 68 session.write(i.next()); 69 } 70 } else { 71 if (character.equals("\r")) 72 return; 73 dataList.add(cursorPos, character); 74 increaseCursorPos(); 75 if (isEchoOn()) { 76 session.write(new EraseLineCode(Option.CursorToEnd)); 53 77 session.write(character); 54 } else { 55 dataList.add(character); 56 if (isEchoOn()) 57 session.write(character); 78 session.write(new CursorPosCode(CursorPosCode.Option.Save)); 79 Iterator<String> i = dataList.listIterator(cursorPos); 80 while (i.hasNext()) 81 session.write(i.next()); 82 session.write(new CursorPosCode(CursorPosCode.Option.Restore)); 83 } 58 84 } 59 85 } … … 76 102 } 77 103 for (int i = 0; i < remainingCommonPrefix.length(); ++i) { 78 dataList.add(Character.toString(remainingCommonPrefix.charAt(i))); 104 dataList.add(cursorPos, Character.toString(remainingCommonPrefix.charAt(i))); 105 increaseCursorPos(); 79 106 } 80 107 } else if (terms.size() == 1) { … … 93 120 if (completion.length() > 0) { 94 121 for (int i = 0; i < completion.length(); i++) { 95 dataList.add(completion.charAt(i) + ""); 122 dataList.add(cursorPos, Character.toString(completion.charAt(i))); 123 increaseCursorPos(); 96 124 } 97 125 session.write(completion); … … 141 169 return true; 142 170 } else if (event.isPressed(KeyCode.LEFT)) { 143 arrowKeyHandler.onPressLeft(); 171 boolean handled = arrowKeyHandler.onPressLeft(); 172 if (!handled) { 173 if (decreaseCursorPos()) 174 session.write(new MoveCode(MoveCode.Direction.Left, 1)); 175 } 144 176 return true; 145 177 } else if (event.isPressed(KeyCode.RIGHT)) { 146 arrowKeyHandler.onPressRight(); 147 return true; 148 } 149 178 boolean handled = arrowKeyHandler.onPressRight(); 179 if (!handled) { 180 if (increaseCursorPos()) 181 session.write(new MoveCode(MoveCode.Direction.Right, 1)); 182 } 183 return true; 184 } else if (event.isPressed(KeyCode.HOME)) { 185 setCursorPos(0); 186 session.write(new MoveToCode(ConsoleHandler.KRAKEN_PROMPT.length() + 1)); 187 return true; 188 } else if (event.isPressed(KeyCode.END)) { 189 setCursorPos(dataList.size()); 190 session.write(new MoveToCode(ConsoleHandler.KRAKEN_PROMPT.length() + 1 + dataList.size())); 191 return true; 192 } 193 150 194 return false; 151 195 } … … 158 202 159 203 String character = dataList.pop(); 204 decreaseCursorPos(); 160 205 if (character == null) 161 206 break; … … 177 222 public void setLine(String line) { 178 223 dataList = new LinkedList<String>(); 224 setCursorPos(0); 179 225 for (int i = 0; i < line.length(); ++i) { 180 dataList.add(new String(new char[] { line.charAt(i) })); 226 dataList.add(cursorPos, new String(new char[] { line.charAt(i) })); 227 increaseCursorPos(); 181 228 } 182 229 183 230 revertLine(); 184 if (line.length() > 0)231 if (line.length() > 0) 185 232 session.write(line); 186 233 } 187 234 188 public void eraseCharacter(String character ) {235 public void eraseCharacter(String character, boolean isDelete) { 189 236 if (dataList.isEmpty()) 190 237 return; 191 238 192 session.write("\r"); 193 dataList.removeLast(); 194 195 session.write(new EraseLineCode(Option.EntireLine)); 196 session.write("kraken> "); 197 198 String rewrite = peekLine(); 199 if (rewrite.length() > 0) 200 session.write(rewrite); 239 if (isDelete) { 240 if (cursorPos == dataList.size()) 241 return; 242 dataList.remove(cursorPos); 243 } else { 244 if (cursorPos == 0) 245 return; 246 dataList.remove(cursorPos - 1); 247 decreaseCursorPos(); 248 session.write(new MoveCode(MoveCode.Direction.Left, 1)); 249 } 250 251 252 session.write(new EraseLineCode(Option.CursorToEnd)); 253 session.write(new CursorPosCode(CursorPosCode.Option.Save)); 254 Iterator<String> i = dataList.listIterator(cursorPos); 255 while (i.hasNext()) 256 session.write(i.next()); 257 session.write(new CursorPosCode(CursorPosCode.Option.Restore)); 201 258 } 202 259 … … 220 277 this.arrowKeyHandler = arrowKeyHandler; 221 278 } 222 279 223 280 public TelnetArrowKeyHandler getArrowKeyHandler() { 224 281 return this.arrowKeyHandler; 225 282 } 283 284 private void setCursorPos(int newPos) { 285 cursorPos = newPos; 286 } 287 288 private boolean increaseCursorPos() { 289 if (cursorPos + 1 <= dataList.size()) { 290 cursorPos++; 291 return true; 292 } else 293 return false; 294 } 295 296 private boolean decreaseCursorPos() { 297 if (cursorPos - 1 >= 0) { 298 cursorPos--; 299 return true; 300 } else 301 return false; 302 } 226 303 } -
kraken-core/src/main/java/org/krakenapps/console/ConsoleHandler.java
r513 r533 120 120 controller.setLine(""); 121 121 break; 122 case DELETE: 123 controller.eraseCharacter("", true); 124 break; 125 case BACKSPACE: 126 controller.eraseCharacter("", false); 127 break; 122 128 } 123 129 } -
kraken-core/src/main/java/org/krakenapps/console/ConsoleHistoryManager.java
r513 r533 43 43 Up, Down, Right, Left 44 44 } 45 45 46 46 @Override 47 public voidonPressUp() {47 public boolean onPressUp() { 48 48 boolean hasBeenEditing = index == -1; 49 49 String line = previousLine(); 50 50 if (line == null) 51 return ;51 return true; 52 52 53 53 if (hasBeenEditing) { … … 59 59 } 60 60 61 setLine(line); 62 return true; 63 } 64 65 private void setLine(String line) { 61 66 consoleController.setLine(line); 62 67 } 63 68 64 69 @Override 65 public voidonPressDown() {70 public boolean onPressDown() { 66 71 boolean hasBeenEditing = index == -1; 67 72 if (hasBeenEditing) 68 return ;73 return true; 69 74 70 75 String line = nextLine(); 71 76 if (line == null) 72 return ;77 return true; 73 78 74 consoleController.setLine(line); 79 setLine(line); 80 return true; 75 81 } 76 82 77 83 @Override 78 public void onPressLeft() { 84 public boolean onPressLeft() { 85 return false; 79 86 } 80 87 81 88 @Override 82 public void onPressRight() { 89 public boolean onPressRight() { 90 return false; 83 91 } 84 92 85 93 @Override 86 public voidOnPressOtherKeys() {94 public boolean OnPressOtherKeys() { 87 95 resetIndex(); 96 return true; 88 97 } 89 98 -
kraken-core/src/main/java/org/krakenapps/console/TelnetArrowKeyHandler.java
r464 r533 17 17 18 18 public interface TelnetArrowKeyHandler { 19 public voidonPressUp();20 public voidonPressDown();21 public voidonPressLeft();22 public voidonPressRight();23 public voidOnPressOtherKeys();19 public boolean onPressUp(); 20 public boolean onPressDown(); 21 public boolean onPressLeft(); 22 public boolean onPressRight(); 23 public boolean OnPressOtherKeys(); 24 24 } -
kraken-core/src/main/java/org/krakenapps/console/TelnetStateMachine.java
r464 r533 33 33 private ProtocolDecoderOutput out; 34 34 private byte lastByte; 35 private byte ansiPriorChar; 35 36 36 37 private enum State { … … 82 83 case 'D': 83 84 out.write(new FunctionKeyEvent(KeyCode.LEFT)); 85 state = State.Data; 86 break; 87 case '3': 88 case '1': 89 case '4': 90 ansiPriorChar = b; 91 state = State.AnsiEscape; 92 break; 93 case '~': 94 switch (ansiPriorChar) { 95 case '3': 96 out.write(new FunctionKeyEvent(KeyCode.DELETE)); 97 break; 98 case '1': 99 out.write(new FunctionKeyEvent(KeyCode.HOME)); 100 break; 101 case '4': 102 out.write(new FunctionKeyEvent(KeyCode.END)); 103 break; 104 } 105 ansiPriorChar = '\0'; 84 106 state = State.Data; 85 107 break; … … 157 179 else if (ch == (char) 21) 158 180 out.write(new FunctionKeyEvent(KeyCode.CTRL_U)); 181 else if (ch == (char) 127 || ch == (char) 8) 182 out.write(new FunctionKeyEvent(KeyCode.BACKSPACE)); 159 183 else 160 184 out.write(character); -
kraken-core/src/main/java/org/krakenapps/script/batch/BatchScript.java
r506 r533 117 117 manager.execute(context, args[0], stopOnFail); 118 118 } catch (Exception e) { 119 context.println("batch failed: ", e.toString());119 context.println("batch failed: %s", e.toString()); 120 120 } 121 121 }
