One feature that has been requested from several customers is the ability to show a completion list in response to starting to type a new word. This functionality can be seen in Visual Studio 2008. It can be thought of the same as typing in a letter that is a new word, and clicking on the VS 2008 “Display an object member list” button.
Displaying a completion list in response to a language-specific character
A previous build already added a property into the document text changed event arguments called e.TypedText that is filled in only if the text change was caused due to a single typing operation, in which case it contains the text that was typed by the end user. This allows you to handle that scenario (either via the SyntaxEditor.DocumentTextChanged event or via an IEditorDocumentTextChangeEventSink service implementation) and show a completion list when characters like “.” or “<” are typed. Of course the characters you respond to depend on the language in use.
Here is a sample of how to display an JavaScript completion list in one of those handlers in response to a “.” character being typed:
1: switch (e.TypedText) {
2: case "<":
3: // Open completion list session here
4: break;
5: }
Note that the completion list code (defined elsewhere) is responsible for knowing what to show and when. These features are already available in the current build.
Displaying a completion list automatically when a new word is starting to be typed
We were thinking how could we make it easy so that customers can also optionally have their languages show a completion list when a new word is starting to be typed. The event args already give you all the information you need to determine if a new word is being typed, however it does involve a few lines of tedious text scanning. So we wrapped it all up into one handy property. Here is the code you’d add to your switch statement above if you wish to support automatic display of the completion list for word starts:
1: switch (e.TypedText) {
2: case "<":
3: // Open completion list session here
4: break;
5: default:
6: // If the text that was typed is a letter char that starts a word...
7: if (e.IsTypedWordStart) {
8: // If no completion session is currently open...
9: if (!editor.IntelliPrompt.Sessions.Contains(
10: IntelliPromptSessionTypes.Completion)) {
11: // Open the completion list session here
12: }
13: }
14: break;
15: }
The new e.IsTypedWordStart property is only true when a single letter character is typed and that letter is starting a new word. The word determination code uses the IWordBreakFinder service defined for your language too.
This new feature will be included in the next WPF Studio 2009.1 maintenance release.