From 4482f4aedb9a3e92941150faddb62e4ad51c747f Mon Sep 17 00:00:00 2001 From: Alex Yaroslavsky Date: Sun, 19 Jun 2016 18:21:34 +0000 Subject: [PATCH] Mantis#2467 --- far/PluginA.cpp | 4 ++-- far/changelog | 6 ++++++ far/editor.cpp | 38 +++++++++++++++++++++++--------------- far/vbuild.m4 | 2 +- 4 files changed, 32 insertions(+), 18 deletions(-) diff --git a/far/PluginA.cpp b/far/PluginA.cpp index ff2fdea7d8..814967756f 100644 --- a/far/PluginA.cpp +++ b/far/PluginA.cpp @@ -2590,9 +2590,9 @@ static int WINAPI FarMenuFnA(intptr_t PluginNumber, int X, int Y, int MaxHeight, if (BreakKeysCount) { NewBreakKeys.resize(BreakKeysCount); - std::transform(BreakKeys, BreakKeys + BreakKeysCount, NewBreakKeys.begin(), [&](int i) + std::transform(BreakKeys, BreakKeys + BreakKeysCount, NewBreakKeys.begin(), [](int i) { - VALUE_TYPE(NewBreakKeys) NewItem; + FarKey NewItem; NewItem.VirtualKeyCode = i & 0xffff; NewItem.ControlKeyState = 0; DWORD ItemFlags = i >> 16; diff --git a/far/changelog b/far/changelog index 6eb1191020..68a1b7d7c4 100644 --- a/far/changelog +++ b/far/changelog @@ -1,3 +1,9 @@ +t-rex 19.06.2016 21:15:20 +0200 - build 4717 + +1. Mantis#2467: Застряёт регэксп поиск с заменой в редакторе + +2. Не собиралось почему то в VC2015 update 3 (вроде баг в последнем) + drkns 18.06.2016 18:09:29 +0200 - build 4716 1. Уточнение 4715. diff --git a/far/editor.cpp b/far/editor.cpp index 9029c1d462..aaedfa0b81 100644 --- a/far/editor.cpp +++ b/far/editor.cpp @@ -3618,7 +3618,7 @@ BOOL Editor::Search(int Next) int at_end = EdOpt.SearchCursorAtEnd ? SearchLength : 0; - int Skip=FALSE; + bool Skip=false, ZeroLength=false; // Отступим на четверть и проверим на перекрытие диалогом замены int FromTop=(ScrY-2)/4; @@ -3649,12 +3649,12 @@ BOOL Editor::Search(int Next) if (!ReplaceAll) { Show(); - SHORT CurX,CurY; - GetCursorPos(CurX,CurY); + SHORT CurX, CurY; + GetCursorPos(CurX, CurY); int lpos = CurPtr->LeftPos; int endX = CurPtr->RealPosToTab(CurPtr->TabPosToReal(lpos + CurX) + SearchLength - 1) - lpos; - ChangeBlockColor(CurX,CurY, endX,CurY, colors::PaletteColorToFarColor(COL_EDITORSELECTEDTEXT)); - string strQSearchStr(CurPtr->GetString().data() + CurPtr->GetCurPos(),SearchLength), strQReplaceStr=strReplaceStrCurrent; + ChangeBlockColor(CurX, CurY, endX, CurY, colors::PaletteColorToFarColor(COL_EDITORSELECTEDTEXT)); + string strQSearchStr(CurPtr->GetString().data() + CurPtr->GetCurPos(), SearchLength), strQReplaceStr = strReplaceStrCurrent; // do not use InsertQuote, AI is not suitable here strQSearchStr.insert(0, 1, L'"'); @@ -3662,22 +3662,25 @@ BOOL Editor::Search(int Next) strQReplaceStr.insert(0, 1, L'"'); strQReplaceStr.push_back(L'"'); - std::unique_ptr pitem(PreRedrawStack().empty()? nullptr : PreRedrawStack().pop()); + if (!SearchLength && !strReplaceStrCurrent.length()) + ZeroLength = true; - MsgCode=Message(0,4,MSG(MEditReplaceTitle),MSG(MEditAskReplace), - strQSearchStr.data(),MSG(MEditAskReplaceWith),strQReplaceStr.data(), - MSG(MEditReplace),MSG(MEditReplaceAll),MSG(MEditSkip),MSG(MEditCancel)); + std::unique_ptr pitem(PreRedrawStack().empty() ? nullptr : PreRedrawStack().pop()); + + MsgCode = Message(0, 4, MSG(MEditReplaceTitle), MSG(MEditAskReplace), + strQSearchStr.data(), MSG(MEditAskReplaceWith), strQReplaceStr.data(), + MSG(MEditReplace), MSG(MEditReplaceAll), MSG(MEditSkip), MSG(MEditCancel)); if (pitem) { PreRedrawStack().push(std::move(pitem)); } - if (MsgCode==1) + if (MsgCode == 1) ReplaceAll = true; - if (MsgCode==2) - Skip=TRUE; + if (MsgCode == 2) + Skip = true; - if (MsgCode<0 || MsgCode==3) + if (MsgCode < 0 || MsgCode == 3) { UserBreak = true; break; @@ -3798,9 +3801,14 @@ BOOL Editor::Search(int Next) break; CurPos = m_it_CurLine->GetCurPos(); - CurPos += (Skip && !ReverseSearch ? 1:0); - if (!Skip && ReverseSearch) + if ((Skip || ZeroLength) && !ReverseSearch) + { + CurPos++; + } + if (!(Skip || ZeroLength) && ReverseSearch) + { (m_it_CurLine = CurPtr = m_FoundLine)->SetCurPos(CurPos = m_FoundPos); + } } } else diff --git a/far/vbuild.m4 b/far/vbuild.m4 index f9c1e96059..433228e8b0 100644 --- a/far/vbuild.m4 +++ b/far/vbuild.m4 @@ -1 +1 @@ -m4_define(BUILD,4716)m4_dnl +m4_define(BUILD,4717)m4_dnl