/** * Returns the right cursor bound depending on the current mode. * * @return the current bound */ int getCursorBound() { if (console.getMode() == Mode.EMACS) { return buffer.getSize(); } else { return Math.max(0, buffer.getSize() - 1); } }
@Override public void run() { reader.setKeyMap(console.getMode().getKeyMap()); } });
@Override String execute(Editor editor, EditorBuffer buffer, int[] sequence, boolean flush) throws IOException { if (editor.isEmpty()) { editor.console.status = Console.CLOSING; return null; } else { if (editor.console.getMode() == Mode.EMACS) { return EditorAction.DELETE_PREV_CHAR.execute(editor, buffer, sequence, true); } else { return EditorAction.ENTER.execute(editor, buffer, sequence, true); } } } };
public void testEmacs() { console.init(); console.on(Operation.VI_EDITING_MODE); assertEquals(Mode.VI_INSERT, console.getMode()); }
public void testDigit() { console.init(); console.on(KeyStrokes.of("abcdef")); console.toMove(); console.on(Operation.VI_ARG_DIGIT, '4'); assertEquals(4, assertInstance(Mode.Digit.class, console.getMode()).getCount()); assertEquals(null, assertInstance(Mode.Digit.class, console.getMode()).getTo()); console.on(Operation.VI_YANK_TO); assertEquals(Mode.YANK_TO, console.getMode()); console.on(Operation.VI_YANK_TO); assertEquals(Mode.VI_MOVE, console.getMode()); assertEquals("abcdef", getClipboard()); }
private void doTest(Mode expected) { final AtomicReference<String> calls = new AtomicReference<String>(); shell.addProcess(new SyncProcess() { @Override public void run(String request, ShellProcessContext context) throws Exception { calls.set(request); context.end(ShellResponse.ok()); } }); console.on(KeyStrokes.of("abc def")); console.on(Operation.ACCEPT_LINE); assertEquals("abc def", calls.get()); assertEquals(expected, console.getMode()); } }
public void testViMode() throws Exception { console.init(); console.on(KeyStrokes.a); assertEquals(Mode.EMACS, console.getMode()); console.on(Operation.VI_EDITING_MODE); driver.assertChar('a').assertFlush().assertEmpty(); assertEquals(Mode.VI_INSERT, console.getMode()); console.on(Operation.VI_MOVEMENT_MODE); driver.assertMoveLeft().assertFlush().assertEmpty(); assertEquals(Mode.VI_MOVE, console.getMode()); } }
@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; } } };
public void testNormal() { console.init(); console.on(KeyStrokes.of("abcdef")); console.toMove(); console.on(Operation.VI_YANK_TO); assertEquals(Mode.YANK_TO, console.getMode()); console.on(Operation.VI_YANK_TO); assertEquals(Mode.VI_MOVE, console.getMode()); assertEquals("abcdef", getClipboard()); }
public void testEnter() { console.init(); final AtomicReference<String> calls = new AtomicReference<String>(); shell.addProcess(new SyncProcess() { @Override public void run(String request, ShellProcessContext context) throws Exception { calls.set(request); context.end(ShellResponse.ok()); } }); console.toInsert(); console.on(KeyStrokes.of("abc def")); console.toMove(); console.on(Operation.VI_MOVE_ACCEPT_LINE); assertEquals("abc def", calls.get()); assertEquals(Mode.VI_INSERT, console.getMode()); } }
public void testPrev() { console.init(); console.on(KeyStrokes.of("abc def")); console.toMove(); console.on(KeyStrokes.LEFT); console.on(Operation.VI_YANK_TO); assertEquals(Mode.YANK_TO, console.getMode()); console.on(Operation.VI_FIRST_PRINT); assertEquals(Mode.VI_MOVE, console.getMode()); assertEquals(" de", getClipboard()); assertEquals(7, getCurrentCursor()); }
public void testMoveModeAfterAcceptInMultiline() { console.init(); console.toInsert(); console.on(KeyStrokes.a); console.on(KeyStrokes.BACKSLASH); console.toMove(); console.on(Operation.VI_MOVE_ACCEPT_LINE); assertEquals(Mode.VI_INSERT, console.getMode()); }
public void testBeginningOfLine() { console.init(); console.on(KeyStrokes.of("abc def")); console.toMove(); console.on(KeyStrokes.LEFT); console.on(KeyStrokes.LEFT); console.on(Operation.VI_YANK_TO); assertEquals(Mode.YANK_TO, console.getMode()); console.on(Operation.VI_BEGNNING_OF_LINE_OR_ARG_DIGIT); assertEquals(Mode.VI_MOVE, console.getMode()); assertEquals("abc d", getClipboard()); assertEquals(6, getCurrentCursor()); } }
public void testNextWord() { console.init(); console.on(KeyStrokes.of("abc def")); console.toMove(); console.on(KeyStrokes.LEFT); console.on(KeyStrokes.LEFT); console.on(KeyStrokes.LEFT); console.on(KeyStrokes.LEFT); console.on(KeyStrokes.LEFT); console.on(KeyStrokes.LEFT); console.on(KeyStrokes.LEFT); console.on(Operation.VI_YANK_TO); assertEquals(Mode.YANK_TO, console.getMode()); console.on(Operation.VI_NEXT_WORD); assertEquals(Mode.VI_MOVE, console.getMode()); assertEquals("bc ", getClipboard()); assertEquals(1, getCurrentCursor()); }
@Override void perform(Editor editor, EditorBuffer buffer) throws IOException { if (buffer.getSize() > 2) { int pos = buffer.getCursor(); if (pos > 0) { if (pos < buffer.getSize()) { if (buffer.moveLeft()) { char a = buffer.charAt(pos - 1); char b = buffer.charAt(pos); buffer.moveRight(b); // Should be assertion buffer.moveRight(a); // Should be assertion // A bit not great : need to find a better way to do that... if (editor.console.getMode() == Mode.VI_MOVE && buffer.getCursor() > editor.getCursorBound()) { buffer.moveLeft(); } } } else { if (buffer.moveLeft() && buffer.moveLeft()) { char a = buffer.charAt(pos - 2); char b = buffer.charAt(pos - 1); buffer.moveRight(b); // Should be assertion buffer.moveRight(a); // Should be assertion } } } } } };
public void testEndOfLine() { console.init(); console.on(KeyStrokes.of("abc def")); console.toMove(); console.on(KeyStrokes.LEFT); console.on(KeyStrokes.LEFT); console.on(KeyStrokes.LEFT); console.on(KeyStrokes.LEFT); console.on(KeyStrokes.LEFT); console.on(KeyStrokes.LEFT); console.on(KeyStrokes.LEFT); console.on(Operation.VI_YANK_TO); assertEquals(Mode.YANK_TO, console.getMode()); console.on(Operation.END_OF_LINE); assertEquals(Mode.VI_MOVE, console.getMode()); assertEquals("bc def", getClipboard()); assertEquals(1, getCurrentCursor()); }
private void doTest(Mode status, Mode expectedStatus) { console.on(KeyStrokes.of("foo")); console.setMode(status); assertEquals("foo", getCurrentLine()); assertEquals(3, getCurrentCursor()); console.on(Operation.INTERRUPT); assertEquals(expectedStatus, console.getMode()); assertEquals("", getCurrentLine()); assertEquals(0, getCurrentCursor()); }
public void testS() throws Exception { console.toInsert(); console.init(); console.on(KeyStrokes.of("great lakes brewery")); console.on(Operation.VI_MOVEMENT_MODE); console.on(KeyStrokes.LEFT); console.on(KeyStrokes.LEFT); console.on(KeyStrokes.LEFT); console.on(Operation.VI_KILL_WHOLE_LINE); console.on(KeyStrokes.of("dogfishhead")); assertEquals("dogfishhead", getCurrentLine()); assertEquals(Mode.VI_INSERT, console.getMode()); } }
public void testC() throws Exception { console.toInsert(); console.init(); console.on(KeyStrokes.of("yogurt")); console.on(Operation.VI_MOVEMENT_MODE); console.on(KeyStrokes.LEFT); console.on(KeyStrokes.LEFT); console.on(KeyStrokes.LEFT); console.on(Operation.VI_CHANGE_TO_EOL); console.on(KeyStrokes.of("yo")); assertEquals("yoyo", getCurrentLine()); assertEquals(Mode.VI_INSERT, console.getMode()); } }
public void testD() throws Exception { console.toInsert(); console.init(); console.on(KeyStrokes.of("banana")); console.on(Operation.VI_MOVEMENT_MODE); console.on(KeyStrokes.LEFT); console.on(KeyStrokes.LEFT); console.on(Operation.VI_DELETE_TO_EOL); console.on(Operation.VI_APPEND_MODE); console.on(KeyStrokes.of("daid")); assertEquals("bandaid", getCurrentLine()); assertEquals(Mode.VI_INSERT, console.getMode()); } }