Controlling completion in a text editor

Completion can be added to any editor through a GtCompletionController Object << #GtCompletionController slots: { #completionDelay . #textElement . #attribute . #overlay . #listElement . #previewAction . #drillDownActions . #announcer . #lostFocusDelay . #closeOnEmptyCompletion . #textEditorHandlers . #textElementFilters . #popupHandlers . #textElementRemovedDelay . #showOnTextModification . #completer . #completionResult . #showPreviewAttributes }; sharedVariables: { #PopupDelay . #CompleteOnReturn }; tag: 'UI'; package: 'GToolkit-Completer' that contains a so called GtCompletionStrategy Object << #GtCompletionStrategy slots: {}; tag: 'Strategies'; package: 'GToolkit-Completer' .

The simplest strategy is based on a collection of strings. For example, the following editor offers a completion anywhere for the class names from the image:

editor := BrEditor new
		aptitude: BrGlamorousCodeEditorAptitude new;
		text: 'Type a capital letter to get completion for class names.'.
tree := GtPrefixTree new.
Object withAllSubclassesDo: [ :c | tree add: c name ].
completionStrategy := GtStringsCompletionStrategy new completions: tree.
completionController := GtCompletionController
		on: editor
		strategy: completionStrategy.
completionController install.
editor 
  

But sometimes, we might want to have a special completion just on a part of the text. That can be accomplished through a dedicated GtCompletionStrategyAttribute BlTextAttribute << #GtCompletionStrategyAttribute slots: { #strategy }; tag: 'Attributes'; package: 'GToolkit-Completer' that can be installed on only a part of the text:

text := 'Type only in the blue part a capital letter to get completion for class names.'
		asRopedText.
editor := BrEditor new
		aptitude: BrGlamorousCodeEditorAptitude new;
		text: text.
tree := GtPrefixTree new.
Object withAllSubclassesDo: [ :c | tree add: c name ].
completionStrategy := GtStringsCompletionStrategy new completions: tree.
(GtCompletionController on: editor) install.
(text from: 1 to: 26)
	foreground: Color blue;
	attribute: (GtCompletionStrategyAttribute new strategy: completionStrategy).
editor
  

Combining this the completion strategy attribute with a styler allows you to build highly contextual completion behaviors. See more details about styling at Constructing a text editor with styling.