def _draw(self, data):
        """
        Draw text
        """
        self._cursor.clearSelection()
        self._cursor.setPosition(self._last_cursor_pos)

        if '\x07' in data.txt:
            print('\a')
        txt = data.txt.replace('\x07', '')

        if '\x08' in txt:
            parts = txt.split('\x08')
        else:
            parts = [txt]

        for i, part in enumerate(parts):
            if part:
                part = part.replace('\r\r', '\r')
                if len(part) >= 80 * 24 * 8:
                    # big output, process it in one step (\r and \n will not be handled)
                    self._draw_chars(data, part)
                    continue
                to_draw = ''
                for n, char in enumerate(part):
                    if char == '\n':
                        self._draw_chars(data, to_draw)
                        to_draw = ''
                        self._linefeed()
                    elif char == '\r':
                        self._draw_chars(data, to_draw)
                        to_draw = ''
                        self._erase_in_line(0)
                        try:
                            nchar = part[n + 1]
                        except IndexError:
                            nchar = None
                        if self._cursor.positionInBlock() > 80 and self.flg_bash and nchar != '\n':
                            self._linefeed()
                        self._cursor.movePosition(self._cursor.StartOfBlock)
                        self._text_edit.setTextCursor(self._cursor)
                    else:
                        to_draw += char
                if to_draw:
                    self._draw_chars(data, to_draw)
            if i != len(parts) - 1:
                self._cursor_back(1)
        self._last_cursor_pos = self._cursor.position()
        self._prefix_len = self._cursor.positionInBlock()
        self._text_edit.setTextCursor(self._cursor)