@Override public void apply(Interaction interaction) { interaction.line.insert(interaction.buffer.toArray()); LineStatus pb = new LineStatus(); for (int i = 0;i < interaction.line.getSize();i++) { pb.accept(interaction.line.getAt(i)); interaction.buffer.clear(); if (pb.isEscaping()) { interaction.line.delete(-1); // Remove \ interaction.currentPrompt = "> "; interaction.conn.write("\n> "); } else { if (pb.isQuoted()) { interaction.line.insert('\n'); interaction.conn.write("\n> "); interaction.currentPrompt = "> "; interaction.resume(); } else { String raw = interaction.line.toString(); if (interaction.line.getSize() > 0) { history.add(0, interaction.line.toArray()); interaction.line.clear(); interaction.conn.write("\n"); interaction.end(raw);
void resize(int oldWith, int newWidth) { LineBuffer abc = new LineBuffer(); abc.insert(currentPrompt); abc.insert(buffer.toArray()); abc.setCursor(currentPrompt.length() + buffer.getCursor()); Vector pos = abc.getCursorPosition(newWidth); int curWidth = pos.x(); int curHeight = pos.y(); Vector end = abc.getPosition(abc.getSize(), oldWith); int endHeight = end.y() + end.x() / newWidth; refresh(new LineBuffer(), newWidth);
/** * Redraw the current line. */ public void redraw() { LineBuffer toto = new LineBuffer(); toto.insert(Helper.toCodePoints(currentPrompt)); toto.insert(buffer.toArray()); toto.setCursor(currentPrompt.length() + buffer.getCursor()); LineBuffer abc = new LineBuffer(); abc.update(toto, conn.stdoutHandler(), size.x()); }
@Override public void apply(Readline.Interaction interaction) { LineBuffer buf = interaction.buffer().copy(); int size = buf.getSize(); int next; while ((next = buf.getCursor()) < size) { int codePoint = buf.getAt(next); if (Character.isLetterOrDigit(codePoint)) { break; } else { buf.moveCursor(1); } } while ((next = buf.getCursor()) < size) { int codePoint = buf.getAt(next); if (Character.isLetterOrDigit(codePoint)) { buf.moveCursor(1); } else { break; } } interaction.refresh(buf); interaction.resume(); } }
@Test public void testD() { TestTerminal screen = new TestTerminal(); LineBuffer curr = new LineBuffer().insert("abc"); curr.update(new LineBuffer().insert("def"), screen, 20); screen.assertCodePoints("\rdef").assertEmpty(); assertEquals("def", curr.toString()); assertEquals(3, curr.getCursor()); }
public void testCursorPositionWithMultiCell2() { LineBuffer buffer = new LineBuffer(); buffer.insert('a', '한'); assertEquals(new Vector(3, 0), buffer.getCursorPosition(4)); assertEquals(new Vector(0, 1), buffer.getCursorPosition(3)); assertEquals(new Vector(0, 2), buffer.getCursorPosition(2)); try { buffer.getCursorPosition(1); fail(); } catch (UnsupportedOperationException ignore) { } }
@Test public void setSize() { LineBuffer buffer = new LineBuffer(); buffer.insert('a', 'b', 'c', 'd'); buffer.setCursor(2); buffer.setSize(3); assertEquals(3, buffer.getSize()); assertEquals(2, buffer.getCursor()); buffer.setSize(1); assertEquals(1, buffer.getSize()); assertEquals(1, buffer.getCursor()); }
@Test public void testT() { TestTerminal screen = new TestTerminal(); LineBuffer curr = new LineBuffer().insert("abcdefg").setCursor(3); curr.update(new LineBuffer().insert("abc"), screen, 4); screen.assertCodePoints("\033[K\r\033[1B\033[K\033[1C\033[1C\033[1C\033[1A").assertEmpty(); }
@Test public void testMoveCursor() { LineBuffer buffer = new LineBuffer(); buffer.insert('a', 'b', 'c', 'd'); assertEquals(-1, buffer.moveCursor(-1)); assertEquals(3, buffer.getCursor()); assertEquals(-2, buffer.moveCursor(-2)); assertEquals(1, buffer.getCursor()); assertEquals(-1, buffer.moveCursor(-2)); assertEquals(0, buffer.getCursor()); assertEquals(1, buffer.moveCursor(1)); assertEquals(1, buffer.getCursor()); assertEquals(2, buffer.moveCursor(2)); assertEquals(3, buffer.getCursor()); assertEquals(1, buffer.moveCursor(2)); assertEquals(4, buffer.getCursor()); }
@Override public void apply(Readline.Interaction interaction) { LineBuffer buf = interaction.buffer().copy(); buf.moveCursor(-1); interaction.refresh(buf); interaction.resume(); } }
public Update(Consumer<int[]> out, int width) { this.out = out; this.width = width; this.scrCol = getCursorPosition(width).x(); this.scrRow = getCursorPosition(width).y(); }
@Test public void testE() { TestTerminal screen = new TestTerminal(); LineBuffer curr = new LineBuffer().insert("abc"); curr.update(new LineBuffer().insert("abdef"), screen, 20); screen.assertCodePoints("\bdef").assertEmpty(); assertEquals("abdef", curr.toString()); assertEquals(5, curr.getCursor()); }
public void testCursorPositionWithMultiCell2() { LineBuffer buffer = new LineBuffer(); buffer.insert('a', '한'); assertEquals(new Vector(3, 0), buffer.getCursorPosition(4)); assertEquals(new Vector(0, 1), buffer.getCursorPosition(3)); assertEquals(new Vector(0, 2), buffer.getCursorPosition(2)); try { buffer.getCursorPosition(1); fail(); } catch (UnsupportedOperationException ignore) { } }
@Test public void setSize() { LineBuffer buffer = new LineBuffer(); buffer.insert('a', 'b', 'c', 'd'); buffer.setCursor(2); buffer.setSize(3); assertEquals(3, buffer.getSize()); assertEquals(2, buffer.getCursor()); buffer.setSize(1); assertEquals(1, buffer.getSize()); assertEquals(1, buffer.getCursor()); }
@Test public void testS() { TestTerminal screen = new TestTerminal(); LineBuffer curr = new LineBuffer().insert("abcdefg").setCursor(2); curr.update(new LineBuffer().insert("ab"), screen, 4); screen.assertCodePoints("\033[K\r\033[1B\033[K\033[1C\033[1C\033[1A").assertEmpty(); }