mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-14 07:39:29 +02:00
* fixed bug #10606, F3 finds next/previous occurences of incremental search
git-svn-id: trunk@14925 -
This commit is contained in:
parent
764f3bb7ad
commit
4e1373d30e
@ -527,8 +527,8 @@ type
|
|||||||
|
|
||||||
procedure UpdateActiveEditColors;
|
procedure UpdateActiveEditColors;
|
||||||
procedure SetIncrementalSearchStr(const AValue: string);
|
procedure SetIncrementalSearchStr(const AValue: string);
|
||||||
procedure DoIncrementalSearch;
|
procedure IncrementalSearch(ANext: Boolean; ABackward: Boolean);
|
||||||
|
|
||||||
// macros
|
// macros
|
||||||
function MacroFuncCol(const s:string; const Data: PtrInt;
|
function MacroFuncCol(const s:string; const Data: PtrInt;
|
||||||
var Abort: boolean): string;
|
var Abort: boolean): string;
|
||||||
@ -1228,11 +1228,15 @@ procedure TSourceEditor.FindNext;
|
|||||||
var
|
var
|
||||||
OldOptions: TSynSearchOptions;
|
OldOptions: TSynSearchOptions;
|
||||||
begin
|
begin
|
||||||
if LazFindReplaceDialog.FindText = '' then
|
if snIncrementalFind in FSourceNoteBook.States
|
||||||
|
then begin
|
||||||
|
FSourceNoteBook.IncrementalSearch(True, False);
|
||||||
|
end
|
||||||
|
else if LazFindReplaceDialog.FindText = ''
|
||||||
|
then begin
|
||||||
StartFindAndReplace(False)
|
StartFindAndReplace(False)
|
||||||
else if snIncrementalFind in FSourceNoteBook.States then begin
|
end
|
||||||
FSourceNoteBook.fIncrementalSearchStartPos:=FEditor.LogicalCaretXY;
|
else begin
|
||||||
end else begin
|
|
||||||
OldOptions:=LazFindReplaceDialog.Options;
|
OldOptions:=LazFindReplaceDialog.Options;
|
||||||
LazFindReplaceDialog.Options:=LazFindReplaceDialog.Options
|
LazFindReplaceDialog.Options:=LazFindReplaceDialog.Options
|
||||||
-[ssoEntireScope,ssoReplaceAll];
|
-[ssoEntireScope,ssoReplaceAll];
|
||||||
@ -1243,20 +1247,27 @@ End;
|
|||||||
|
|
||||||
{---------------------------F I N D P R E V I O U S ------------------------}
|
{---------------------------F I N D P R E V I O U S ------------------------}
|
||||||
procedure TSourceEditor.FindPrevious;
|
procedure TSourceEditor.FindPrevious;
|
||||||
var OldOptions: TSynSearchOptions;
|
var
|
||||||
Begin
|
OldOptions: TSynSearchOptions;
|
||||||
OldOptions:=LazFindReplaceDialog.Options;
|
begin
|
||||||
LazFindReplaceDialog.Options:=LazFindReplaceDialog.Options-[ssoEntireScope];
|
if snIncrementalFind in FSourceNoteBook.States
|
||||||
if ssoBackwards in LazFindReplaceDialog.Options then
|
then begin
|
||||||
LazFindReplaceDialog.Options:=LazFindReplaceDialog.Options-[ssoBackwards]
|
FSourceNoteBook.IncrementalSearch(True, True);
|
||||||
else
|
end
|
||||||
LazFindReplaceDialog.Options:=LazFindReplaceDialog.Options+[ssoBackwards];
|
else begin
|
||||||
if LazFindReplaceDialog.FindText = '' then
|
OldOptions:=LazFindReplaceDialog.Options;
|
||||||
StartFindAndReplace(False)
|
LazFindReplaceDialog.Options:=LazFindReplaceDialog.Options-[ssoEntireScope];
|
||||||
else
|
if ssoBackwards in LazFindReplaceDialog.Options then
|
||||||
DoFindAndReplace;
|
LazFindReplaceDialog.Options:=LazFindReplaceDialog.Options-[ssoBackwards]
|
||||||
LazFindReplaceDialog.Options:=OldOptions;
|
else
|
||||||
End;
|
LazFindReplaceDialog.Options:=LazFindReplaceDialog.Options+[ssoBackwards];
|
||||||
|
if LazFindReplaceDialog.FindText = '' then
|
||||||
|
StartFindAndReplace(False)
|
||||||
|
else
|
||||||
|
DoFindAndReplace;
|
||||||
|
LazFindReplaceDialog.Options:=OldOptions;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TSourceEditor.FindNextWordOccurrence(DirectionForward: boolean);
|
procedure TSourceEditor.FindNextWordOccurrence(DirectionForward: boolean);
|
||||||
var
|
var
|
||||||
@ -6197,34 +6208,55 @@ procedure TSourceNotebook.SetIncrementalSearchStr(const AValue: string);
|
|||||||
begin
|
begin
|
||||||
if FIncrementalSearchStr=AValue then exit;
|
if FIncrementalSearchStr=AValue then exit;
|
||||||
FIncrementalSearchStr:=AValue;
|
FIncrementalSearchStr:=AValue;
|
||||||
DoIncrementalSearch;
|
IncrementalSearch(False, False);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSourceNotebook.DoIncrementalSearch;
|
procedure TSourceNotebook.IncrementalSearch(ANext, ABackward: Boolean);
|
||||||
|
const
|
||||||
|
SEARCH_OPTS: array[Boolean] of TSynSearchOptions = ([], [ssoBackwards]);
|
||||||
var
|
var
|
||||||
CurEdit: TSynEdit;
|
CurEdit: TSynEdit;
|
||||||
begin
|
begin
|
||||||
if snIncrementalFind in States then begin
|
if not (snIncrementalFind in States)
|
||||||
Include(States,snIncrementalSearching);
|
then begin
|
||||||
// search string
|
UpdateStatusBar;
|
||||||
CurEdit:=GetActiveSE.EditorComponent;
|
Exit;
|
||||||
CurEdit.BeginUpdate;
|
|
||||||
if fIncrementalSearchStr<>'' then begin
|
|
||||||
// search from search start position
|
|
||||||
CurEdit.LogicalCaretXY:=fIncrementalSearchStartPos;
|
|
||||||
CurEdit.SearchReplace(fIncrementalSearchStr,'',[]);
|
|
||||||
CurEdit.LogicalCaretXY:=CurEdit.BlockEnd;
|
|
||||||
FIncrementalSearchStr:=CurEdit.SelText;
|
|
||||||
end else begin
|
|
||||||
// go to start
|
|
||||||
CurEdit.LogicalCaretXY:=fIncrementalSearchCancelPos;
|
|
||||||
CurEdit.BlockBegin:=CurEdit.LogicalCaretXY;
|
|
||||||
CurEdit.BlockEnd:=CurEdit.BlockBegin;
|
|
||||||
end;
|
|
||||||
FIncrementalSearchPos:=CurEdit.LogicalCaretXY;
|
|
||||||
CurEdit.EndUpdate;
|
|
||||||
Exclude(States,snIncrementalSearching);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
Include(States,snIncrementalSearching);
|
||||||
|
// search string
|
||||||
|
CurEdit:=GetActiveSE.EditorComponent;
|
||||||
|
CurEdit.BeginUpdate;
|
||||||
|
if FIncrementalSearchStr<>''
|
||||||
|
then begin
|
||||||
|
// search from search start position when not searching for the next
|
||||||
|
if not ANext
|
||||||
|
then CurEdit.LogicalCaretXY := FIncrementalSearchStartPos
|
||||||
|
else if ABackward
|
||||||
|
then CurEdit.LogicalCaretXY := CurEdit.BlockBegin;
|
||||||
|
CurEdit.SearchReplace(FIncrementalSearchStr,'', SEARCH_OPTS[ABackward]);
|
||||||
|
CurEdit.LogicalCaretXY:=CurEdit.BlockEnd;
|
||||||
|
|
||||||
|
// searching next resets incremental history
|
||||||
|
if ANext
|
||||||
|
then begin
|
||||||
|
FIncrementalSearchStartPos := CurEdit.BlockBegin;
|
||||||
|
FIncrementalSearchCancelPos := FIncrementalSearchStartPos;
|
||||||
|
end;
|
||||||
|
|
||||||
|
// MWE:??? is it needed to set the SearchStr again. In theory we just searched it
|
||||||
|
FIncrementalSearchStr:=CurEdit.SelText;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
// go to start
|
||||||
|
CurEdit.LogicalCaretXY:=fIncrementalSearchCancelPos;
|
||||||
|
CurEdit.BlockBegin:=CurEdit.LogicalCaretXY;
|
||||||
|
CurEdit.BlockEnd:=CurEdit.BlockBegin;
|
||||||
|
end;
|
||||||
|
FIncrementalSearchPos:=CurEdit.LogicalCaretXY;
|
||||||
|
CurEdit.EndUpdate;
|
||||||
|
Exclude(States,snIncrementalSearching);
|
||||||
|
|
||||||
UpdateStatusBar;
|
UpdateStatusBar;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user