我正在考虑在C#中编写一个控制台应用程序,我希望将历史,完成和命令行编辑功能纳入GNU readline(但不一定非常广泛!)
是否有.net的现有库提供此类功能?我想一个选择是使用互操作服务来调用GNU readline。但是有原生选择吗?
答案 0 :(得分:9)
您可能想要查看Miguel de Icaza的getline.cs(博文中的链接已损坏,现在可以找到代码here)。根据您实际需要的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".
}
答案 1 :(得分:2)
我唯一知道的是Mono-Readline。
它为GNU Readline库提供了一个.NET接口 - 它有点原始,只有0.0.1版本,而且我只看到它在Mono运行时运行。
你也应该小心许可...... AFAIK任何链接GNU Readline库的东西都需要在GPL下发布。
答案 2 :(得分:2)
旨在模仿RedLine的大部分功能的项目是Deveel ReadLine,但我不得不说它没有被维护。上次我使用它时,它在.NET和Mono上运行得非常好,虽然在取消自动折叠的一行时有一个小错误。
答案 3 :(得分:0)
旧问题,但仍然存在,因为它出现在Google搜索结果中。提及以下内容很有意义:
https://github.com/tonerdo/readline是当今的不错选择。引用其自述文件:
ReadLine是类似GNU Readline的库,它是用纯C#构建的。它可以替代内置的
Console.ReadLine()
,并附带一些从unix shell获得的终端优势,例如命令历史记录导航和选项卡自动完成。它是跨平台的,可在支持.NET的任何地方运行,针对netstandard1.3意味着它可以与.NET Core以及完整的.NET Framework一起使用。
该项目已获得MIT许可