private boolean processTerminalKeyPressed()

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;
  }