ConsoleMenu
A simple, highly customizable, DOS-like console menu
Install / Use
/learn @lechu445/ConsoleMenuREADME
ConsoleMenu
A simple, highly customizable, DOS-like console menu

Nuget package: https://www.nuget.org/packages/ConsoleMenu-simple
Usage
var subMenu = new ConsoleMenu(args, level: 1)
.Add("Sub_One", () => SomeAction("Sub_One"))
.Add("Sub_Two", () => SomeAction("Sub_Two"))
.Add("Sub_Three", () => SomeAction("Sub_Three"))
.Add("Sub_Four", () => SomeAction("Sub_Four"))
.Add("Sub_Close", ConsoleMenu.Close)
.Configure(config =>
{
config.Selector = "--> ";
config.EnableFilter = true;
config.Title = "Submenu";
config.EnableBreadcrumb = true;
config.WriteBreadcrumbAction = titles => Console.WriteLine(string.Join(" / ", titles));
});
var menu = new ConsoleMenu(args, level: 0)
.Add("One", () => SomeAction("One"))
.Add("Two", () => SomeAction("Two"))
.Add("Three", () => SomeAction("Three"))
.Add("Sub", subMenu.Show)
.Add("Change me", (thisMenu) => thisMenu.CurrentItem.Name = "I am changed!")
.Add("Close", ConsoleMenu.Close)
.Add("Action then Close", (thisMenu) => { SomeAction("Close"); thisMenu.CloseMenu(); })
.Add("Exit", () => Environment.Exit(0))
.Configure(config =>
{
config.Selector = "--> ";
config.EnableFilter = true;
config.Title = "Main menu";
config.EnableWriteTitle = true;
config.EnableBreadcrumb = true;
});
menu.Show();
Running app from console with pre-selected menu items
To do this, use public ConsoleMenu(string[] args, int level) constructor during initialization.
Use double quotes for item names and digits for item numbers. Here are some examples:
--menu-select=0.1 //run first at level 0 and second at level 1
--menu-select="Sub.Sub_One.'Close...'" //run "Sub" at level 0 and "Sub_One" at level 1, and "Close..." at level 2
--menu-select="Sub.2" //run item "Sub" at level 0, and then run third item at level 1
Configuration
You can also define configuration via .Configure() method. The default config looks like:
public class MenuConfig
{
public ConsoleColor SelectedItemBackgroundColor = Console.ForegroundColor;
public ConsoleColor SelectedItemForegroundColor = Console.BackgroundColor;
public ConsoleColor ItemBackgroundColor = Console.BackgroundColor;
public ConsoleColor ItemForegroundColor = Console.ForegroundColor;
public Encoding InputEncoding = Console.InputEncoding;
public Encoding OutputEncoding = Console.OutputEncoding;
public Action WriteHeaderAction = () => Console.WriteLine("Pick an option:");
public Action<MenuItem> WriteItemAction = item => Console.Write("[{0}] {1}", item.Index, item.Name);
public string Selector = ">> ";
public string FilterPrompt = "Filter: ";
public bool ClearConsole = true;
public bool EnableFilter = false;
public string ArgsPreselectedItemsKey = "--menu-select=";
public char ArgsPreselectedItemsValueSeparator = '.';
public bool EnableWriteTitle = false;
public string Title = "My menu";
public Action<string> WriteTitleAction = title => Console.WriteLine(title);
public bool EnableBreadcrumb = false;
public Action<IReadOnlyList<string>> WriteBreadcrumbAction = titles => Console.WriteLine(string.Join(" > ", titles));
public bool EnableAlphabet = false;
}
Example:
new ConsoleMenu()
.Add("One", () => SomeAction("One"))
.Add("Two", () => SomeAction("Two"))
.Add("Close", ConsoleMenu.Close)
.Configure(config => { config.Selector = "--> "; })
.Show();
Requirements
Framework compatible with .NET Standard 1.3 (.NET Core 1.0, .NET Framework 4.6, Mono 4.6) or higher.
Related Skills
node-connect
349.7kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
109.7kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
349.7kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
349.7kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
