diff --git a/uppsrc/CodeEditor/FindReplace.cpp b/uppsrc/CodeEditor/FindReplace.cpp index 3c0e502af..5d3b69772 100644 --- a/uppsrc/CodeEditor/FindReplace.cpp +++ b/uppsrc/CodeEditor/FindReplace.cpp @@ -514,6 +514,8 @@ int CodeEditor::BlockReplace() void CodeEditor::OpenNormalFindReplace0(bool replace) { + if(GetLength() > 1000000) + findreplace.incremental <<= false; findreplace.Setup(replace); findreplace.find.SetFocus(); findreplace.itext = GetI(); diff --git a/uppsrc/ide/Assist.cpp b/uppsrc/ide/Assist.cpp index 130c7c8a9..a3520e1b0 100644 --- a/uppsrc/ide/Assist.cpp +++ b/uppsrc/ide/Assist.cpp @@ -1067,6 +1067,30 @@ bool IsPendif(const String& l) return l.Find("#endif") >= 0; } +void Ide::FindId(const String& id) +{ + int pos = editor.GetCursor(); + int h = min(editor.GetLength(), pos + 4000); + for(;;) { + if(pos >= h || findarg(editor[pos], ';', '{', '}') >= 0) + break; + if(iscib(editor[pos])) { + int p0 = pos; + String tid; + while(pos < h && iscid(editor[pos])) { + tid.Cat(editor[pos]); + pos++; + } + if(tid == id) { + editor.SetCursor(p0); + return; + } + } + else + pos++; + } +} + void Ide::ContextGoto0(int pos) { if(designer) @@ -1174,6 +1198,7 @@ void Ide::ContextGoto0(int pos) if(q >= 0) { AddHistory(); editor.SetCursor(editor.GetPos(parser.local[q].line - 1)); + FindId(id); return; } } @@ -1218,6 +1243,7 @@ void Ide::ContextGoto0(int pos) for(int i = 0; i < n.GetCount(); i++) { if(n[i].IsType() == istype && n[i].name == id) { JumpToDefinition(n, i, scope[j]); + FindId(id); return; } } diff --git a/uppsrc/ide/icon.ico b/uppsrc/ide/icon.ico index ed674dab4..42fe9074d 100644 Binary files a/uppsrc/ide/icon.ico and b/uppsrc/ide/icon.ico differ diff --git a/uppsrc/ide/ide.h b/uppsrc/ide/ide.h index b3ba8992c..b8e4f6a93 100644 --- a/uppsrc/ide/ide.h +++ b/uppsrc/ide/ide.h @@ -984,6 +984,7 @@ public: void ScanFile(); bool SwapSIf(const char *cref); void SwapS(); + void FindId(const String& id); void ContextGoto0(int pos); void ContextGoto(); void CtrlClick(int pos);