From fe2d5149a5c544524098f1b4791e2211cf5eca9a Mon Sep 17 00:00:00 2001 From: Ansgar Becker Date: Thu, 18 Aug 2011 06:41:49 +0000 Subject: [PATCH] Add support for \t and \n for replacement in search+replace dialog. Accepting a multi line bug in SynEdit, which forces the user to search backwards when using \n in replacement. See http://www.heidisql.com/forum.php?t=8977 --- source/main.pas | 11 ++++++++++- source/searchreplace.dfm | 26 +++++++++++++++++--------- source/searchreplace.pas | 2 ++ 3 files changed, 29 insertions(+), 10 deletions(-) diff --git a/source/main.pas b/source/main.pas index 95a37995..54109b32 100644 --- a/source/main.pas +++ b/source/main.pas @@ -3188,21 +3188,30 @@ procedure TMainForm.DoSearchReplace; var Occurences: Integer; OldCaretXY: TBufferCoord; + Replacement: String; begin if FSearchReplaceDialog.chkRegularExpression.Checked then FSearchReplaceDialog.Editor.SearchEngine := SynEditRegexSearch1 else FSearchReplaceDialog.Editor.SearchEngine := SynEditSearch1; + OldCaretXY := FSearchReplaceDialog.Editor.CaretXY; + Replacement := FSearchReplaceDialog.comboReplace.Text; + Replacement := StringReplace(Replacement, '\n', CRLF, [rfReplaceAll]); + Replacement := StringReplace(Replacement, '\t', #9, [rfReplaceAll]); + FSearchReplaceDialog.Editor.BeginUpdate; + ShowStatusMsg('Searching ...'); Occurences := FSearchReplaceDialog.Editor.SearchReplace( FSearchReplaceDialog.comboSearch.Text, - FSearchReplaceDialog.comboReplace.Text, + Replacement, FSearchReplaceDialog.Options ); + FSearchReplaceDialog.Editor.EndUpdate; ShowStatusMsg; + if ssoReplaceAll in FSearchReplaceDialog.Options then ShowStatusMsg('Text "'+FSearchReplaceDialog.comboSearch.Text+'" '+FormatNumber(Occurences)+' times replaced.', 0) else begin diff --git a/source/searchreplace.dfm b/source/searchreplace.dfm index b8e7baaf..20a23dd5 100644 --- a/source/searchreplace.dfm +++ b/source/searchreplace.dfm @@ -3,7 +3,7 @@ object frmSearchReplace: TfrmSearchReplace Top = 0 BorderStyle = bsDialog Caption = 'Search and replace text' - ClientHeight = 236 + ClientHeight = 256 ClientWidth = 388 Color = clBtnFace Font.Charset = DEFAULT_CHARSET @@ -19,7 +19,7 @@ object frmSearchReplace: TfrmSearchReplace OnShow = FormShow DesignSize = ( 388 - 236) + 256) PixelsPerInch = 96 TextHeight = 13 object lblSearch: TLabel @@ -30,9 +30,17 @@ object frmSearchReplace: TfrmSearchReplace Caption = '&Text to find:' FocusControl = comboSearch end + object lblReplaceHint: TLabel + Left = 90 + Top = 58 + Width = 259 + Height = 13 + Caption = 'Replacement can have \n for new lines and \t for tabs' + Enabled = False + end object btnCancel: TButton Left = 305 - Top = 203 + Top = 223 Width = 75 Height = 25 Anchors = [akRight, akBottom] @@ -43,7 +51,7 @@ object frmSearchReplace: TfrmSearchReplace end object btnReplaceAll: TButton Left = 224 - Top = 203 + Top = 223 Width = 75 Height = 25 Anchors = [akRight, akBottom] @@ -85,7 +93,7 @@ object frmSearchReplace: TfrmSearchReplace end object grpOptions: TGroupBox Left = 8 - Top = 60 + Top = 80 Width = 372 Height = 69 Anchors = [akLeft, akTop, akRight] @@ -129,7 +137,7 @@ object frmSearchReplace: TfrmSearchReplace end object grpDirection: TRadioGroup Left = 8 - Top = 135 + Top = 155 Width = 120 Height = 62 Anchors = [akLeft, akTop, akBottom] @@ -142,7 +150,7 @@ object frmSearchReplace: TfrmSearchReplace end object grpOrigin: TRadioGroup Left = 134 - Top = 135 + Top = 155 Width = 120 Height = 62 Anchors = [akLeft, akTop, akBottom] @@ -155,7 +163,7 @@ object frmSearchReplace: TfrmSearchReplace end object grpScope: TRadioGroup Left = 260 - Top = 135 + Top = 155 Width = 120 Height = 62 Anchors = [akLeft, akTop, akRight, akBottom] @@ -168,7 +176,7 @@ object frmSearchReplace: TfrmSearchReplace end object btnOK: TButton Left = 143 - Top = 203 + Top = 223 Width = 75 Height = 25 Anchors = [akRight, akBottom] diff --git a/source/searchreplace.pas b/source/searchreplace.pas index 0a091417..e7f879ee 100644 --- a/source/searchreplace.pas +++ b/source/searchreplace.pas @@ -23,6 +23,7 @@ type grpOrigin: TRadioGroup; grpScope: TRadioGroup; btnOK: TButton; + lblReplaceHint: TLabel; procedure ValidateControls(Sender: TObject); procedure chkReplaceClick(Sender: TObject); procedure FormShow(Sender: TObject); @@ -122,6 +123,7 @@ begin comboReplace.Enabled := chkReplace.Checked; chkPromptOnReplace.Enabled := chkReplace.Checked; btnReplaceAll.Enabled := chkReplace.Checked; + lblReplaceHint.Enabled := chkReplace.Checked; if chkReplace.Checked then btnOK.Caption := 'Replace' else