c控制台应用程序自动完成动态参数

时间:2011-05-24 08:06:37

标签: c console arguments

我正在寻找一种让控制台自动完成的方法 - 例如给定一个类似的应用程序:

int main (int argc, char ** argv)
{
  if (argc == 1) return EXIT_FAILURE;
  if (strcmp(argv[1], "good")==0) printf("good\n");
  if (strcmp(argv[1], "bad")==0) printf("bad\n");
  return EXIT_FAILURE;
}

运行它时,我想在命令后按[tab],这样它就会给我一个可能有用的选项。

示例:

./a.out g[tab]

会自动完成

./a.out good

我不想编辑/etc/bash-completion.d/,我希望有一个更强大的自动完成,类似于可执行文件中的一个函数,可能会被调用 - 也许它可以查询一个数据库中可能的选项列表。或者也许输出一条消息,让您知道选项是什么。

如果您认为这完全不可能,请告诉我!

2 个答案:

答案 0 :(得分:3)

完成是您运行应用程序的shell的属性。您必须为要支持的所有shell提供完成功能(bash,zsh,tcsh和fish具有可自定义的完成)。完成功能可以调用您的应用程序(例如运行you_application --list-possible-arguments)或执行其选择的任何内容来生成完成 - 它已经是您术语中的“强大”完成。

在bash中,您使用complete built-in声明完成。请查看/etc/completion.d中的示例(gpg是一个相当简单的示例; git是一个相当复杂的示例。)

答案 1 :(得分:0)

如果你正在使用BASH,那么看看这个类似的帖子:

Auto-complete command line arguments

================================

如果您想提供自己的命令行,请查看Readline库:

  

GNU Readline库提供了一个   供使用的功能集   允许用户编辑的应用程序   键入的命令行。   Emacs和vi编辑模式都是   可用。 Readline库   包括其他功能   维护以前输入的列表   命令行,召回,也许   reedit那些线,并执行   以前的csh式历史扩张   命令。