Skip to content

Commit 69605ea

Browse files
committed
Editor Repeat has presets, can be added to batch and run from macro
1 parent f84908c commit 69605ea

8 files changed

+93
-2
lines changed

Common.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ void ReadRegistry()
4141
FReadRegistry(Settings);
4242
FTReadRegistry(Settings);
4343

44-
g_pEditorBatchType = new CBatchType(MEditorBatches, ESPresets, ERPresets, EFPresets, ETPresets, NULL);
44+
g_pEditorBatchType = new CBatchType(MEditorBatches, ESPresets, ERPresets, EPPresets, EFPresets, ETPresets, NULL);
4545
g_pEditorBatches = new CBatchActionCollection(*g_pEditorBatchType, Settings.Open(_T("EditorBatches")));
4646

4747
g_pPanelBatchType = new CBatchType(MPanelBatches, FSPresets, FRPresets, RnPresets, QRPresets, FGPresets, NULL);

EditFind/EditCommon.cpp

+6
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ CParameterSet g_ERParamSet(EditorReplaceExecutor,
1717
"RemoveEmpty", &ERRemoveEmpty, "RemoveNoMatch", &ERRemoveNoMatch,
1818
"AsScript", &EREvaluate, "FromCurrent", &EFromCurrentPosition, NULL
1919
);
20+
CParameterSet g_EPParamSet(EditorRepeatExecutor,
21+
"Replace", &ReplaceText, "Script", &EREvaluateScript, NULL,
22+
"RepeatCount", &ERRepeatCount, "AsScript", &EREvaluate, NULL
23+
);
2024
CParameterSet g_EFParamSet(EditorFilterExecutor,
2125
"Text", &SearchText, "@Text", &EText, NULL, NULL,
2226
"LeaveFilter", &EFLeaveFilter, "IsRegExp", &ERegExp, "CaseSensitive", &ECaseSensitive,
@@ -36,6 +40,7 @@ void EReadRegistry(CFarSettingsKey Key)
3640

3741
ESPresets = new CESPresetCollection(g_ESParamSet);
3842
ERPresets = new CERPresetCollection(g_ERParamSet);
43+
EPPresets = new CEPPresetCollection(g_EPParamSet);
3944
EFPresets = new CEFPresetCollection(g_EFParamSet);
4045
ETPresets = new CETPresetCollection(g_ETParamSet);
4146
}
@@ -572,6 +577,7 @@ void ECleanup(bool PatternOnly)
572577
if (!PatternOnly) {
573578
delete ESPresets;
574579
delete ERPresets;
580+
delete EPPresets;
575581
delete EFPresets;
576582
delete ETPresets;
577583
}

EditFind/EditFind.h

+10
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,13 @@ class CERPresetCollection:public CStdPresetCollection {
1919
virtual int ID() { return 0; }
2020
};
2121

22+
class CEPPresetCollection:public CStdPresetCollection {
23+
public:
24+
CEPPresetCollection(CParameterSet &ParamSet) : CStdPresetCollection(ParamSet, _T("EditRepeat"), MEPPreset) {}
25+
virtual bool EditPreset(CPreset *pPreset);
26+
virtual int ID() { return 4; }
27+
};
28+
2229
class CEFPresetCollection:public CStdPresetCollection {
2330
public:
2431
CEFPresetCollection(CParameterSet &ParamSet) : CStdPresetCollection(ParamSet, _T("EditFilter"), MEFPreset) {}
@@ -40,10 +47,12 @@ enum EPositioning {EP_BEGIN, EP_DIR, EP_END};
4047

4148
extern CParameterSet g_ESParamSet;
4249
extern CParameterSet g_ERParamSet;
50+
extern CParameterSet g_EPParamSet;
4351
extern CParameterSet g_EFParamSet;
4452
extern CParameterSet g_ETParamSet;
4553
EXTERN CESPresetCollection *ESPresets;
4654
EXTERN CERPresetCollection *ERPresets;
55+
EXTERN CEPPresetCollection *EPPresets;
4756
EXTERN CEFPresetCollection *EFPresets;
4857
EXTERN CETPresetCollection *ETPresets;
4958

@@ -115,6 +124,7 @@ EXTERN bool EListAllFromPreset;
115124
EXTERN bool ECountAllFromPreset;
116125
OperationResult EditorSearchExecutor();
117126
OperationResult EditorReplaceExecutor();
127+
OperationResult EditorRepeatExecutor();
118128
OperationResult EditorFilterExecutor();
119129
OperationResult EditorTransliterateExecutor();
120130
void EditorSeekToBeginEnd();

EditFind/EditRepeat.cpp

+67
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ bool EditorRepeatText()
7979
Dialog.Add(new CFarTextItem(27, 7, 0, MTimes));
8080

8181
Dialog.AddButtons(MOk, MCancel, MBtnClose);
82+
Dialog.Add(new CFarButtonItem(64, 9, 0, FALSE, MBtnPresets));
8283

8384
ReplaceText = PickupMultilineSelection();
8485
if (ReplaceText.empty()) ReplaceText = ERReplace;
@@ -92,6 +93,9 @@ bool EditorRepeatText()
9293
case MQuoteReplace:
9394
CSO::QuoteReplaceString(ReplaceText);
9495
break;
96+
case MBtnPresets:
97+
EPPresets->ShowMenu(true);
98+
break;
9599
case MRunEditor:
96100
RunExternalEditor(ReplaceText);
97101
break;
@@ -115,3 +119,66 @@ bool EditorRepeatText()
115119

116120
return true;
117121
}
122+
123+
OperationResult EditorRepeatExecutor()
124+
{
125+
if (!EditorUpdateSelectionPosition())
126+
return OR_FAILED;
127+
128+
if (!CompileLUAString(ReplaceText, ScriptEngine(EREvaluate))) return OR_FAILED;
129+
130+
#ifdef UNICODE
131+
ERReplace = ReplaceText;
132+
#else
133+
ERReplace = ERReplace_O2E = ReplaceText;
134+
OEMToEditor(ERReplace_O2E);
135+
#endif
136+
137+
NoAsking = true;
138+
FindNumber = ReplaceNumber = 0;
139+
REParam.m_setInitParam.clear();
140+
SanitateEngine();
141+
142+
bool bResult = EditorRepeatAgain();
143+
StartupInfo.EditorControl(ECTL_REDRAW, NULL);
144+
return bResult ? OR_OK : OR_CANCEL;
145+
}
146+
147+
bool CEPPresetCollection::EditPreset(CPreset *pPreset)
148+
{
149+
CFarDialog Dialog(80, 17, _T("EPPresetDlg"));
150+
Dialog.SetUseID(true);
151+
152+
Dialog.AddFrame(MEPPreset);
153+
Dialog.Add(new CFarTextItem(5, 2, 0, MPresetName));
154+
Dialog.Add(new CFarEditItem(5, 3, 74, DIF_HISTORY,_T("RESearch.PresetName"), pPreset->Name()));
155+
156+
Dialog.Add(new CFarTextItem(5, 4, 0, MTextToRepeat));
157+
Dialog.Add(new CFarEditItem(5, 5, 69, DIF_HISTORY|DIF_VAREDIT,_T("ReplaceText"), pPreset->m_mapStrings["Replace"]));
158+
Dialog.Add(new CFarButtonItem(71, 5, 0, 0, MQuoteReplace));
159+
160+
Dialog.Add(new CFarTextItem(5, 6, DIF_BOXCOLOR|DIF_SEPARATOR, _T("")));
161+
162+
Dialog.Add(new CFarCheckBoxItem(5, 7, 0, MEvaluateAsScript, &pPreset->m_mapInts["AsScript"]));
163+
Dialog.Add(new CFarComboBoxItem(35, 7, 60, 0, new CFarListData(m_lstEngines, false), new CFarEngineStorage(pPreset->m_mapStrings["Script"])));
164+
Dialog.Add(new CFarButtonItem(64, 7, 0, FALSE, MRunEditor));
165+
166+
Dialog.Add(new CFarTextItem(5, 9, 0, MRepeatTimes));
167+
Dialog.Add(new CFarEditItem(20, 9, 25, 0, NULL, &pPreset->m_mapInts["RepeatCount"], new CFarIntegerRangeValidator(1, 16384)));
168+
Dialog.Add(new CFarTextItem(27, 9, 0, MTimes));
169+
170+
Dialog.Add(new CFarCheckBoxItem(5, 11, 0, MAddToMenu, &pPreset->m_bAddToMenu));
171+
Dialog.AddButtons(MOk, MCancel);
172+
173+
do {
174+
switch (Dialog.Display()) {
175+
case MOk:
176+
return true;
177+
case MRunEditor:
178+
RunExternalEditor(pPreset->m_mapStrings["Replace"]);
179+
break;
180+
default:
181+
return false;
182+
}
183+
} while (true);
184+
}

RESearch.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ int ShowEditorMenu(int &nBreakCode)
154154
MenuItems.push_back(CFarMenuItemEx(true));
155155
ESPresets->FillMenuItems(MenuItems);
156156
ERPresets->FillMenuItems(MenuItems);
157+
EPPresets->FillMenuItems(MenuItems);
157158
EFPresets->FillMenuItems(MenuItems);
158159
ETPresets->FillMenuItems(MenuItems);
159160

@@ -366,6 +367,7 @@ OperationResult OpenPluginFromEditorPreset(int nItem, int nBreakCode)
366367

367368
if (FindRunPreset(ESPresets, nItem, nBreakCode, Result) ||
368369
FindRunPreset(ERPresets, nItem, nBreakCode, Result) ||
370+
FindRunPreset(EPPresets, nItem, nBreakCode, Result) ||
369371
FindRunPreset(EFPresets, nItem, nBreakCode, Result) ||
370372
FindRunPreset(ETPresets, nItem, nBreakCode, Result)
371373
) return OR_OK;

RESearch.msg

+2-1
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ MLeaveMatching "&Leave matching lines" "&Оставить совпадающи
135135
MRemoveMatching "R&emove matching lines" "&Убрать совпадающие строки" "R&emover líneas coincidentes"
136136

137137
MRepeatText "Repeat text" "Повторение текста"
138-
MTextToRepeat "&Text to repeat:" "Повторяемый текст:"
138+
MTextToRepeat "Te&xt to repeat:" "Повторяемый текст:"
139139
MRepeatTimes "&Repeat:" "Повторить:"
140140
MTimes "times" "раз"
141141

@@ -293,6 +293,7 @@ MInvalidCmdLine "Invalid command line" "Неверная командная
293293

294294
MESPreset "Editor search preset" "Пресет поиска в редакторе" "Preajuste de búsqueda en editor"
295295
MERPreset "Editor replace preset" "Пресет замены в редакторе" "Preajuste de reemplazo en editor"
296+
MEPPreset "Editor repeat preset" "Пресет повтора в редакторе"
296297
MEFPreset "Editor filter preset" "Пресет фильтра в редакторе" "Preajuste de filtro en editor"
297298
METPreset "Editor transliterate preset" "Пресет транслитерации в редакторе" "Preajuste de transliteración de editor"
298299
MFSPreset "File search preset" "Пресет поиска в файлах" "Preajuste de búsqueda de archivo"

RESearchMacro.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ HANDLE RunEditorPreset(LPCWSTR szPreset)
121121

122122
FindRunPreset(ESPresets, szPreset, Result) ||
123123
FindRunPreset(ERPresets, szPreset, Result) ||
124+
FindRunPreset(EPPresets, szPreset, Result) ||
124125
FindRunPreset(EFPresets, szPreset, Result) ||
125126
FindRunPreset(ETPresets, szPreset, Result);
126127

@@ -359,6 +360,9 @@ HANDLE OpenPluginFromEditorParameters(const OpenMacroInfo *MInfo)
359360
} else if (_wcsicmp(MInfo->Values[0].String, L"Replace") == 0) {
360361
pSet = &g_ERParamSet;
361362
pColl = ERPresets;
363+
} else if (_wcsicmp(MInfo->Values[0].String, L"Repeat") == 0) {
364+
pSet = &g_EPParamSet;
365+
pColl = EPPresets;
362366
} else if (_wcsicmp(MInfo->Values[0].String, L"Filter") == 0) {
363367
pSet = &g_EFParamSet;
364368
pColl = EFPresets;

RESearch_msg.h

+1
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,7 @@ enum eStringTable {
293293

294294
MESPreset,
295295
MERPreset,
296+
MEPPreset,
296297
MEFPreset,
297298
METPreset,
298299
MFSPreset,

0 commit comments

Comments
 (0)