如何实现标签完成

时间:2011-03-10 04:11:46

标签: c++ tab-completion

我正在试图弄清楚如何在C ++应用程序中实现子命令的Tab键完成。我希望它的功能与Git的标签完成非常相似。我正在通过Git的来源徘徊,但它并没有向我跳出来。

我已经搜索了实现制表符完成的方法,但没有找到直截了当的答案,所以我猜它可能不一定是每个应用程序必须实现的功能。制表符完成是应用程序正在执行的特定shell的功能吗?关于让我的应用程序支持制表符完成(特别是在C ++中),我需要了解哪些基础知识?

2 个答案:

答案 0 :(得分:4)

评论中回答了这个问题。

选项卡完成是否正在执行应用程序的特定shell的功能?

  

关于让我的应用程序支持制表符完成(尤其是在C ++中),我需要了解哪些基础知识?

  

基本上了解有关bash-completion

的更多信息

答案 1 :(得分:1)

  

我已经搜索了实现制表符完成的方法,但没有找到   简单答案

查看代码here。这应该为您提供一个很好的起点。

  

关于将我的应用程序移植到哪些方面,我需要了解哪些基本知识?   支持标签页完成

您应该熟悉Trie数据结构,因为这是用于实现制表符完成的常用数据结构。有很多在线解释它的教程,请查阅。

伪代码(给出字符串列表):

对于列表中的每个字符串,将其字符存储在Trie数据结构中。

当用户按下Tab键时:

  

(GeeksForGeeks)   给定查询前缀,我们将搜索所有具有此查询的单词。

     
      
  1. 使用标准Trie搜索算法搜索给定查询。
  2.   
  3. 如果查询前缀本身不存在,请返回-1表示相同。
  4.   
  5. 如果查询存在并且在Trie中是单词结尾,请打印查询。可以通过查看最后一个匹配节点是否具有isEndWord标志来快速检查   组。我们在Trie中使用此标志来标记单词节点的结尾,以达到以下目的:   搜索。
  6.   
  7. 如果查询的最后一个匹配节点没有子节点,则返回。
  8.   
  9. 其他递归地打印最后一个匹配节点的子树下的所有节点。
  10.