【问题标题】:Is there a .Net library similar to GNU readline?是否有类似于 GNU readline 的 .Net 库?
【发布时间】:2010-01-07 22:30:12
【问题描述】:

我正在考虑用 C# 编写一个控制台应用程序,并且我想结合历史记录、完成和命令行编辑功能,例如 GNU readline(但不一定像那样广泛!)

是否存在提供此类功能的 .net 库?我想一种选择是使用互操作服务来调用 GNU readline。但是有原生选项吗?

【问题讨论】:

  • 您是否考虑过 PowerShell 管理单元?这是我现在能想到的 .NET 世界中最“原生”的选项。
  • 也许只有我一个人,但是当您开始考虑通过这种方式使用 UI 来增强用户体验时,您真的应该开始关注 Windows 窗体。
  • 不确定我是否关注?您是否建议我将我的应用程序编写为 powershell 管理单元?这不只是给我PowerShell的标准命令行编辑(即基本的Windows控制台功能加上花哨的选项卡完成)吗?我追求的不止这些(历史搜索、单词删除等)。
  • nobugz - GUI 应用程序很好,但我仍然希望允许用户命令行样式交互和命令行编辑。考虑 PowerShell 与 PowerShell ISE。我个人讨厌 ISE 命令行编辑工具,我更喜欢控制台版本,但我想要更多(我无法添加,因为控制台 IO 不可自定义)。

标签: c# .net readline


【解决方案1】:

您可能需要查看 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".
}

【讨论】:

  • 我已经尝试过 CSharpRepl 项目中的 getline 库,但对制表符补全的支持有限。此外,完成功能本身也很难实现。也许只是我的极限......
  • 但是链接没有损坏o.o
【解决方案2】:

我只知道Mono-Readline

它为 GNU Readline 库提供了一个 .NET 接口——虽然它有点原始,只有 0.0.1 版,而且我只见过它在 Mono 运行时上运行。

您也应该小心许可...AFAIK 任何链接 GNU Readline 库的内容都必须在 GPL 下发布。

【讨论】:

    【解决方案3】:

    一个旨在模拟 RedLine 大部分功能的项目是Deveel ReadLine,但我不得不说它没有得到维护。上次我使用它时,它在 .NET 和 Mono 上都运行良好,尽管在取消自动折叠的行时有一个小错误。

    【讨论】:

      【解决方案4】:

      老问题,但仍然相关,因为它出现在 Google 搜索结果中。提及以下内容是有道理的:

      https://github.com/tonerdo/readline 现在是一个不错的选择。引用其自述文件:

      ReadLine 是一个用纯 C# 构建的类似 GNU Readline 的库。它可以作为内置 Console.ReadLine() 的替代品,并带来一些您从 unix shell 中获得的终端优势,例如命令历史导航和选项卡自动完成。

      它是跨平台的,可以在任何支持 .NET 的地方运行,以 netstandard1.3 为目标意味着它可以与 .NET Core 以及完整的 .NET Framework 一起使用。

      许可证

      该项目在 MIT 许可下获得许可

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-21
        • 1970-01-01
        • 2019-10-21
        • 2010-11-27
        • 2011-11-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多