【问题标题】:What windows component implement functionality similar to readline?什么windows组件实现了类似于readline的功能?
【发布时间】:2017-08-27 00:36:43
【问题描述】:

在这个问题中,我问的是readline 的一项特定功能:

Readline 库包含额外的函数,用于维护先前输入的命令行列表、调用和重新编辑这些行

现在在带有 Visual Studio 的 Windows 上,您不再需要臭名昭著的 readline。您可以使用fgets,箭头键会很高兴地回忆起您之前输入的内容。当然你也可以编辑这些。

在 linux 上,相同的代码(fgets 在循环中)不能这样工作。向上箭头显示为^[[A,左右箭头也不允许您导航线,如实验所示,还描述了here

我的问题是,Windows 的哪一部分使编辑成为可能?

我认为它可以是 conhost.exe 或 fgets 等的实现方式。不知怎的,我怀疑是前者。无论如何,我想知道 它是如何工作的,如果它记录在任何地方等等。例如,除了箭头之外,还有哪些其他键具有特殊含义并以不同方式处理而不是返回为缓冲区 fgets 的 par 写入。

【问题讨论】:

  • 认为这在逻辑上由控制台设备处理,并且仅在控制台设备位于cooked mode 时发生。实现细节可能会发生变化,但是是的,我猜它实际上发生在当前版本的 Windows 中的conhost.exe 中。我很确定它不是 C 运行时库的一部分,即与 fgets 无关。

标签: c linux windows console cross-platform


【解决方案1】:

documentation for DOSKEY 列出了特殊键。

我不知道有任何文档解释在 32 位 Windows 中此功能内置在控制台中,而 doskey.exe 只是它的一个接口。但是,很容易确认此功能不依赖于使用 C 运行时库或已从命令行 shell 启动的正在运行的控制台应用程序。

可以合理地猜测,在当前版本的 Windows 上,实现此功能的实际代码位于 conhost.exe 中,但当然这是一个实现细节,如有更改,恕不另行通知。从程序员的角度来看,重要的是 DOSKEY 功能存在于任何控制台窗口中,并且只要应用程序位于 cooked mode 中时就可以使用。

请注意,熟食模式是默认设置。因此,控制台应用程序将具有 DOSKEY 功能,除非应用程序专门禁用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    • 2019-02-28
    相关资源
    最近更新 更多