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

时间:2014-05-04 07:19:10

标签: c linux bash

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

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

  1. Bash从TTY获取char'\ t'并调用相应的完成函数,根据您键入的字符执行某些操作。

  2. Tab键击发出一个信号(事件?)进行重击。然后bash处理此信号并回调完成处理程序。

  3. 我进行了一些搜索并查找了来自Bash源http://sources.debian.net/src/bash/4.3-7的相关代码,但我找不到任何与处理Tab信号相关的代码或从TTY获取char'\ t'。

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

1 个答案:

答案 0 :(得分:2)

您在bash提示符下键入的每个键击都绑定到readline库定义的函数。 (甚至字母 - 大写和小写 - 都绑定到self-insert函数,它只是将键入的字符放在命令行上。未绑定到函数的键只是没有效果而被忽略。 )默认情况下, Tab 键绑定到complete函数。 complete函数的作用是尝试在当前光标位置之前完成文本(,在readline用语中)。来自bash手册页。

  

完成(TAB)                 尝试在点之前对文本执行完成。 Bash尝试完成将文本视为a                 变量(如果文本以$开头),用户名(如果文本以〜开头),主机名(如果文本开头)                 用@)或命令(包​​括别名和函数)依次。如果这些都没有产生匹配,则归档 -                 尝试完成名称。

(我相信,可编程完成,如果适用,则尝试代替文件名完成。)