我正在考虑用C#编写控制台应用程序,并希望像GNU readline一样加入历史记录、自动完成和命令行编辑功能(不一定像那么复杂!)
是否有现有的.NET库提供这种类型的功能?我猜一个选项是使用Interop服务调用GNU readline。但是否有本地选项?
我正在考虑用C#编写控制台应用程序,并希望像GNU readline一样加入历史记录、自动完成和命令行编辑功能(不一定像那么复杂!)
是否有现有的.NET库提供这种类型的功能?我猜一个选项是使用Interop服务调用GNU readline。但是否有本地选项?
你可能会想要查看Miguel de Icaza的getline.cs(博客文章中的链接已经失效,代码现在可以在此处找到)。根据你实际所需的readline功能,这可能已经足够满足你的需求了。
好的一点是,它全部包含在一个文件中(因此称为getline.cs),并采用MIT X11许可证。
使用它非常容易。
如果你想尝试一下,只需下载该文件并编译即可:
C:\> csc.exe /d:DEMO getline.cs
C:\> getline.exe
shell>
#ifdef DEMO
部分还展示了基本的 REPL:
var le = new LineEditor("whatever");
string s;
while ((s = le.Edit("my prompt> ", "")) != null)
{
// User input from command line / prompt now in "s".
}
虽然这是一个老问题,但仍然与谷歌搜索结果相关。现在有一个好的选择https://github.com/tonerdo/readline。引用它的README:
ReadLine是一个纯C#编写的GNU Readline库。它可以作为内置
Console.ReadLine()
的替代品,并带有一些类似于Unix shell的终端功能,例如命令历史记录导航和标签自动完成。它是跨平台的,在任何支持.NET的地方运行,目标是netstandard1.3,这意味着它可以与.NET Core以及完整的.NET Framework一起使用。
该项目使用MIT许可证。
我所知道的唯一选择是Mono-Readline。
它为GNU Readline库提供了.NET接口,但版本只有0.0.1,而且据我所知,它只能在Mono运行时上运行。
同时,你需要注意许可证问题......据我所知,任何链接GNU Readline库的内容都必须在GPL下发布。