diff --git a/Terminal.Gui/Core/Autocomplete/AutocompleteBase.cs b/Terminal.Gui/Core/Autocomplete/AutocompleteBase.cs index b9787b199..8a0faf168 100644 --- a/Terminal.Gui/Core/Autocomplete/AutocompleteBase.cs +++ b/Terminal.Gui/Core/Autocomplete/AutocompleteBase.cs @@ -6,6 +6,17 @@ using System.Text; using Rune = System.Rune; namespace Terminal.Gui { + public class AutocompleteContext + { + public List CurrentLine { get; set; } + public int Idx { get; set; } + + public AutocompleteContext (List currentLine, int idx) + { + CurrentLine = currentLine; + Idx = idx; + } + } public abstract class AutocompleteBase : IAutocomplete { @@ -65,9 +76,9 @@ namespace Terminal.Gui { /// - public virtual void GenerateSuggestions (List currentLine, int idx) + public virtual void GenerateSuggestions (AutocompleteContext context) { - Suggestions = SuggestionGenerator.GenerateSuggestions (currentLine, idx).ToList ().AsReadOnly (); + Suggestions = SuggestionGenerator.GenerateSuggestions (context).ToList ().AsReadOnly (); EnsureSelectedIdxIsValid (); } diff --git a/Terminal.Gui/Core/Autocomplete/IAutocomplete.cs b/Terminal.Gui/Core/Autocomplete/IAutocomplete.cs index 7c5e303af..42aa632ce 100644 --- a/Terminal.Gui/Core/Autocomplete/IAutocomplete.cs +++ b/Terminal.Gui/Core/Autocomplete/IAutocomplete.cs @@ -105,9 +105,9 @@ namespace Terminal.Gui { /// /// Populates with all - /// proposed by at the given - /// of + /// proposed by at the given + /// (cursor position) /// - void GenerateSuggestions (List currentLine, int idx); + void GenerateSuggestions (AutocompleteContext context); } } diff --git a/Terminal.Gui/Core/Autocomplete/ISuggestionGenerator.cs b/Terminal.Gui/Core/Autocomplete/ISuggestionGenerator.cs index b2eee350f..ba34e69d6 100644 --- a/Terminal.Gui/Core/Autocomplete/ISuggestionGenerator.cs +++ b/Terminal.Gui/Core/Autocomplete/ISuggestionGenerator.cs @@ -8,10 +8,9 @@ namespace Terminal.Gui { public interface ISuggestionGenerator { /// - /// Generates autocomplete based on a given cursor location - /// within a + /// Generates autocomplete based on a given /// - IEnumerable GenerateSuggestions (List currentLine, int idx); + IEnumerable GenerateSuggestions (AutocompleteContext context); bool IsWordChar (Rune rune); diff --git a/Terminal.Gui/Core/Autocomplete/SingleWordSuggestionGenerator.cs b/Terminal.Gui/Core/Autocomplete/SingleWordSuggestionGenerator.cs index a9a116bad..71a2cdb47 100644 --- a/Terminal.Gui/Core/Autocomplete/SingleWordSuggestionGenerator.cs +++ b/Terminal.Gui/Core/Autocomplete/SingleWordSuggestionGenerator.cs @@ -12,14 +12,14 @@ namespace Terminal.Gui { /// public virtual List AllSuggestions { get; set; } = new List (); - public IEnumerable GenerateSuggestions (List currentLine, int idx) + public IEnumerable GenerateSuggestions (AutocompleteContext context) { // if there is nothing to pick from if (AllSuggestions.Count == 0) { return Enumerable.Empty (); } - var currentWord = IdxToWord (currentLine, idx); + var currentWord = IdxToWord (context.CurrentLine, context.Idx); if (string.IsNullOrWhiteSpace (currentWord)) { return Enumerable.Empty (); diff --git a/Terminal.Gui/Views/TextField.cs b/Terminal.Gui/Views/TextField.cs index 9e083a064..e2a3f4a13 100644 --- a/Terminal.Gui/Views/TextField.cs +++ b/Terminal.Gui/Views/TextField.cs @@ -486,7 +486,9 @@ namespace Terminal.Gui { var currentLine = Text.ToRuneList (); var cursorPosition = Math.Min (this.CursorPosition, currentLine.Count); - Autocomplete.GenerateSuggestions(currentLine,cursorPosition); + Autocomplete.GenerateSuggestions( + new AutocompleteContext(currentLine,cursorPosition) + ); } /// diff --git a/Terminal.Gui/Views/TextView.cs b/Terminal.Gui/Views/TextView.cs index a9823b349..3b056a083 100644 --- a/Terminal.Gui/Views/TextView.cs +++ b/Terminal.Gui/Views/TextView.cs @@ -2440,7 +2440,9 @@ namespace Terminal.Gui { { var currentLine = this.GetCurrentLine (); var cursorPosition = Math.Min (this.CurrentColumn, currentLine.Count); - Autocomplete.GenerateSuggestions(currentLine,cursorPosition); + Autocomplete.GenerateSuggestions( + new AutocompleteContext(currentLine,cursorPosition) + ); } /// diff --git a/UnitTests/Views/AutocompleteTests.cs b/UnitTests/Views/AutocompleteTests.cs index d570efe57..18a28d8d7 100644 --- a/UnitTests/Views/AutocompleteTests.cs +++ b/UnitTests/Views/AutocompleteTests.cs @@ -30,7 +30,9 @@ namespace Terminal.Gui.ViewTests { tv.InsertText ("co"); ac.HostControl = tv; - ac.GenerateSuggestions (tv.Text.ToRuneList(),2); + ac.GenerateSuggestions ( + new AutocompleteContext( + tv.Text.ToRuneList(),2)); Assert.Equal (2, ac.Suggestions.Count); Assert.Equal ("const", ac.Suggestions [0].Title);