@Override public void keyTyped(final KeyEvent e) { if (!hist.active() || control(e) || DELNEXT.is(e) || DELPREV.is(e) || ESCAPE.is(e) || CUT2.is(e)) return; final int caret = editor.pos(); // remember if marked text is to be deleted final StringBuilder sb = new StringBuilder(1).append(e.getKeyChar()); final boolean indent = TAB.is(e) && editor.indent(sb, e.isShiftDown()); // delete marked text final boolean selected = editor.selected() && !indent; if (selected) editor.delete(); final int move = ENTER.is(e) ? editor.enter(sb) : editor.add(sb, selected); // refresh history and adjust cursor position hist.store(editor.text(), caret, editor.pos()); if (move != 0) editor.pos(Math.min(editor.size(), caret + move)); // adjust text height scrollCode.invokeLater(true); e.consume(); }
@Override public void keyTyped(final KeyEvent e) { if (undo == null || control(e) || DELNEXT.is(e) || DELPREV.is(e) || ESCAPE.is(e)) return; text.pos(text.cursor()); // string to be added String ch = String.valueOf(e.getKeyChar()); // remember if marked text is to be deleted boolean del = true; final byte[] txt = text.text(); if (TAB.is(e)) { if (text.marked()) { // check if lines are to be indented final int s = Math.min(text.pos(), text.start()); final int l = Math.max(text.pos(), text.start()) - 1; for (int p = s; p <= l && p < txt.length; p++) del &= txt[p] != '\n'; if (!del) { text.indent(s, l, e.isShiftDown()); ch = null; } } else { boolean c = true; for (int p = text.pos() - 1; p >= 0 && c; p--) { final byte b = txt[p]; c = ws(b); if (b == '\n') break; } if (c) ch = " "; } } // delete marked text if (text.marked() && del) text.delete(); if (ENTER.is(e)) { // adopt indentation from previous line final StringBuilder sb = new StringBuilder(1).append(e.getKeyChar()); int s = 0; for (int p = text.pos() - 1; p >= 0; p--) { final byte b = txt[p]; if (b == '\n') break; if (b == '\t') { s += 2; } else if (b == ' ') { s++; } else { s = 0; } } for (int p = 0; p < s; p++) sb.append(' '); ch = sb.toString(); } if (ch != null) text.add(ch); text.setCaret(); rend.calc(); showCursor(2); e.consume(); }
@Override public void keyPressed(final KeyEvent e) { if (gui.updating) return; if (ESCAPE.is(e)) gui.fullscreen(false); if (gui.context.data() == null) return; if (SPACE.is(e)) { gui.notify.mark(sc(e) ? 2 : e.isShiftDown() ? 1 : 0, null); } else if (ENTER.is(e)) { GUIMenuCmd.C_FILTER.execute(gui); } else if (GOBACK2.is(e)) { GUIMenuCmd.C_GOBACK.execute(gui); } }
/** * Reacts on key codes. * * @param e key event */ void code(final KeyEvent e) { if (ENTER.is(e) || text == null) stop(); flashing = true; if (LINESTART.is(e)) { pos = 0; } else if (LINEEND.is(e)) { pos = text.length(); } else if (PREV.is(e)) { pos = Math.max(0, pos - 1); } else if (NEXT.is(e)) { pos = Math.min(text.length(), pos + 1); } else if (DELPREV.is(e)) { if (pos > 0) text = text.substring(0, pos - 1) + text.substring(pos--); } else if (DELNEXT.is(e)) { if (pos < text.length()) { text = text.substring(0, pos) + text.substring(pos + 1); } } }