Editor(Console console, boolean echo) { // EditorBuffer buffer = new EditorBuffer(echo ? console.driver : NULL); // this.console = console; this.buffer = buffer; this.visitor = new MultiLineVisitor(); this.lineParser = new LineParser(visitor); this.history = new LinkedList<String>(); this.historyCursor = -1; this.historyBuffer = null; this.killBuffer = new StringBuilder(); this.mode = Mode.EMACS; this.modeListeners = new ArrayList<Runnable>(); }
public void testMoveRightDel() throws IOException { resetConsole(); buffer.append("abc"); buffer.moveLeft(); buffer.moveLeft(); buffer.moveRight(); buffer.del(); buffer.append("\n"); assertTrue(buffer.hasNext()); assertEquals(getExpectedMoveRightDel(), buffer.next()); assertFalse(buffer.hasNext()); }
String getCurrentLine() { return buffer.getLine(); }
@Override String execute(Editor editor, EditorBuffer buffer, int[] sequence, boolean flush) throws IOException { buffer.moveRightBy(buffer.getSize() - buffer.getCursor()); buffer.replace(""); return null; } };
@Override void perform(Editor editor, EditorBuffer buffer) throws IOException { int size = editor.buffer.getSize(); int cursor = editor.buffer.getCursor(); editor.killBuffer.setLength(0); while (cursor < size && editor.buffer.charAt(cursor) != ' ') { editor.killBuffer.append(editor.buffer.charAt(cursor++)); } while (cursor < size && editor.buffer.charAt(cursor) == ' ') { editor.killBuffer.append(editor.buffer.charAt(cursor++)); } } };
@Override void perform(Editor editor, EditorBuffer buffer) throws IOException { int count = 0; boolean chars = false; while (true) { if (buffer.getCursor() < buffer.getSize()) { char c = buffer.charAt(buffer.getCursor()); if (!Character.isLetterOrDigit(c)) { if (!chars) { count++; buffer.moveRight(); } else { break; } } else { chars = true; count++; buffer.moveRight(); } } else { break; } } editor.killBuffer.setLength(0); while (count-- > 0) { editor.killBuffer.appendCodePoint(buffer.del()); } editor.killBuffer.reverse(); } };
@Override String execute(Editor editor, EditorBuffer buffer, int[] sequence, boolean flush) throws IOException { editor.historyCursor = -1; editor.historyBuffer = null; String line = buffer.getLine(); editor.lineParser.append(line); if (editor.console.getMode() == Mode.VI_MOVE) { editor.console.setMode(Mode.VI_INSERT); } if (editor.lineParser.crlf()) { editor.console.driver.writeCRLF(); editor.console.driver.flush(); String request = editor.visitor.getRaw(); if (request.length() > 0) { editor.addToHistory(request); } return request; } else { buffer.append('\n'); editor.console.driver.write("> "); if (flush) { buffer.flush(); } return null; } } };
@Override void perform(Editor editor, EditorBuffer buffer) throws IOException { int to = editor.getCursorBound(); int from = buffer.getCursor(); int pos = from; while (true) { int look = at == At.BEFORE_END ? pos + 1 : pos; if (look < to) { char c = buffer.charAt(look); if ((at != At.BEGINNING && Character.isLetterOrDigit(c)) || (at == At.BEGINNING && !Character.isLetterOrDigit(c))) { break; int look = at == At.BEFORE_END ? pos + 1 : pos; if (look < to) { char c = buffer.charAt(look); if ((at != At.BEGINNING && !Character.isLetterOrDigit(c)) || (at == At.BEGINNING && Character.isLetterOrDigit(c))) { break; buffer.moveRightBy(pos - from);
@Override void perform(Editor editor, EditorBuffer buffer) throws IOException { editor.killBuffer.setLength(0); boolean chars = false; while (true) { int cursor = buffer.getCursor(); if (cursor > 0) { if (buffer.charAt(cursor - 1) == ' ') { if (!chars) { editor.killBuffer.appendCodePoint(buffer.del()); } else { break; } } else { editor.killBuffer.appendCodePoint(buffer.del()); chars = true; } } else { break; } } editor.killBuffer.reverse(); } };
public void testReadLine() throws IOException { for (String test : new String[]{"a\n","a\r\n"}) { resetConsole(); buffer.append(test); assertTrue(buffer.hasNext()); assertEquals("a", buffer.next()); assertFalse(buffer.hasNext()); assertEquals(0, buffer.getSize()); } // for (String test : new String[]{"a\n\n"}) { resetConsole(); buffer.append(test); assertTrue(buffer.hasNext()); assertEquals("a", buffer.next()); assertEquals("", buffer.next()); assertFalse(buffer.hasNext()); assertEquals(0, buffer.getSize()); } }
@Override void perform(Editor editor, EditorBuffer buffer) throws IOException { int cursor = editor.getCursorBound() - buffer.getCursor(); if (cursor > 0) { buffer.moveRightBy(cursor); } } };
@Override protected int getTo(EditorBuffer buffer) { return buffer.getSize(); } };