View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0002367 | Double Commander | Graphical user interface | public | 2019-09-27 23:25 | 2022-04-16 11:26 |
| Reporter | liquidvacuum | Assigned To | Alexx2000 | ||
| Priority | normal | Severity | feature | Reproducibility | have not tried |
| Status | resolved | Resolution | fixed | ||
| Projection | none | ETA | none | ||
| Fixed in Version | 1.1.0 | ||||
| Summary | 0002367: Add Find, Replace and Goto line commands to Compare files | ||||
| Description | В инструменте "Сравнение файлов" отсутствуют команды "Найти...", "Найти далее", "Найти предыдущее", "Заменить...", "Перейти к строке...". Необходимо добавить команды "Найти...", "Найти далее", "Найти предыдущее", "Заменить...", "Перейти к строке...", идентичные командам во встроенном редакторе. Патч приложен. There are no "Find...", "Find next", "Find previous", " Replace...", "Go to line..." commands in the Compare files tool. There is need to add "Find...", "Find next", "Find previous", " Replace...", "Go to line..." commands, identical to the commands in the built-in editor. Patch attached. | ||||
| Tags | No tags attached. | ||||
| Attached Files | 05-differ-find.diff (19,203 bytes)
diff --git a/doublecmd-1.0.0.orig/src/fdiffer.lfm b/doublecmd-1.0.0/src/fdiffer.lfm
index c4a845b..8aa4d26 100755
--- a/doublecmd-1.0.0.orig/src/fdiffer.lfm
+++ b/doublecmd-1.0.0/src/fdiffer.lfm
@@ -1093,9 +1093,6 @@ object frmDiffer: TfrmDiffer
}
OnClick = actEditDeleteExecute
end
- object miDivider9: TMenuItem
- Caption = '-'
- end
object miEditSelectAll: TMenuItem
Action = actEditSelectAll
Bitmap.Data = {
@@ -1136,6 +1133,24 @@ object frmDiffer: TfrmDiffer
}
OnClick = actEditSelectAllExecute
end
+ object miDivider9: TMenuItem
+ Caption = '-'
+ end
+ object miFind: TMenuItem
+ Action = actEditFind
+ end
+ object miFindNext: TMenuItem
+ Action = actEditFindNext
+ end
+ object miFindPrevious: TMenuItem
+ Action = actEditFindPrevious
+ end
+ object miReplace: TMenuItem
+ Action = actEditRplc
+ end
+ object miGotoLine: TMenuItem
+ Action = actEditGotoLine
+ end
end
object mnuOptions: TMenuItem
Caption = '&Options'
@@ -1678,6 +1693,40 @@ object frmDiffer: TfrmDiffer
ImageIndex = 19
OnExecute = actEditSelectAllExecute
end
+ object actEditFind: TAction
+ Category = 'Edit'
+ Caption = '&Find'
+ HelpType = htKeyword
+ Hint = 'Find'
+ ImageIndex = 22
+ OnExecute = actExecute
+ end
+ object actEditFindNext: TAction
+ Category = 'Edit'
+ Caption = 'Find next'
+ Hint = 'Find next'
+ OnExecute = actExecute
+ end
+ object actEditFindPrevious: TAction
+ Category = 'Edit'
+ Caption = 'Find previous'
+ OnExecute = actExecute
+ end
+ object actEditRplc: TAction
+ Category = 'Edit'
+ Caption = '&Replace'
+ HelpType = htKeyword
+ Hint = 'Replace'
+ ImageIndex = 23
+ OnExecute = actExecute
+ end
+ object actEditGotoLine: TAction
+ Category = 'Edit'
+ Caption = 'Goto Line...'
+ Hint = 'Goto Line'
+ ImageIndex = 24
+ OnExecute = actExecute
+ end
object actEditRedo: TAction
Category = 'Edit'
Caption = 'Redo'
@@ -1723,7 +1772,7 @@ object frmDiffer: TfrmDiffer
left = 200
top = 136
Bitmap = {
- 4C6916000000100000001000000077856C7C91794D7E8B67386F8B67388C8B67
+ 4C6919000000100000001000000077856C7C91794D7E8B67386F8B67388C8B67
38D48B6738FF8A693DF880714AE57A7858850000000000000000000000000000
00000000000000000000000000009270425EBB96627ED1AD815DE6CEB1CDEFDF
D0FFECDBC5FFDFC29BFFA08B68FD886E43FD5A7F6A1B00000000000000000000
@@ -2427,7 +2476,103 @@ object frmDiffer: TfrmDiffer
00001A00A8FF1F00DCFF5C41E0FF000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00003516E8FF0000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000
+ 0000000000000000000000000000979B9AFF858A88FF858A88FF858A88FF858A
+ 88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF8A8F8DFF0000
+ 0000000000000000000000000000878C8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF858A88FF0000
+ 0000000000000000000000000000868B89FFFFFFFFFFEFF0F0FFEFF0F0FFEFF0
+ F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFFFFFFFFF858A88FF0000
+ 0000000000000000000000000000878C8AFFFFFFFFFFEFF0F0FFC6C7C7FFC6C7
+ C7FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFEFF0F0FFFFFFFFFF858A88FF0000
+ 0000000000000000000000000000868B89FFFFFFFFFFEFF0F0FFEFF0F0FFEFF0
+ F0FFEFF0F0FFD5D6D6FF808381FF808381FF808381FF808381FF808482FF0000
+ 0000000000000000000000000000878C8AFFFFFFFFFFEFF0F0FFC6C7C7FFC6C7
+ C7FFA6A9A8FF808381FFC8BAAEFFD2BCA6FFD4BAA2FFCDB9A8FF808381FF0000
+ 0000000000000000000000000000868B89FFFFFFFFFFEFF0F0FFEFF0F0FFD5D7
+ D6FF808381FFC8B7A8FFD2AC8AFFE7D3BFFFEAD7C5FFD9BA9CFFCBAD90FF8083
+ 81FF000000000000000000000000878C8AFFFFFFFFFFEFF0F0FFC6C7C7FF8083
+ 81FFBBAEA3FFCFA985FFF2E6DCFFF7EEE8FFF5ECE4FFECDACAFFD8B28EFFCBAF
+ 97FF808381FF0000000000000000878C8AFFFFFFFFFFEFF0F0FFEFF0F0FF8083
+ 81FFD0B8A2FFDFC0A5FFF1E4D9FFF3EAE0FFF2E7DDFFE9D4C1FFDFBEA0FFD0A6
+ 81FF808381FF0000000000000000868B89FFFDFEFEFFEFF0F0FFEFF0F0FF8083
+ 81FFD6BFA9FFE0C1A5FFEEDED0FFF2E5DAFFEDDCCDFFECD9C8FFE8D0BCFFD1A7
+ 80FF808381FF0000000000000000868B89FFF9FAFAFFEFF0F0FFEFF0F0FF8083
+ 81FFC3B5A7FFD0AB89FFE5CAB3FFEBD7C3FFEAD4C1FFEEDDCFFFDABDA3FFCEAF
+ 93FF808381FF0000000000000000868B89FFFFFFFFFFFFFFFFFFFFFFFFFFCDCF
+ CFFF808381FFD1B89FFFD6B391FFDFC5AFFFE3CAB2FFD6BAA0FFD3B497FF8083
+ 81FF737675FF0000000000000000898E8CFF868B89FF858A88FF858A88FF858A
+ 88FF7B807EFF808381FFDCC8B3FFCFAC8BFFD1A880FFD0B399FF808381FFA3A4
+ A3FFA3A4A3FF6A6E6CFF00000000000000000000000000000000000000000000
+ 0000000000006A6E6CFF808381FF808381FF808381FF808381FF8C8E8DFFB7B8
+ B8FFA3A4A3FFA3A4A3FF828484FF000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000008C8E
+ 8DFFB7B8B8FFA3A4A3FF828484FF000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00008C8E8DFF8C8E8DFF828484FF000000000000000000000000000000008083
+ 81FF808381FF808381FF00000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000808381FFC8BA
+ AEFFD4BAA2FFCCB9A7FF808381FF000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000808381FFC8B7A7FFD1AC
+ 8AFFEAD7C5FFD9B99BFFCBAC90FF808381FF838785FF858A88FF858A88FF858A
+ 88FF8A8F8DFF000000000000000000000000808381FFBBAEA2FFCFA884FFF2E6
+ DCFFF5ECE4FFECDACAFFD8B18DFFCBB097FF808381FFFFFFFFFFFFFFFFFFFFFF
+ FFFF858A88FF000000000000000000000000808381FFD0B8A2FFDEC0A4FFF1E4
+ D9FFF2E7DDFFEAD5C3FFDFBFA2FFD0A580FF808381FFEFF0F0FFEFF0F0FFFFFF
+ FFFF02598FFF02598FFF0000000000000000808381FFC2B5A7FFD0AA88FFE8D0
+ BBFFEEDCCDFFF3E8DEFFDCC1A8FFCEB094FF808381FFC6C7C7FFEFF0F0FF0259
+ 8FFFC6EAEEFF71ADCFFF02598FFF0000000000000000808381FFD1B89FFFD6B3
+ 91FFE6D0BBFFD8BEA6FFD3B597FF808381FFD0D2D1FFEFF0F0FF02598FFFC7EB
+ EFFF6AACD2FF5583A1FF02598FFF00000000828484FFA3A4A3FF808381FFDDC8
+ B3FFD1A77FFFD1B499FF808381FF939695FFC6C7C7FF02598FFFC7EBEFFF6AAC
+ D2FF5787A4FF02598FFF00000000828484FFA3A4A3FFB7B8B8FF8C8E8DFF8083
+ 81FF808381FF808381FFAFB1B0FFEFF0F0FF02598FFFC5E6EDFF69AACFFF5683
+ A0FF02598FFF0000000000000000828484FFB7B8B8FF8C8E8DFFFFFFFFFFEFF0
+ F0FFC6C7C7FFC6C7C7FFC6C7C7FF02598FFFC4E5EDFF649FC8FF5784A0FF0259
+ 8FFF6A8089FF0000000000000000000000008C8E8DFF868B89FFFFFFFFFFEFF0
+ F0FFEFF0F0FFEFF0F0FFEEEFEFFF395B70FF8AABC2FF5585A3FF02598FFFCADC
+ E7FF848987FF00000000000000000000000000000000868B89FFFDFEFEFFEFF0
+ F0FFEFF0F0FFEEEFEFFF02598FFF26424CFF36576BFF02598FFFAFC1CCFFEFEF
+ EFFF7F8482FF00000000000000000000000000000000868B89FFF9FAFAFFEFF0
+ F0FFEFF0F0FFEDEEEEFF000000FF02598FFF96A9B3FFC2C2C2FFCACBCBFFE2E2
+ E2FF7B7F7DFF00000000000000000000000000000000868B89FFFFFFFFFFFFFF
+ FFFFFFFFFFFFFEFEFEFFF7F7F7FFE9E9E9FFE2E2E2FFE5E5E5FFEAEAEAFFEFEF
+ EFFF7F8482FF00000000000000000000000000000000898E8CFF868B89FF858A
+ 88FF858A88FF858A88FF848987FF838886FF828785FF838886FF838886FF8388
+ 86FF888D8BFF0000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000FFFFFF00BBBBBBFF9B958AFFA09990FF948A
+ 7CFF886F4FFF8B6738FF896A40FF7F7253FF858A88FF858A88FF858A88FF858A
+ 88FF858A88FFBBBBBBFFFFFFFF00FFFFFF00858A88FFA59C8FFFB2ADA8FFBAA3
+ 8FFFBAA38FFFBAA38FFFBAA38FFFCCBBADFF874A20FFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFF858A88FFFFFFFF00FFFFFF00858A88FFBBBBBBFFBBBBBBFF948A
+ 7CFF9A7441FF9F7844FFBAA38FFFBAA38FFFCCBBADFF874A20FFB7B7B7FFB7B7
+ B7FFFEFEFEFF858A88FFFFFFFF00FFFFFF00858A88FFD8D8D8FFD8D8D8FFBBBB
+ BBFFFFFFFFFFFFFFFFFF874A20FFBAA38FFFCCBBADFF874A20FFFFFFFFFFFFFF
+ FFFFFEFEFEFF858A88FFFFFFFF00FFFFFF00858A88FFD8D8D8FFD8D8D8FFBBBB
+ BBFFFFFFFFFFBFBFBFFF874A20FFBAA38FFFCCBBADFF874A20FFBFBFBFFFBFBF
+ BFFFFEFEFEFF858A88FFFFFFFF00FFFFFF00858A88FFD8D8D8FF874A20FF874A
+ 20FF874A20FF874A20FF874A20FFBAA38FFFCCBBADFF874A20FF874A20FF874A
+ 20FF874A20FF874A20FFFFFFFF00FFFFFF00858A88FFD8D8D8FFD8D8D8FF874A
+ 20FFBAA38FFFBAA38FFFBAA38FFFB5957AFFB5957AFFB5957AFFB5957AFFCCBB
+ ADFF874A20FF858A88FFFFFFFF00FFFFFF00858A88FFD8D8D8FFD8D8D8FFBBBB
+ BBFF874A20FFBAA38FFFB5957AFFB5957AFFB5957AFFB5957AFFCCBBADFF874A
+ 20FFFEFEFEFF858A88FFFFFFFF00FFFFFF00858A88FFD8D8D8FFD8D8D8FFBBBB
+ BBFFFFFFFFFF874A20FFBAA38FFFB5957AFFB5957AFFCCBBADFF874A20FFC8C8
+ C8FFFEFEFEFF858A88FFFFFFFF00FFFFFF00858A88FFD8D8D8FFD8D8D8FFBBBB
+ BBFFFFFFFFFFFFFFFFFF874A20FFBAA38FFFCCBBADFF874A20FFFFFFFFFFFFFF
+ FFFFFEFEFEFF858A88FFFFFFFF00FFFFFF00858A88FFD8D8D8FFD8D8D8FFBBBB
+ BBFFFFFFFFFFD4D4D4FFD4D4D4FF874A20FF874A20FFD4D4D4FFD4D4D4FFD4D4
+ D4FFFEFEFEFF858A88FFFFFFFF00FFFFFF00858A88FFD8D8D8FFD8D8D8FFBBBB
+ BBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFEFEFEFF858A88FFFFFFFF00FFFFFF00858A88FFD8D8D8FFD8D8D8FFBBBB
+ BBFFFFFFFFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000
+ FFFFFEFEFEFF858A88FFFFFFFF00FFFFFF00858A88FFD8D8D8FFD8D8D8FFBBBB
+ BBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFEFEFEFF858A88FFFFFFFF00FFFFFF00858A88FFD8D8D8FFD8D8D8FFBBBB
+ BBFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFE
+ FEFFFFFFFFFF858A88FFFFFFFF00FFFFFF00BBBBBBFF858A88FF858A88FF858A
+ 88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A
+ 88FF858A88FFBBBBBBFFFFFFFF00
}
end
object ContextMenu: TPopupMenu
diff --git a/doublecmd-1.0.0.orig/src/fdiffer.pas b/doublecmd-1.0.0/src/fdiffer.pas
index b4217b6..341583e 100755
--- a/doublecmd-1.0.0.orig/src/fdiffer.pas
+++ b/doublecmd-1.0.0/src/fdiffer.pas
@@ -51,6 +51,11 @@ type
actEditRedo: TAction;
actEditSelectAll: TAction;
actEditPaste: TAction;
+ actEditFind: TAction;
+ actEditFindNext: TAction;
+ actEditFindPrevious: TAction;
+ actEditRplc: TAction;
+ actEditGotoLine: TAction;
actAbout: TAction;
actAutoCompare: TAction;
actLineDifferences: TAction;
@@ -91,6 +96,11 @@ type
miCutContext: TMenuItem;
miDeleteContext: TMenuItem;
miEditSelectAll: TMenuItem;
+ miFind: TMenuItem;
+ miFindNext: TMenuItem;
+ miFindPrevious: TMenuItem;
+ miReplace: TMenuItem;
+ miGotoLine: TMenuItem;
miDivider9: TMenuItem;
miEditDelete: TMenuItem;
miEditPaste: TMenuItem;
@@ -218,6 +228,13 @@ type
EncodingList: TStringList;
ScrollLock: LongInt;
FShowIdentical: Boolean;
+ bSearchBackwards: Boolean;
+ bSearchCaseSensitive: Boolean;
+ bSearchFromCaret: Boolean;
+ bSearchSelectionOnly: Boolean;
+ bSearchWholeWords: Boolean;
+ bSearchRegExp: Boolean;
+ sSearchText, sReplaceText: String;
FWaitData: TWaitData;
FCommands: TFormCommands;
procedure ShowIdentical;
@@ -241,10 +258,18 @@ type
public
constructor Create(TheOwner: TComponent); override;
destructor Destroy; override;
+ procedure DoSearchReplaceText(AReplace: boolean; ABackwards: boolean);
+ procedure ShowSearchReplaceDialog(AReplace: boolean);
+ function GetDisplayNumber(LineNumber: Integer): Integer;
published
procedure cm_CopyLeftToRight(const Params: array of string);
procedure cm_CopyRightToLeft(const Params: array of string);
procedure cm_Exit(const Params: array of string);
+ procedure cm_EditFind(const Params: array of string);
+ procedure cm_EditFindNext(const Params: array of string);
+ procedure cm_EditFindPrevious(const Params: array of string);
+ procedure cm_EditRplc(const Params: array of string);
+ procedure cm_EditGotoLine(const Params: array of string);
procedure cm_FirstDifference(const Params: array of string);
procedure cm_LastDifference(const Params: array of string);
procedure cm_NextDifference(const Params: array of string);
@@ -262,7 +287,7 @@ implementation
uses
LCLType, LazFileUtils, LConvEncoding, SynEditTypes, uHash, uLng, uGlobs,
- uShowMsg, DCClassesUtf8, dmCommonData, DCOSUtils, uConvEncoding;
+ uShowMsg, DCClassesUtf8, dmCommonData, DCOSUtils, uConvEncoding, fEditSearch;
const
HotkeysCategory = 'Differ';
@@ -727,6 +752,136 @@ begin
pnlLeft.Width:= (ClientWidth div 2) - (Splitter.Width div 2);
end;
+procedure TfrmDiffer.DoSearchReplaceText(AReplace: boolean;
+ ABackwards: boolean);
+var
+ Options: TSynSearchOptions;
+begin
+ if AReplace then
+ begin
+ Options := [ssoPrompt, ssoReplace, ssoReplaceAll];
+ end
+ else
+ begin
+ Options := [];
+ end;
+ if ABackwards then
+ begin
+ Include(Options, ssoBackwards);
+ end;
+ if bSearchCaseSensitive then
+ begin
+ Include(Options, ssoMatchCase);
+ end;
+ if not bSearchFromCaret then
+ begin
+ Include(Options, ssoEntireScope);
+ end;
+ if bSearchSelectionOnly then
+ begin
+ Include(Options, ssoSelectedOnly);
+ end;
+ if bSearchWholeWords then
+ begin
+ Include(Options, ssoWholeWord);
+ end;
+ if bSearchRegExp then
+ begin
+ Include(Options, ssoRegExpr);
+ end;
+ try
+ if SynDiffEditActive.SearchReplace(sSearchText, sReplaceText, Options) = 0 then
+ begin
+ if ssoBackwards in Options then
+ begin
+ SynDiffEditActive.BlockEnd := SynDiffEditActive.BlockBegin;
+ end
+ else
+ begin
+ SynDiffEditActive.BlockBegin := SynDiffEditActive.BlockEnd;
+ end;
+ SynDiffEditActive.CaretXY := SynDiffEditActive.BlockBegin;
+ msgOK(Format(rsViewNotFound, ['"' + sSearchText + '"']));
+ end;
+ except
+ on E: Exception do msgError(E.Message);
+ end;
+end;
+
+procedure TfrmDiffer.ShowSearchReplaceDialog(AReplace: boolean);
+var
+ dlg: TfrmEditSearchReplace;
+begin
+ dlg := TfrmEditSearchReplace.Create(Self, AReplace);
+ with dlg do try
+ // assign search options
+ SearchBackwards := bSearchBackwards;
+ SearchCaseSensitive := bSearchCaseSensitive;
+ SearchFromCursor := bSearchFromCaret;
+ SearchInSelectionOnly := bSearchSelectionOnly;
+ SearchRegExp := bSearchRegExp;
+ // start with last search text
+ SearchText := sSearchText;
+ // if something is selected search for that text
+ if SynDiffEditActive.SelAvail and (SynDiffEditActive.BlockBegin.Y = SynDiffEditActive.BlockEnd.Y) then
+ begin
+ SearchText := SynDiffEditActive.SelText;
+ end
+ else
+ begin
+ SearchText := SynDiffEditActive.GetWordAtRowCol(SynDiffEditActive.CaretXY);
+ end;
+ SearchTextHistory := glsSearchHistory.Text;
+ if AReplace then
+ with dlg as TfrmEditSearchReplace do
+ begin
+ ReplaceText := sReplaceText;
+ ReplaceTextHistory := glsReplaceHistory.Text;
+ end;
+ SearchWholeWords := bSearchWholeWords;
+ if ShowModal = mrOK then
+ begin
+ bSearchBackwards := SearchBackwards;
+ bSearchCaseSensitive := SearchCaseSensitive;
+ bSearchFromCaret := SearchFromCursor;
+ bSearchSelectionOnly := SearchInSelectionOnly;
+ bSearchWholeWords := SearchWholeWords;
+ bSearchRegExp := SearchRegExp;
+ sSearchText := SearchText;
+ glsSearchHistory.Text := SearchTextHistory;
+ if AReplace then
+ with dlg as TfrmEditSearchReplace do
+ begin
+ sReplaceText := ReplaceText;
+ glsReplaceHistory.Text := ReplaceTextHistory;
+ end;
+ if sSearchText <> '' then
+ begin
+ DoSearchReplaceText(AReplace, bSearchBackwards);
+ bSearchFromCaret:= True;
+ gFirstTextSearch:= False;
+ end;
+ end;
+ finally
+ FreeAndNil(dlg);
+ end;
+end;
+
+function TfrmDiffer.GetDisplayNumber(LineNumber: Integer): Integer;
+var
+ I: Integer;
+begin
+ Result := 1;
+ for I := 0 to SynDiffEditActive.Lines.Count - 1 do
+ begin
+ if SynDiffEditActive.Lines.Number[I] = LineNumber then
+ begin
+ Result := I + 1;
+ Break;
+ end;
+ end;
+end;
+
procedure TfrmDiffer.BinaryCompareFinish;
begin
BinaryCompare:= nil;
@@ -841,6 +996,81 @@ begin
Close;
end;
+procedure TfrmDiffer.cm_EditFind(const Params: array of string);
+begin
+ if not actBinaryCompare.Checked then
+ begin
+ ShowSearchReplaceDialog(False);
+ end;
+end;
+
+procedure TfrmDiffer.cm_EditFindNext(const Params:array of string);
+begin
+ if not actBinaryCompare.Checked then
+ begin
+ if gFirstTextSearch then
+ begin
+ ShowSearchReplaceDialog(False);
+ Exit;
+ end;
+ if sSearchText <> '' then
+ begin
+ DoSearchReplaceText(False, bSearchBackwards);
+ bSearchFromCaret:= True;
+ end;
+ end;
+end;
+
+procedure TfrmDiffer.cm_EditFindPrevious(const Params: array of string);
+begin
+ if not actBinaryCompare.Checked then
+ begin
+ if gFirstTextSearch then
+ begin
+ bSearchBackwards:=True;
+ ShowSearchReplaceDialog(False);
+ Exit;
+ end;
+ if sSearchText <> '' then
+ begin
+ SynDiffEditActive.SelEnd:=SynDiffEditActive.SelStart;
+ DoSearchReplaceText(False, True);
+ bSearchFromCaret:= True;
+ end;
+ end;
+end;
+
+procedure TfrmDiffer.cm_EditRplc(const Params:array of string);
+begin
+ if not actBinaryCompare.Checked then
+ begin
+ ShowSearchReplaceDialog(True);
+ end;
+end;
+
+procedure TfrmDiffer.cm_EditGotoLine(const Params:array of string);
+var
+ P: TPoint;
+ Value: String;
+ NewTopLine: Integer;
+begin
+ if not actBinaryCompare.Checked then
+ begin
+ if ShowInputQuery(rsEditGotoLineTitle, rsEditGotoLineQuery, Value) then
+ begin
+ P.X := 1;
+ P.Y := GetDisplayNumber(StrToIntDef(Value, 1));
+ NewTopLine := P.Y - (SynDiffEditActive.LinesInWindow div 2);
+ if NewTopLine < 1 then begin
+ NewTopLine := 1;
+ end;
+ SynDiffEditActive.CaretXY := P;
+ SynDiffEditActive.TopLine := NewTopLine;
+ SynDiffEditActive.SetFocus;
+ end;
+ end;
+end;
+
procedure TfrmDiffer.cm_FirstDifference(const Params: array of string);
var
Line: Integer;
diff --git a/doublecmd-1.0.0.orig/src/uglobs.pas b/doublecmd-1.0.0/src/uglobs.pas
index dac1bd7..02a3103 100755
--- a/doublecmd-1.0.0.orig/src/uglobs.pas
+++ b/doublecmd-1.0.0/src/uglobs.pas
@@ -1151,6 +1151,12 @@ begin
with HMForm.Hotkeys do
begin
AddIfNotExists(['Ctrl+R'],[],'cm_Reload');
+ AddIfNotExists([SmkcSuper + 'F' ,'','',
+ 'F7' ,'',''],'cm_EditFind');
+ AddIfNotExists(['F3'],[],'cm_EditFindNext');
+ AddIfNotExists(['Shift+F3'],[],'cm_EditFindPrevious');
+ AddIfNotExists(VK_H, [ssModifier], 'cm_EditRplc');
+ AddIfNotExists(VK_G, [ssModifier], 'cm_EditGotoLine');
AddIfNotExists(['Alt+Down'],[],'cm_NextDifference');
AddIfNotExists(['Alt+Up'],[],'cm_PrevDifference');
AddIfNotExists(['Alt+Home'],[],'cm_FirstDifference');
| ||||
| Fixed in Revision | |||||
| Operating system | |||||
| Widgetset | |||||
| Architecture | |||||
|
|
Для команды "Заменить..." по умолчанию выбрана горячая клавиша Ctrl+H, поскольку Ctrl+R уже занята для "Перезагрузить". Возможно, горячие клавиши Ctrl+R для "Заменить..." (как во встроенном редакторе) и, например, F5 для "Перезагрузить" были бы более предпочтительны для унификации интерфейса. Между пунктами меню "Вырезать"/"Копировать"/"Вставить"/"Удалить" и пунктом "Выделить всё" удалён разделитель, т.к. во встроенных просмотрщике и редакторе он также отсутствует. Однако во многих приложениях разделитель между ними присутствует. Возможно, необходимо оставить его, добавить во встроенных просмотрщике и редакторе. |
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 2019-09-27 23:25 | liquidvacuum | New Issue | |
| 2019-09-27 23:25 | liquidvacuum | File Added: 05-differ-find.diff | |
| 2019-09-28 00:12 | liquidvacuum | Note Added: 0003278 | |
| 2022-04-16 11:26 | Alexx2000 | Status | new => resolved |
| 2022-04-16 11:26 | Alexx2000 | Fixed in Version | => 1.1.0 |
| 2022-04-16 11:26 | Alexx2000 | Resolution | open => fixed |
| 2022-04-16 11:26 | Alexx2000 | Assigned To | => Alexx2000 |