diff --git a/src-tests/com/maccasoft/tools/TerminalTest.java b/src-tests/com/maccasoft/tools/TerminalTest.java index f4e0417..a39be7e 100644 --- a/src-tests/com/maccasoft/tools/TerminalTest.java +++ b/src-tests/com/maccasoft/tools/TerminalTest.java @@ -194,4 +194,16 @@ public class TerminalTest extends DatabindingTestCase { assertEquals(7 + 8, term.foreground); assertEquals(1, term.background); } + + public void testToggleCursor() throws Exception { + term.cursor = Terminal.CURSOR_ON | Terminal.CURSOR_FLASH | Terminal.CURSOR_ULINE; + + term.print("\033[?25l"); + + assertEquals(Terminal.CURSOR_FLASH | Terminal.CURSOR_ULINE, term.cursor); + + term.print("\033[?25h"); + + assertEquals(Terminal.CURSOR_ON | Terminal.CURSOR_FLASH | Terminal.CURSOR_ULINE, term.cursor); + } } diff --git a/src/com/maccasoft/tools/Terminal.java b/src/com/maccasoft/tools/Terminal.java index 6367ce6..a7dfc07 100644 --- a/src/com/maccasoft/tools/Terminal.java +++ b/src/com/maccasoft/tools/Terminal.java @@ -198,7 +198,7 @@ public class Terminal { else { h = Math.min(font.getHeight(), bounds.height - cy); } - e.gc.setBackground(colors[15]); + e.gc.setBackground(colors[foreground]); e.gc.fillRectangle(cx, cy + font.getHeight() - h, w, h); } } @@ -417,6 +417,7 @@ public class Terminal { if (c == 0x1B) { state = 1; argc = -1; + args[0] = 0; return; } } @@ -425,6 +426,13 @@ public class Terminal { return; } if (state == 2) { + if (c == '?') { + state = state + 2; + return; + } + state++; + } + if (state == 3 || state == 4) { if (c >= '0' && c <= '9') { if (argc == -1) { argc++; @@ -439,10 +447,9 @@ public class Terminal { return; } argc++; + } + if (state == 3) { switch (c) { - case '?': - state++; - return; case 'A': cy -= (argc == 0 || args[0] == 0 ? 1 : args[0]) * font.getHeight(); if (cy < 0) { @@ -589,21 +596,7 @@ public class Terminal { state = 0; return; } - if (state == 3) { - if (c >= '0' && c <= '9') { - if (argc == -1) { - argc++; - args[argc] = 0; - } - args[argc] = args[argc] * 10 + (c - '0'); - return; - } - if (c == ';') { - argc++; - args[argc] = 0; - return; - } - argc++; + if (state == 4) { switch (c) { case 'h': if (argc >= 1) {