如何实现类似bash的标签完成?

zsl*_*ton 7 printing bash tab-completion

我正在尝试确定系统如何将字符打印到标准输入 - 也就是说,它如何打印用户可以删除的字符以及如果用户点击"Enter"则认为输入的字符.

我碰巧使用的是C,但如果解决方案依赖于语言,我会非常惊讶.

感谢您的任何见解!:D

Cas*_*bel 5

正如iny所说,bash使用readline作为输入.源代码在这里可用,并且有一个名为complete.c的文件.

为了回答你的问题,我认为它们实际上并没有打印到标准输入.Readline包含用户正在编辑的行内容的某种缓冲区,并且完成打印到此.当用户按下回车键时,缓冲区的内容被发送到想要读取一行的任何程序,并且在bash的情况下,传递给标准输入.(Readline不会这样做 - 其他使用readline的程序可能只是将值存储到字符串中供以后使用.)


Lau*_*ves 4

有几个人指出 bash 使用 readline,这是事实,但我认为您真正要问的是它如何能够在您按 Enter 键之前看到您输入的内容。

答案是 ttys(即:终端)可以切换到“原始模式”,其中终端的输入处理被禁用,然后您将看到输入的每个字符。这也禁用了键入字符的自动回显。

有关详细信息,请参阅有关从文件或终端读取单个字符的指南。