--- a/src/eric7/QScintilla/SearchReplaceWidget.py Tue Jan 02 11:53:10 2024 +0100 +++ b/src/eric7/QScintilla/SearchReplaceWidget.py Tue Jan 02 14:06:09 2024 +0100 @@ -1253,12 +1253,13 @@ self.replacetextCombo.clear() self.replacetextCombo.addItems(self.__replaceHistory) + selectionOnly = self.selectionCheckBox.isChecked() + aw = self.__viewmanager.activeWindow() aw.hideFindIndicator() cline, cindex = aw.getCursorPosition() - boundary = self.__selectionBoundary() - if self.selectionCheckBox.isChecked(): - line, index = boundary[:2] + if selectionOnly: + boundary = self.__selectionBoundary() aw.highlightSearchSelection(*boundary) else: line = 0 @@ -1274,80 +1275,30 @@ if self.escapeCheckBox.isChecked(): ftxt = Utilities.unslash(ftxt) - ok = aw.findFirst( - ftxt, - self.regexpCheckBox.isChecked(), - self.caseCheckBox.isChecked(), - self.wordCheckBox.isChecked(), - False, - True, - line, - index, - posix=posixMode, - cxx11=cxx11Mode, - ) - - if ok and self.selectionCheckBox.isChecked(): - lineFrom, indexFrom, lineTo, indexTo = aw.getSelection() - if len(self.__selections) > 1: - for sel in self.__selections: - if lineFrom == sel[0] and indexFrom >= sel[1] and indexTo <= sel[3]: - ok = True - break - else: - ok = False - elif ( - (lineFrom == boundary[0] and indexFrom >= boundary[1]) - or (lineFrom > boundary[0] and lineFrom < boundary[2]) - or (lineFrom == boundary[2] and indexFrom <= boundary[3]) - ): - ok = True - else: - ok = False - if not ok and len(self.__selections) > 1: - # try again - while not ok and lineFrom <= boundary[2]: - for ind in range(len(self.__selections)): - if lineFrom == self.__selections[ind][0]: - after = indexTo > self.__selections[ind][3] - if after: - if ind < len(self.__selections) - 1: - line, index = self.__selections[ind + 1][:2] - else: - line, index = self.__selections[ind][:2] - break - else: - break - ok = aw.findFirst( - ftxt, - self.regexpCheckBox.isChecked(), - self.caseCheckBox.isChecked(), - self.wordCheckBox.isChecked(), - False, - True, - line, - index, - posix=posixMode, - cxx11=cxx11Mode, - ) - if ok: - lineFrom, indexFrom, lineTo, indexTo = aw.getSelection() - if ( - lineFrom < boundary[0] - or lineFrom > boundary[2] - or indexFrom < boundary[1] - or indexFrom > boundary[3] - or indexTo < boundary[1] - or indexTo > boundary[3] - ): - ok = False - break - - if not ok: - aw.selectAll(False) - aw.setCursorPosition(cline, cindex) - aw.ensureCursorVisible() - + if selectionOnly: + ok = aw.findFirstInSelection( + ftxt, + self.regexpCheckBox.isChecked(), + self.caseCheckBox.isChecked(), + self.wordCheckBox.isChecked(), + False, + True, + posix=posixMode, + cxx11=cxx11Mode, + ) + else: + ok = aw.findFirst( + ftxt, + self.regexpCheckBox.isChecked(), + self.caseCheckBox.isChecked(), + self.wordCheckBox.isChecked(), + False, + True, + line, + index, + posix=posixMode, + cxx11=cxx11Mode, + ) found = ok aw.beginUndoAction() @@ -1359,7 +1310,10 @@ while ok: aw.replace(rtxt) replacements += 1 - ok = self.__findNextPrev(ftxt, self.__findBackwards) + if selectionOnly: + ok = self.__findNextPrev(ftxt, self.__findBackwards) + else: + ok = aw.findNext() self.__finding = True aw.endUndoAction() if wordWrap: