diff options
-rw-r--r-- | src/org/connectbot/service/TerminalBridge.java | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/org/connectbot/service/TerminalBridge.java b/src/org/connectbot/service/TerminalBridge.java index 13b2870..733300c 100644 --- a/src/org/connectbot/service/TerminalBridge.java +++ b/src/org/connectbot/service/TerminalBridge.java @@ -60,6 +60,8 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener { public Canvas canvas = new Canvas(); public VDUBuffer buffer = null; + private boolean ctrlPressed = false; + public class HostKeyVerifier implements ServerHostKeyVerifier { @@ -289,6 +291,14 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener { // print normal keys if (printing) { int key = keymap.get(keyCode, event.getMetaState()); + if (ctrlPressed) { + // Support CTRL-A through CTRL-Z + if (key >= 0x61 && key <= 0x79) + key -= 0x60; + else if (key >= 0x40 && key <= 0x59) + key -= 0x39; + ctrlPressed = false; + } this.stdin.write(key); return true; } @@ -301,6 +311,14 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener { case KeyEvent.KEYCODE_DPAD_UP: ((vt320)buffer).keyPressed(vt320.KEY_UP, ' ', event.getMetaState()); return true; case KeyEvent.KEYCODE_DPAD_DOWN: ((vt320)buffer).keyPressed(vt320.KEY_DOWN, ' ', event.getMetaState()); return true; case KeyEvent.KEYCODE_DPAD_RIGHT: ((vt320)buffer).keyPressed(vt320.KEY_RIGHT, ' ', event.getMetaState()); return true; + case KeyEvent.KEYCODE_DPAD_CENTER: + // TODO: Add some visual indication of Ctrl state + if (ctrlPressed) { + stdin.write(0x1B); // ESC + ctrlPressed = false; + } else + ctrlPressed = true; + return true; } } |