[Lazarus] Automatic identifier completion
Darius Blaszyk
dhkblaszyk at gmail.com
Tue Aug 20 21:51:11 CEST 2019
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 <dhkblaszyk at gmail.com> wrote:
> Now with attachment! 😀
>
> On Tue, Aug 20, 2019 at 6:48 PM Darius Blaszyk <dhkblaszyk at 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 at 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 at lists.lazarus-ide.org
>>> https://lists.lazarus-ide.org/listinfo/lazarus
>>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus/attachments/20190820/bc77f17e/attachment-0001.html>
More information about the lazarus
mailing list