X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;ds=inline;f=src%2Fjexer%2Ftterminal%2FECMA48.java;h=7b41594be4eff9ab073437f9fb64f2302b18f259;hb=7c870d89433346ccb5505f8f9ba62d3fc18fe996;hp=df157cf4af9bbdee13e7dcd245e45a1a12c1f767;hpb=e7083f0b935964ca5a04835187397ff117941044;p=fanfix.git diff --git a/src/jexer/tterminal/ECMA48.java b/src/jexer/tterminal/ECMA48.java index df157cf..7b41594 100644 --- a/src/jexer/tterminal/ECMA48.java +++ b/src/jexer/tterminal/ECMA48.java @@ -179,7 +179,7 @@ public class ECMA48 implements Runnable { * @param deviceType DeviceType.VT100, DeviceType, XTERM, etc. * @param baseLang a base language without UTF-8 flag such as "C" or * "en_US" - * @return "LANG=en_US", "LANG=en_US.UTF-8", etc. + * @return "en_US", "en_US.UTF-8", etc. */ public static String deviceTypeLang(final DeviceType deviceType, final String baseLang) { @@ -614,7 +614,7 @@ public class ECMA48 implements Runnable { * * @return if true, the cursor is visible */ - public final boolean visibleCursor() { + public final boolean isCursorVisible() { return cursorVisible; } @@ -690,6 +690,15 @@ public class ECMA48 implements Runnable { private boolean columns132 = false; /** + * Get 132 columns value. + * + * @return if true, the terminal is in 132 column mode + */ + public final boolean isColumns132() { + return columns132; + } + + /** * true = reverse video. Set by DECSCNM. */ private boolean reverseVideo = false; @@ -891,7 +900,7 @@ public class ECMA48 implements Runnable { * @param type one of the DeviceType constants to select VT100, VT102, * VT220, or XTERM * @param inputStream an InputStream connected to the remote side. For - * type == XTERM, inputStrem is converted to a Reader with UTF-8 + * type == XTERM, inputStream is converted to a Reader with UTF-8 * encoding. * @param outputStream an OutputStream connected to the remote user. For * type == XTERM, outputStream is converted to a Writer with UTF-8 @@ -978,7 +987,6 @@ public class ECMA48 implements Runnable { * Handle a linefeed. */ private void linefeed() { - int i; if (currentState.cursorY < scrollRegionBottom) { // Increment screen y @@ -1096,25 +1104,18 @@ public class ECMA48 implements Runnable { * @param mouse mouse event received from the local user */ public void mouse(final TMouseEvent mouse) { + /* - * TODO: - * - * - Parse the mouse requests from the remote side regarding protocol - * + encoding - * - * - Send mouse events to the other side. - * - * - Handle the cursor (double invert). + System.err.printf("mouse(): protocol %s encoding %s mouse %s\n", + mouseProtocol, mouseEncoding, mouse); */ - // System.err.printf("Mouse: %s\n", mouse); - - /* if (mouseEncoding != MouseEncoding.UTF8) { - // We only support UTF8 encoding, bail out now. - return; + // We will support X10 but only for (160,94) and smaller. + if ((mouse.getX() >= 160) || (mouse.getY() >= 94)) { + return; + } } - */ switch (mouseProtocol) { @@ -1144,11 +1145,11 @@ public class ECMA48 implements Runnable { * have a button down (i.e. drag-and-drop). */ if (mouse.getType() == TMouseEvent.Type.MOUSE_MOTION) { - if (!mouse.getMouse1() - && !mouse.getMouse2() - && !mouse.getMouse3() - && !mouse.getMouseWheelUp() - && !mouse.getMouseWheelDown() + if (!mouse.isMouse1() + && !mouse.isMouse2() + && !mouse.isMouse3() + && !mouse.isMouseWheelUp() + && !mouse.isMouseWheelDown() ) { return; } @@ -1165,15 +1166,17 @@ public class ECMA48 implements Runnable { sb.append((char) 0x1B); sb.append('['); sb.append('M'); - if (mouse.getMouse1()) { + if (mouse.getType() == TMouseEvent.Type.MOUSE_UP) { + sb.append((char) (0x03 + 32)); + } else if (mouse.isMouse1()) { sb.append((char) (0x00 + 32)); - } else if (mouse.getMouse2()) { + } else if (mouse.isMouse2()) { sb.append((char) (0x01 + 32)); - } else if (mouse.getMouse3()) { + } else if (mouse.isMouse3()) { sb.append((char) (0x02 + 32)); - } else if (mouse.getMouseWheelUp()) { + } else if (mouse.isMouseWheelUp()) { sb.append((char) (0x04 + 64)); - } else if (mouse.getMouseWheelDown()) { + } else if (mouse.isMouseWheelDown()) { sb.append((char) (0x05 + 64)); } else { sb.append((char) (0x03 + 32)); @@ -1204,16 +1207,16 @@ public class ECMA48 implements Runnable { */ private String keypressToString(final TKeypress keypress) { - if ((fullDuplex == false) && (!keypress.getIsKey())) { + if ((fullDuplex == false) && (!keypress.isFnKey())) { /* * If this is a control character, process it like it came from * the remote side. */ - if (keypress.getCh() < 0x20) { - handleControlChar(keypress.getCh()); + if (keypress.getChar() < 0x20) { + handleControlChar(keypress.getChar()); } else { // Local echo for everything else - printCharacter(keypress.getCh()); + printCharacter(keypress.getChar()); } } @@ -1223,18 +1226,18 @@ public class ECMA48 implements Runnable { } // Handle control characters - if ((keypress.getCtrl()) && (!keypress.getIsKey())) { + if ((keypress.isCtrl()) && (!keypress.isFnKey())) { StringBuilder sb = new StringBuilder(); - char ch = keypress.getCh(); + char ch = keypress.getChar(); ch -= 0x40; sb.append(ch); return sb.toString(); } // Handle alt characters - if ((keypress.getAlt()) && (!keypress.getIsKey())) { + if ((keypress.isAlt()) && (!keypress.isFnKey())) { StringBuilder sb = new StringBuilder("\033"); - char ch = keypress.getCh(); + char ch = keypress.getChar(); sb.append(ch); return sb.toString(); } @@ -1632,9 +1635,9 @@ public class ECMA48 implements Runnable { } // Non-alt, non-ctrl characters - if (!keypress.getIsKey()) { + if (!keypress.isFnKey()) { StringBuilder sb = new StringBuilder(); - sb.append(keypress.getCh()); + sb.append(keypress.getChar()); return sb.toString(); } return ""; @@ -3312,17 +3315,31 @@ public class ECMA48 implements Runnable { * DECSTBM - Set top and bottom margins. */ private void decstbm() { - int top = getCsiParam(0, 1, 1, height) - 1; - int bottom = getCsiParam(1, height, 1, height) - 1; + boolean decPrivateModeFlag = false; - if (top > bottom) { - top = bottom; + for (int i = 0; i < collectBuffer.length(); i++) { + if (collectBuffer.charAt(i) == '?') { + decPrivateModeFlag = true; + break; + } } - scrollRegionTop = top; - scrollRegionBottom = bottom; + if (decPrivateModeFlag) { + // This could be restore DEC private mode values. + // Ignore it. + } else { + // DECSTBM + int top = getCsiParam(0, 1, 1, height) - 1; + int bottom = getCsiParam(1, height, 1, height) - 1; - // Home cursor - cursorPosition(0, 0); + if (top > bottom) { + top = bottom; + } + scrollRegionTop = top; + scrollRegionBottom = bottom; + + // Home cursor + cursorPosition(0, 0); + } } /** @@ -3529,7 +3546,7 @@ public class ECMA48 implements Runnable { for (int i = start; i <= end; i++) { DisplayLine line = display.get(currentState.cursorY); if ((!honorProtected) - || ((honorProtected) && (!line.charAt(i).getProtect()))) { + || ((honorProtected) && (!line.charAt(i).isProtect()))) { switch (type) { case VT100: @@ -3688,7 +3705,7 @@ public class ECMA48 implements Runnable { * * @param ch character from the remote side */ - public void consume(char ch) { + private void consume(char ch) { // DEBUG // System.err.printf("%c", ch);