【问题标题】:How do I accept Tab as input from STDIN to autofill text如何接受 Tab 作为来自 STDIN 的输入以自动填充文本
【发布时间】:2012-12-20 11:34:24
【问题描述】:

如何在使用 C 的 STDIN 一段时间后按下 Tab 键时自动填充文本?

输入看起来像,

C:\>autofil.exe Hello
C:\>autofil.exe Hello.  ( When I enter a period, it should autofil Hello after the period)
C:\>autofil.exe Hello.World  *World is autofilled when period was entered.

第二个要求是我是否在

C:\>autofil.exe Hello.World  (And when i press Tab key, `World` should print with other suggestions, as `Friend`, and if I press Tab again, print `Matt`, and scroll so on when tab is pressed... )

嗯,这是我的要求。选项卡完成以自动填充文本。另外,想知道如何从 STDIN 读取 Tab 键。

谢谢!

【问题讨论】:

  • 您必须实现自定义外壳。当您发出启动命令时,您的程序尚未运行。
  • 如果是bash,实现一个简单的 bash-completion 函数是很容易的。但是,我在这里看到C:\> ;)
  • 您不能“从标准输入读取密钥”,因为标准输入不是 tty。通常,stdin 与 tty 相关联,并且 tty 驱动程序正在检测关键事件并将字符发送到程序正在读取的流中,但 stdin 不是 tty。考虑按键事件根本没有任何意义。

标签: c


【解决方案1】:

您可以使用Readline GNU library For Windows,它非常易于使用,另一种方法是使用PDcurses/Ncurses(几乎相同)并手动操作(处理控制台行为等)。

如果您使用 readline,完成自动完成就像这样做一样简单:

rl_bind_key('\t', rl_complete);
char *input = readline("C:\>");

如果你使用 Ncurses/PDcurses,你将不得不做更多的工作:)

  • 首先保存实际的控制台参数。
  • 然后使用 noecho() 将输入的回显设置为关闭。
  • 您必须处理输入并解析参数以调用程序。
  • 此外,您还必须在目录(当前目录和 PATH 变量中的目录)中搜索与当前输入匹配的内容。

在结束程序之前再次设置保存的控制台参数。

Ncurses How-To 是一个简单明了的指南。

Posix curses definition 包含函数和键定义。

【讨论】:

    猜你喜欢
    • 2013-07-20
    • 2021-02-02
    • 2018-03-29
    • 2018-04-19
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多