def delete_under_or_merge_lines(self):
        """Delete char under cursor or merge lines.

        If we use it when there is a character under
        the cursor, the character is deleted.

        If there's no character under the cursor, then
        we cause the line below the cursor (if there's one)
        to merge with the current line, as if eliminating a
        line separator from the text. If there's no line
        below the current one, then nothing is done.
        """
        ### if there's a character sitting at the column
        ### where the cursor is (the column where the cursor
        ### sits has a number lower than the character
        ### count/length of the line) delete it

        if self.col < len(self.lines[self.row]):

            ### delete the character
            del self.lines[self.row][self.col]

            ### reposition characters of current line
            ### one beside the other, so that the empty
            ### space left by the removed character
            ### is occupied (this ends up not having any
            ### effect when the removed character was the
            ### last one, since in such case the remaining
            ### characters are already correctly positioned)
            self.lines[self.row].reposition_chars()

            ### now we reposition the cursor without
            ### actually changing its row and column,
            ### just for the side-effect of having the
            ### cursor assume the size of the character
            ### under it (if there is one)
            self.reposition_ins()

            ### since some change took place, we execute the
            ### edition routine
            self.edition_routine()

        ### if there's no character sitting at the position
        ### where cursor is, it means the cursor is sitting
        ### at the very end of the line;
        ###
        ### in such case, we try to merge the line below
        ### (if there is one) with the current line

        else:

            ### define the index of the line to be removed,
            ### the one below the current one
            index_to_remove = self.row + 1

            ### try removing the line below the current one
            try:
                removed_line = self.lines.pop(index_to_remove)

            ### if there is not such line, then there is
            ### no more text to be deleted after the cursor,
            ### which means this method has no effect in the
            ### text's contents, so we just exit earlier by
            ### returning
            except IndexError:
                return

            ### otherwise, we take measures so that the line
            ### we just removed is merged with the current
            ### one

            ## reference the current line
            current_line = self.lines[self.row]

            ## now merge the removed line into the current
            ## one and reposition the characters, so all
            ## new characters from the merged line are
            ## positioned beside the existing ones

            current_line.extend(removed_line)
            current_line.reposition_chars()

            ## since some change took place, we execute the
            ## edition routine;
            ##
            ## it is important to execute this before
            ## updating the visible lines (which may happen
            ## in the next "if block"), in order to prevent
            ## syntax highlighting to be applied to the
            ## visible lines, in case the syntax highlighting
            ## is enabled
            self.edition_routine()

            ### define the range of visible line indices;
            ### we'll need this information in the next
            ### "if block"

            visible_range = range(
                self.top_visible_line_index,
                self.top_visible_line_index + NUMBER_OF_VISIBLE_LINES,
            )

            ### if the line we removed was a visible one,
            ### (its index is within the visible range)
            ### update the visible lines, so that other
            ### lines (if there are more) are shifted
            ### upwards to occupy the position of the one
            ### we removed
            if index_to_remove in visible_range:
                self.update_visible_lines()

            ### now we reposition the cursor without
            ### actually changing its row and column,
            ### just for the side-effect of having the
            ### cursor assume the size of the character
            ### under it (if there is one)
            self.reposition_ins()

            ### finally, also check the need to update
            ### the editing area
            self.check_editing_area()
Delete char under cursor or merge lines.

        If we use it when there is a character under
        the cursor, the character is deleted.

        If there's no character under the cursor, then
        we cause the line below the cursor (if there's one)
        to merge with the current line, as if eliminating a
        line separator from the text. If there's no line
        below the current one, then nothing is done.
        
nodezator/textman/editor/cursor/modes/insert.py