gpt4 book ai didi

c - 如何在 Bash C 源代码中实现 Tab 补全

转载 作者:太空狗 更新时间:2023-10-29 12:16:19 24 4
gpt4 key购买 nike

作为 Linux 的初学者,我正在研究 Bash 的源代码并且对 Tab 补全非常感兴趣。

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

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

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

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

谁知道Tab补全的机制,能指出相关代码的位置吗?谢谢。

最佳答案

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

complete (TAB) Attempt to perform completion on the text before point. Bash attempts completion treating the text as a variable (if the text begins with $), username (if the text begins with ~), hostname (if the text begins with @), or command (including aliases and functions) in turn. If none of these produces a match, file- name completion is attempted.

(我相信,在适用的情况下,可以尝试使用可编程补全来代替文件名补全。)

关于c - 如何在 Bash C 源代码中实现 Tab 补全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23453676/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com