docs: def replace(self, text=None):
          """
          Replaces the selected occurrence.
  
          :param text: The replacement text. If it is None, the lineEditReplace's
                       text is used instead.
  
          :return True if the text could be replace properly, False if there is
                  no more occurrences to replace.
          """
          if text is None or isinstance(text, bool):
              text = self.lineEditReplace.text()
          current_occurences = self._current_occurrence()
          occurrences = self.get_occurences()
          if current_occurences == -1:
              self.select_next()
              current_occurences = self._current_occurrence()
          try:
              # prevent search request due to editor textChanged
              try:
                  self.editor.textChanged.disconnect(self.request_search)
              except (RuntimeError, TypeError):
                  # already disconnected
                  pass
              occ = occurrences[current_occurences]
              cursor = self.editor.textCursor()
              cursor.setPosition(occ[0])
              cursor.setPosition(occ[1], cursor.KeepAnchor)
              len_to_replace = len(cursor.selectedText())
              len_replacement = len(text)
              offset = len_replacement - len_to_replace
              cursor.insertText(text)
              self.editor.setTextCursor(cursor)
              self._remove_occurrence(current_occurences, offset)
              current_occurences -= 1
              self._set_current_occurrence(current_occurences)
              self.select_next()
              self.cpt_occurences = len(self.get_occurences())
              self._update_label_matches()
              self._update_buttons()
              return True
          except IndexError:
              return False
          finally:
              self.editor.textChanged.connect(self.request_search)