Index: ide/editoroptions.pp =================================================================== --- ide/editoroptions.pp (revision 61726) +++ ide/editoroptions.pp (working copy) @@ -1406,6 +1406,7 @@ TEditorOptions = class(TIDEEditorOptions) private FBlockTabIndent: Integer; + fAutoShowCompletion: Boolean; FCompletionLongLineHintInMSec: Integer; FCompletionLongLineHintType: TSynCompletionLongHintType; FMiddleTabClickClosesOthersModifier: TShiftState; @@ -1702,6 +1703,8 @@ write FAutoRemoveEmptyMethods default False; property CompletionLongLineHintInMSec: Integer read FCompletionLongLineHintInMSec write FCompletionLongLineHintInMSec; + property AutoShowCompletion: Boolean + read fAutoShowCompletion write fAutoShowCompletion; published property CompletionLongLineHintType: TSynCompletionLongHintType read FCompletionLongLineHintType write FCompletionLongLineHintType @@ -5006,6 +5009,11 @@ XMLConfig.GetValue('EditorOptions/CodeTools/AutoRemoveEmptyMethods', False); FCompletionLongLineHintInMSec :=
XMLConfig.GetValue('EditorOptions/CodeTools/CompletionLongLineHintInMSec', 0); + + fAutoShowCompletion := + XMLConfig.GetValue('EditorOptions/CodeTools/AutoShowCompletion', False); + DebugLn('TEditorOptions: Load Editor option AutoShowCompletion %s', [BoolToStr(fAutoShowCompletion, True)]); + FCompletionLongLineHintType := DefaultCompletionLongLineHintType; XMLConfig.ReadObject('EditorOptions/CodeTools/CompletionLongLineHintType', Self, Self, 'CompletionLongLineHintType'); @@ -5207,6 +5215,13 @@ XMLConfig.SetDeleteValue( 'EditorOptions/CodeTools/CompletionLongLineHintInMSec', FCompletionLongLineHintInMSec, 0); + + DebugLn('TEditorOptions: Write Editor option AutoShowCompletion %s', [BoolToStr(fAutoShowCompletion, True)]); + XMLConfig.SetDeleteValue( + 'EditorOptions/CodeTools/AutoShowCompletion', + fAutoShowCompletion, False); + + XMLConfig.WriteObject('EditorOptions/CodeTools/CompletionLongLineHintType', Self, nil, 'CompletionLongLineHintType'); Index: ide/frames/editor_codetools_options.lfm =================================================================== --- ide/frames/editor_codetools_options.lfm (revision 61726) +++ ide/frames/editor_codetools_options.lfm (working copy) @@ -16,10 +16,10 @@ AnchorSideLeft.Control = AutoCompletionDelayLabel AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = AutoCompletionDelayLabel - Left = 172 - Height = 15 - Top = 156 - Width = 83 + Left = 212 + Height = 17 + Top = 168 + Width = 107 BorderSpacing.Left = 20 Caption = 'AutoDelayLabel' ParentColor = False @@ -32,7 +32,7 @@ AnchorSideRight.Side = asrBottom Left = 0 Height = 3 - Top = 56 + Top = 60 Width = 634 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 @@ -42,9 +42,9 @@ AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner Left = 6 - Height = 19 + Height = 21 Top = 6 - Width = 210 + Width = 263 BorderSpacing.Left = 6 BorderSpacing.Top = 6 Caption = 'AutoRemoveEmptyMethodsOnSave' @@ -55,9 +55,9 @@ AnchorSideTop.Control = AutoDisplayFuncProtoCheckBox AnchorSideTop.Side = asrBottom Left = 6 - Height = 19 - Top = 87 - Width = 198 + Height = 21 + Top = 93 + Width = 245 BorderSpacing.Left = 6 BorderSpacing.Top = 6 Caption = 'AutoToolTipSymbToolsCheckBox' @@ -68,9 +68,9 @@ AnchorSideTop.Control = AutoRemoveEmptyMethodsOnSave AnchorSideTop.Side = asrBottom Left = 6 - Height = 19 - Top = 31 - Width = 179 + Height = 21 + Top = 33 + Width = 225 BorderSpacing.Left = 6 BorderSpacing.Top = 6 Caption = 'AutoCompleteBlockCheckBox' @@ -81,9 +81,9 @@ AnchorSideTop.Control = AutoToolTipSymbToolsCheckBox AnchorSideTop.Side = asrBottom Left = 6 - Height = 19 - Top = 112 - Width = 182 + Height = 21 + Top = 120 + Width = 230 BorderSpacing.Left = 6 BorderSpacing.Top = 6 Caption = 'AutoToolTipExprEvalCheckBox' @@ -96,8 +96,8 @@ AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 - Height = 30 - Top = 172 + Height = 39 + Top = 186 Width = 622 Frequency = 250 Max = 4000 @@ -116,9 +116,9 @@ AnchorSideTop.Control = DbgToolTipAutoCastClass AnchorSideTop.Side = asrBottom Left = 6 - Height = 15 - Top = 156 - Width = 146 + Height = 17 + Top = 168 + Width = 186 BorderSpacing.Left = 6 BorderSpacing.Top = 6 Caption = 'AutoCompletionDelayLabel' @@ -131,8 +131,8 @@ AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 - Height = 30 - Top = 276 + Height = 39 + Top = 312 Width = 622 Frequency = 250 Max = 4000 @@ -150,9 +150,9 @@ AnchorSideTop.Control = AutoHintDelayTrackBar AnchorSideTop.Side = asrBottom Left = 6 - Height = 15 - Top = 260 - Width = 148 + Height = 17 + Top = 294 + Width = 188 BorderSpacing.Left = 6 BorderSpacing.Top = 6 Caption = 'CompletionDropDownLabel' @@ -162,10 +162,10 @@ AnchorSideLeft.Control = CompletionDropDownLabel AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = CompletionDropDownLabel - Left = 174 - Height = 15 - Top = 260 - Width = 177 + Left = 214 + Height = 17 + Top = 294 + Width = 225 BorderSpacing.Left = 20 Caption = 'CompletionDropDownDelayLabel' ParentColor = False @@ -177,12 +177,12 @@ AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 6 - Height = 23 - Top = 308 + Height = 29 + Top = 353 Width = 220 BorderSpacing.Left = 6 BorderSpacing.Top = 2 - ItemHeight = 15 + ItemHeight = 0 Style = csDropDownList TabOrder = 7 end @@ -192,9 +192,9 @@ AnchorSideTop.Control = CompletionDropDownHint AnchorSideTop.Side = asrCenter Left = 232 - Height = 15 - Top = 312 - Width = 171 + Height = 17 + Top = 359 + Width = 216 BorderSpacing.Around = 6 Caption = 'CompletionDropDownHintLabel' ParentColor = False @@ -204,9 +204,9 @@ AnchorSideTop.Control = AutoToolTipExprEvalCheckBox AnchorSideTop.Side = asrBottom Left = 26 - Height = 19 - Top = 131 - Width = 159 + Height = 21 + Top = 141 + Width = 198 BorderSpacing.Left = 20 Caption = 'DbgToolTipAutoCastClass' TabOrder = 8 @@ -215,9 +215,9 @@ AnchorSideLeft.Control = Owner AnchorSideTop.Control = ToolTipBevel Left = 6 - Height = 19 - Top = 62 - Width = 191 + Height = 21 + Top = 66 + Width = 241 BorderSpacing.Left = 6 BorderSpacing.Top = 6 Caption = 'AutoDisplayFuncProtoCheckBox' @@ -228,9 +228,9 @@ AnchorSideTop.Control = AutoCompletionDelayTrackBar AnchorSideTop.Side = asrBottom Left = 6 - Height = 15 - Top = 208 - Width = 106 + Height = 17 + Top = 231 + Width = 135 BorderSpacing.Left = 6 BorderSpacing.Top = 6 Caption = 'AutoHintDelayLabel' @@ -243,8 +243,8 @@ AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 - Height = 30 - Top = 224 + Height = 39 + Top = 249 Width = 622 Frequency = 250 Max = 4000 @@ -262,12 +262,25 @@ AnchorSideLeft.Control = AutoHintDelayLabel AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = AutoHintDelayLabel - Left = 132 - Height = 15 - Top = 208 - Width = 92 + Left = 161 + Height = 17 + Top = 231 + Width = 117 BorderSpacing.Left = 20 Caption = 'AutoHDelayLabel' ParentColor = False end + object AutoShowCompletionDropDown: TCheckBox + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = CompletionDropDownHint + AnchorSideTop.Side = asrBottom + Left = 6 + Height = 21 + Top = 388 + Width = 243 + BorderSpacing.Left = 6 + BorderSpacing.Top = 6 + Caption = 'AutoShowCompletionDropDown' + TabOrder = 10 + end end Index: ide/frames/editor_codetools_options.pas =================================================================== --- ide/frames/editor_codetools_options.pas (revision 61726) +++ ide/frames/editor_codetools_options.pas (working copy) @@ -45,6 +45,8 @@ AutoHintDelayTrackBar: TTrackBar; AutoDisplayFuncProtoCheckBox: TCheckBox; AutoHintDelayLabel: TLabel; + AutoRemoveEmptyMethodsOnSave1: TCheckBox; + AutoShowCompletionDropDown: TCheckBox; DbgToolTipAutoCastClass: TCheckBox; CompletionDropDownHintLabel: TLabel; CompletionDropDownHint: TComboBox; @@ -105,6 +107,8 @@ CompletionDropDownHint.Items.Add(lisCompletionLongLineHintTypeRightOnly); CompletionDropDownHint.Items.Add(lisCompletionLongLineHintTypeLittleLeft); CompletionDropDownHint.Items.Add(lisCompletionLongLineHintTypeFullLeft); + + AutoShowCompletionDropDown.Caption := lisAutoShowCompletion; end; procedure TEditorCodetoolsOptionsFrame.ReadSettings(AOptions: TAbstractIDEOptions); @@ -123,6 +127,7 @@ CompletionDropDownHintTrackBar.Position := CompletionLongLineHintInMSec; CompletionDropDownHint.ItemIndex := ord(CompletionLongLineHintType); + AutoShowCompletionDropDown.Checked := AutoShowCompletion; end; AutoCompletionDelayTrackBarChange(nil); end; @@ -142,7 +147,7 @@ CompletionLongLineHintInMSec := CompletionDropDownHintTrackBar.Position; CompletionLongLineHintType := TSynCompletionLongHintType(CompletionDropDownHint.ItemIndex); - + AutoShowCompletion := AutoShowCompletionDropDown.Checked; end; end; Index: ide/lazarusidestrconsts.pas =================================================================== --- ide/lazarusidestrconsts.pas (revision 61726) +++ ide/lazarusidestrconsts.pas (working copy) @@ -2040,6 +2040,7 @@ lisDelayForCompletionBox = 'Delay for completion box'; lisDelayForHints = 'Delay for hints'; lisDelayForCompletionLongLineHint = 'Delay for long line hints in completion box'; + lisAutoShowCompletion = 'Automatic code completion'; lisCompletionLongLineHintType = 'Show long line hints'; lisCompletionLongLineHintTypeNone = 'Never'; lisCompletionLongLineHintTypeRightOnly = 'Extend right only'; Index: ide/sourceeditor.pp =================================================================== --- ide/sourceeditor.pp (revision 61726) +++ ide/sourceeditor.pp (working copy) @@ -5743,6 +5743,11 @@ OnKeyDown(Sender, Key, Shift); IDECommandList.PostponeUpdateEvents; + + // very crude invokaion of identifier completion + if EditorOpts.AutoShowCompletion then + if (chr(Key) in ['a'..'z', 'A'..'Z']) and (Shift <> [ssCtrl]) and (Shift <> [ssAlt]) and (Shift <> [ssAltGr]) then + StartIdentCompletionBox(false,false); end; procedure TSourceEditor.EditorKeyUp(Sender: TObject; var Key: Word; On Tue, Aug 20, 2019 at 6:54 PM Darius Blaszyk <dhkblas...@gmail.com> wrote: > Now with attachment! 😀 > > On Tue, Aug 20, 2019 at 6:48 PM Darius Blaszyk <dhkblas...@gmail.com> > wrote: > >> Hi! >> >> Attached a (still) naive patch that implements automatic completion upon >> keypress. It's already giving me a big boost in productivity so I thought I >> might share it here. It would be good to make the identifier invocation a >> bit smarter. For instance I would like to prevent invocation in case the >> word is part of a string or comment. Also it should auto hide after the >> first character gets deleted by backspace. Any tips or hints how to use the >> codetools to get the required information is appreciated! >> >> Rgds, Darius Blaszyk >> >> On Fri, Aug 16, 2019 at 10:55 PM Martin Frb via lazarus < >> lazarus@lists.lazarus-ide.org> wrote: >> >>> On 16/08/2019 19:07, Darius Blaszyk via lazarus wrote: >>> > Hi, >>> > >>> > I know about code completion in the IDE and it works perfectly! >>> > However, to invoke it I need to press CRTL-space every time which is >>> > somewhat cumbersome. Is there a setting in the IDE that would invoke >>> > completion automatically on keypress? >>> > >>> It can auto invoke after you enter a dot "form1." >>> But otherwise not. >>> >>> See https://bugs.freepascal.org/view.php?id=33054 >>> -- >>> _______________________________________________ >>> lazarus mailing list >>> lazarus@lists.lazarus-ide.org >>> https://lists.lazarus-ide.org/listinfo/lazarus >>> >>
-- _______________________________________________ lazarus mailing list lazarus@lists.lazarus-ide.org https://lists.lazarus-ide.org/listinfo/lazarus