/// <inheritdoc/> T IPrompt <T> .Show(IAnsiConsole console) { if (!console.Profile.Capabilities.Interactive) { throw new NotSupportedException( "Cannot show selection prompt since the current " + "terminal isn't interactive."); } if (!console.Profile.Capabilities.Ansi) { throw new NotSupportedException( "Cannot show selection prompt since the current " + "terminal does not support ANSI escape sequences."); } return(console.RunExclusive(() => { var converter = Converter ?? TypeConverterHelper.ConvertToString; var list = new RenderableSelectionList <T>( console, Title, PageSize, Choices, converter, HighlightStyle, MoreChoicesText); using (new RenderHookScope(console, list)) { console.Cursor.Hide(); list.Redraw(); while (true) { var key = console.Input.ReadKey(true); if (key.Key == ConsoleKey.Enter || key.Key == ConsoleKey.Spacebar) { break; } if (list.Update(key.Key)) { list.Redraw(); } } } list.Clear(); console.Cursor.Show(); return Choices[list.Index]; })); }
/// <inheritdoc/> public List <T> Show(IAnsiConsole console) { if (console is null) { throw new ArgumentNullException(nameof(console)); } if (!console.Profile.Capabilities.Interactive) { throw new NotSupportedException( "Cannot show multi selection prompt since the current " + "terminal isn't interactive."); } if (!console.Profile.Capabilities.Ansi) { throw new NotSupportedException( "Cannot show multi selection prompt since the current " + "terminal does not support ANSI escape sequences."); } return(console.RunExclusive(() => { var converter = Converter ?? TypeConverterHelper.ConvertToString; var list = new RenderableMultiSelectionList <T>( console, Title, PageSize, Choices, Selected, converter, HighlightStyle, MoreChoicesText, InstructionsText); using (new RenderHookScope(console, list)) { console.Cursor.Hide(); list.Redraw(); while (true) { var key = console.Input.ReadKey(true); if (key.Key == ConsoleKey.Enter) { if (Required && list.Selections.Count == 0) { continue; } break; } if (key.Key == ConsoleKey.Spacebar) { list.Select(); list.Redraw(); continue; } if (list.Update(key.Key)) { list.Redraw(); } } } list.Clear(); console.Cursor.Show(); return list.Selections .Select(index => Choices[index]) .ToList(); })); }