'Post-process keypress event:
in InternalShell, this is method is called when shell is ready'

def postprocess_keyevent(self, event):

    (event, text, key, ctrl, shift) = restore_keyevent(event)
    if len(text):
        if self.has_selected_text():
            self.check_selection()
        self.restrict_cursor_position(self.current_prompt_pos, 'eof')
    cursor_position = self.get_position('cursor')
    if (key in (Qt.Key_Return, Qt.Key_Enter)):
        if self.is_cursor_on_last_line():
            self._key_enter()
        else:
            self.insert_text(self.get_selected_text(), at_end=True)
    elif ((key == Qt.Key_Insert) and (not shift) and (not ctrl)):
        self.setOverwriteMode((not self.overwriteMode()))
    elif (key == Qt.Key_Delete):
        if self.has_selected_text():
            self.check_selection()
            self.remove_selected_text()
        elif self.is_cursor_on_last_line():
            self.stdkey_clear()
    elif (key == Qt.Key_Backspace):
        self._key_backspace(cursor_position)
    elif (key == Qt.Key_Tab):
        self._key_tab()
    elif ((key == Qt.Key_Space) and ctrl):
        self._key_ctrl_space()
    elif (key == Qt.Key_Left):
        if (self.current_prompt_pos == cursor_position):
            return
        method = (self.extend_selection_to_next if shift else self.move_cursor_to_next)
        method(('word' if ctrl else 'character'), direction='left')
    elif (key == Qt.Key_Right):
        if self.is_cursor_at_end():
            return
        method = (self.extend_selection_to_next if shift else self.move_cursor_to_next)
        method(('word' if ctrl else 'character'), direction='right')
    elif ((key == Qt.Key_Home) or ((key == Qt.Key_Up) and ctrl)):
        self._key_home(shift, ctrl)
    elif ((key == Qt.Key_End) or ((key == Qt.Key_Down) and ctrl)):
        self._key_end(shift, ctrl)
    elif (key == Qt.Key_Up):
        if (not self.is_cursor_on_last_line()):
            self.set_cursor_position('eof')
        y_cursor = self.get_coordinates(cursor_position)[1]
        y_prompt = self.get_coordinates(self.current_prompt_pos)[1]
        if (y_cursor > y_prompt):
            self.stdkey_up(shift)
        else:
            self.browse_history(backward=True)
    elif (key == Qt.Key_Down):
        if (not self.is_cursor_on_last_line()):
            self.set_cursor_position('eof')
        y_cursor = self.get_coordinates(cursor_position)[1]
        y_end = self.get_coordinates('eol')[1]
        if (y_cursor < y_end):
            self.stdkey_down(shift)
        else:
            self.browse_history(backward=False)
    elif (key in (Qt.Key_PageUp, Qt.Key_PageDown)):
        ConsoleBaseWidget.keyPressEvent(self, event)
    elif ((key == Qt.Key_Escape) and shift):
        self.clear_line()
    elif (key == Qt.Key_Escape):
        self._key_escape()
    elif ((key == Qt.Key_L) and ctrl):
        self.clear_terminal()
    elif ((key == Qt.Key_V) and ctrl):
        self.paste()
    elif ((key == Qt.Key_X) and ctrl):
        self.cut()
    elif ((key == Qt.Key_Z) and ctrl):
        self.undo()
    elif ((key == Qt.Key_Y) and ctrl):
        self.redo()
    elif ((key == Qt.Key_A) and ctrl):
        self.selectAll()
    elif ((key == Qt.Key_Question) and (not self.has_selected_text())):
        self._key_question(text)
    elif ((key == Qt.Key_ParenLeft) and (not self.has_selected_text())):
        self._key_parenleft(text)
    elif ((key == Qt.Key_Period) and (not self.has_selected_text())):
        self._key_period(text)
    elif (len(text) and (not self.isReadOnly())):
        self.hist_wholeline = False
        self.insert_text(text)
        self._key_other(text)
    else:
        ConsoleBaseWidget.keyPressEvent(self, event)
