如何解决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;
}
运行它时,我想在命令后按[tab],这样它将为我提供可能的有用选项之一。
例:
./a.out g[tab]
将自动完成
./a.out good
我不想编辑/etc/bash-completion.d/,我希望有一个更强大的自动完成功能,类似于可执行文件本身中的一个函数,该函数会被调用-也许这样它就可以查询数据库以获取可能的选项列表。或输出一条消息,让您知道这些选项是什么。
如果您认为这完全不可能,请告诉我!
解决方法
完成是运行应用程序的外壳程序的属性。您必须为要支持的所有shell提供完成功能(bash,zsh,tcsh和fish具有可自定义的完成功能)。补全功能可以调用您的应用程序(例如运行
you_application --list-possible-arguments
)或执行其选择生成补全的任何操作-它在您的术语中已经是“强”补全。
在bash中,您使用内置的complete
声明完成。看一下/etc/completion.d
中的示例(gpg
是一个非常简单的示例;git
是一个相当复杂的示例)。
,如果您使用的是BASH,那么请看一下类似的帖子:
自动完成命令行参数
================================
如果要提供自己的命令行,请查看Readline库:
GNU Readline库提供了一个
供一组使用的功能
允许用户编辑的应用程序
输入的命令行。
Emacs和vi编辑模式都是
可用。 Readline库
包括其他功能
维护以前输入的清单
命令行,以便回忆,也许
重新编辑这些行,然后执行
以前类似csh的历史记录扩展
命令。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。