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

标签 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/,我希望有一个更强大的自动完成功能,比如可执行文件本身中的一个函数,它会被调用——也许这样它就可以查询数据库中的可能的选项列表。或者可能输出一条消息,让您知道选项是什么。

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

最佳答案

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

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

关于c 控制台应用程序自动完成动态参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6107438/

相关文章:

C - GTKUibuilder - Glade - g_signal_connect 错误

c - 我应该单独初始化变量而不是声明它们吗?

mysql - 无法打开 Rails 控制台:未配置生产数据库,建立连接引发 ActiveRecord::AdapterNotSpecified

php - 在 func_get_args() 中有变量名

python - 带有三元运算符的可选参数

c - '{' token 之前的预期表达式

c - 将文件指针分配给另一个时出现段错误

java - 如何为 java 创建一个像控制台一样的 gui

batch-file - 从批处理文件启动多个控制台应用程序

java - 如何将参数传递给 java 中的方法,如 python 中的 f(*args)?