如何在Bash C源代码中实现Tab完成

作为Linux的初学者,我正在研究Bash的来源,对Tab完成很感兴趣。

在我看来,Tab完成有两种可能的实现。

  1. Bash从TTY中获取char'\ t',并调用相应的完成函数来根据你input的字符做一些事情。

  2. Tab键击发一个信号(事件?)来打击。 然后bash处理这个信号并callback到完成处理程序。

我做了一些search,并从Bash源查找相关的代码http://sources.debian.net/src/bash/4.3-7 ,但我找不到任何代码处理Tab信号或从TTY获得char'\ t'相关的代码。

任何人都知道Tab完成的机制,并可以指出相关代码的位置? 谢谢。

bash提示符下键入的每个按键都绑定到由readline库定义的函数。 (即使是大写字母和小写字母都被绑定到self-insert函数上,它只是简单地将键入的字符放在命令行中,而没有绑定到某个函数的键只是没有效果而被忽略) Tab键默认绑定到complete功能。 complete功能的作用是尝试在当前光标位置之前立即完成文本(以readline说法)。 从bash手册页。

完成(TAB)尝试在点之前对文本执行完成。 Bash尝试将文本作为变量(如果文本以$开头),用户名(如果文本以〜开头),主机名(如果文本以@开头)或者命令(包括别名和函数)依次处理完成。 如果没有一个产生匹配,则尝试完成文件名。

(我相信,可编程的完成是在适用的情况下试图取代文件名的完成。)