in ui/src/com/jediterm/terminal/ui/TerminalPanel.java [1861:1905]
private boolean processTerminalKeyPressed(KeyEvent e) {
if (hasUncommittedChars()) {
return false;
}
try {
final int keycode = e.getKeyCode();
final char keychar = e.getKeyChar();
// numLock does not change the code sent by keypad VK_DELETE
// although it send the char '.'
if (keycode == KeyEvent.VK_DELETE && keychar == '.') {
myTerminalStarter.sendBytes(new byte[]{'.'}, true);
return true;
}
// CTRL + Space is not handled in KeyEvent; handle it manually
if (keychar == ' ' && (e.getModifiersEx() & InputEvent.CTRL_DOWN_MASK) != 0) {
myTerminalStarter.sendBytes(new byte[]{ASCII_NUL}, true);
return true;
}
final byte[] code = myTerminalStarter.getTerminal().getCodeForKey(keycode, e.getModifiers());
if (code != null) {
myTerminalStarter.sendBytes(code, true);
if (mySettingsProvider.scrollToBottomOnTyping() && isCodeThatScrolls(keycode)) {
scrollToBottom();
}
return true;
}
if (isAltPressedOnly(e) && Character.isDefined(keychar) && mySettingsProvider.altSendsEscape()) {
// Cannot use e.getKeyChar() on macOS:
// Option+f produces e.getKeyChar()='ƒ' (402), but 'f' (102) is needed.
// Option+b produces e.getKeyChar()='∫' (8747), but 'b' (98) is needed.
myTerminalStarter.sendString(new String(new char[]{ASCII_ESC, simpleMapKeyCodeToChar(e)}), true);
return true;
}
if (Character.isISOControl(keychar)) { // keys filtered out here will be processed in processTerminalKeyTyped
return processCharacter(e);
}
}
catch (Exception ex) {
LOG.error("Error sending pressed key to emulator", ex);
}
return false;
}