2011-05-24 81 views
3

我要寻找有控制台自动完成的方法 - 比如给定的应用程序,如:。c控制台应用程序自动完成动态参数

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; 
} 

当运行它,我想按[标签]后,命令,这样它会给我一个可能有用的选项。

例子:

./a.out g[tab] 

将自动完成对

./a.out good 

我不想编辑/etc/bash-completion.d/,我希望的是更强大的自动完成,就像可执行文件中的函数一样 - 可能会这样,它可能会查询数据库中的可能选项列表。或者输出一条消息,让你知道选项是什么。

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

+0

我认为最接近的(至少与zsh,而不是bash,我猜这些天是相似的),你可以通过添加一个--help选项返回一个“标准”布局中的有效选项列表,你的shell完成可以理解。 – Flexo 2011-05-24 08:18:21

回答

2

完成项是您从中运行应用程序的shell的属性。你将不得不为你想要支持的所有shell提供完成功能(bash,zsh,tcsh和fish有可定制的完成)。完成功能可以调用您的应用程序(例如,运行you_application --list-possible-arguments)或执行任何它所选择的操作来生成完成 - 在您的术语中它已经是一个“强大”的完成。

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

+0

太棒了!不幸的是,我只是没有深入了解这一点,或者没有洞察力用描述符参数请求调用应用程序本身。现在我所要做的就是安装bash-complete(我正在使用Mac OS - 我认为它会相似,但似乎Mac OS的bash不附带它) – 2011-05-24 20:05:34

0

如果你正在使用bash然后看看这个类似的帖子:

Auto-complete command line arguments

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

如果你想提供自己的命令行,然后看看在Readline库:

GNU readline库提供了 组函数供 应用程序允许用户编辑 键入的命令行。 Emacs和vi编辑模式均为 。 readline库 包括附加的功能以维持 先前输入 命令行的列表,来调用和或许 重新编辑的那些行,并执行以前 命令 csh类历史扩展。

+0

这不是shell命令行,它是应用程序中的控制台样式命令。 – Flexo 2011-05-24 08:11:42

+0

@awoodland:啊,是的,我误解了这个问题! – Nick 2011-05-24 08:16:00